-
Notifications
You must be signed in to change notification settings - Fork 2
Requirement
원프라이스에서 온라인 최적가 판단을 위한 데이터 수집을 포함한 빅데이터 활용 필요성.

-
기 운영되는 로빈 호스트를 공개 SW으로 전환시키며, 상품 관련 정보를 수집/조회/분석하는데 있어서 공개적으로 참여할 수 있는 플랫폼을 제공해 준다
-
오픈 소스로 참여자가 자유롭게 참여하고 발전시켜나갈 수 있는 환경 제공

- 소스: 언어 스펙 및 운영 SW 를 공개함 (github)
- 서버: JSON기반 OpenAPI 형태로 지원 (https + json 기반 API 또는 Serverless).
- 문서: API 공개 문서화 지원 (swagger).
- 인증: API 인증을 표준 스펙에 지원함 (이메일인증 -> 인증키 -> jwt).
- 성능: 대용량 데이터 업데이트를 지원함 (jwt 인증 + NoSQL).
- 수집: 수집기의 표준 프로토콜 정의 및 예제 지원(예: 라즈베리파이)
- 분석: ML 엔진을 통하여, 상품 정보를 분석함.
Steve (x**i@thecommerce.co.kr)
Nash (n**j@thecommerce.co.kr)
Jerom (je**c@thecommerce.co.kr)
Tim (ma***r@hotmail.com)
Spike (sp**j@gmail.com)
Json (wj**6@gmail.com)
Mike (rl**6@gmail.com)
Alex (hy**4@gmail.com)
-
-
언어 스펙
- NodeJS 기반 javascript 으로 작성.
- (추후, Typescript 지원하여 IDE환경에서 편리하게 작업 하도록)
-
github 운영
- 메인: https://github.com/robincloud
- 서버: robincloud/openapi
-
documentation
- 주요 내용은 readme와 comment로 작성하고, 별도 문서는 안함.
- 주 언어는 영어+한글로 작성.
-
License
- MIT, Apache 2.0 등으로 구성
-
-
-
서버 스펙
- Node + Express 서버 기반.
- 서버 환경과 설치에 대한 내용은 readme.md 파일을 통해서 정리.
-
https + json 기반.
- 도메인: https://robin-api.oneprice.co.kr
- echo 테스트 지원 (~/echo ).
-
데이터베이스는 NoSQL 기반의 DynamoDB 기준으로 작성
- 개발용: Local DynamoDB (Guide to install)
- 운영용: access 키로 연결하며, 별도의 직접 연결 방법 없음.
-
-
-
API 마다, swagger 기반 스펙문서 작성(json) 파일.
-
추가적인 문서들(디비 스키마등) 는 readme(또는 wiki)에 포함 시킴.
-
-
-
인증 방식
- JWT(JSON Web Tokens) 인증 방식을 사용한다.
-
인증키 발급 방법
- 인증키는 RobinCloud Open API 메인 페이지를 통해 발급한다.
- RobinCloud Open API 메인 페이지에서 이메일 주소 입력 후 Submit 시 인증키를 발급하여 해당 이메일로 전달한다.
- 인증 절차를 간소화 하기 위해 초기 구현은 이메일 주소 입력 만으로 키를 발급 받도록 한다.
-
인증키 제한 사항
- 유효하지 않은 이메일 주소 입력 시 발급이 거부 되어야 한다.
- 인증키는 최장 30일 간 사용이 가능하며 이 후 만료된다.
- 인증키는 무제한 재발급이 가능하다. 다만 재발급 된 인증키는 과거에 발급 되었던 인증키와 다른 값을 가져야 한다.
-
인증키의 사용
- 발급받은 인증키는 사용자 인증이 필요한 API 호출 시 HTTP request에 실어 전달되어야 한다.
- 아래 두 가지 방법을 지원한다.
- HTTP header 사용 시 'x-access-header' 헤더 필드에 인증키 값을 설정
- HTTP query 사용 시 access_header=<인증키> 형태로 인증키 값을 설정
- 사용자 인증이 필요한 API 호출 시 유효한 인증키가 전달되지 않은 경우 401 Unauthorized 에러를 반환한다.
-
-
-
비교 상품군 (items 테이블).
- items 테이블의 데이터 개수 : 100만개 이상.
- 원프라이스 goods 테이블 우선 저장 (먼저, mid 상품 위주로 저장)
예: 백산수 2L 6개들이 1박스, 상품ID: 10010, MID: 6725779727, 옵션키: 20041751 일 경우
{ "id": "op_10010", // Primary Key (Unique) "name": "신라면 1박스", // 상품 이름 "refId": "nv_6725779727_20041751" // 참조할 id } { "id": "nv_6725779727_20041751", // 네이버 고유 mid "name": "백산수 2L", // 상품 이름 "option": "6개", // 상품 옵션 이름 "list": [8912, 8913, 8914] // malls의 id }
-
메타 상품군 (malls 테이블).
- malls 테이블의 데이터 개수 : 2000만개 이상.
-
샘플 데이터.
- 샘플 2770건의 비교 상품군 데이터 준비.
- 샘플 데이터를 동시 요청시 전체 응답 시간이 최대 10초.
-
시간별 온라인 상품 가격 모니터링 상품군 개수 (크롤링 클러스터)
- 목표: 100만개 이상
- 비교 상품군 2770개 데이터를 동시 처리 요청시 10초안에 전부 처리 완료 되는지 확인.
- 측정: 2770/10초 = 약 100만개/시간
-
시간별 온라인 상품 메타 데이터 수집/저장 및 분석 개수 (빅데이터 수집 및 분석)
- 목표: 2000만개 이상
- 각 20개씩 메타 데이터가 있는 2770개의 비교 데이터를 동시에 처리 요청할 경우, 총 10초안에 전부 처리 완료되는지 확인
- 측정: 2770*20/10초 = 약 2000만개/시간.
-
시간별 온라인 상품 최적가 결정 개수 (AI기반 상품 최적가 추천)
- 목표: 200만개 이상
- 비교 상품군 2770개 데이터를 준비하고 최적가 계산 요청시 각 2개씩 결과 데이터(판매가기준, 배송비포함가기준)를 총 10초 안에 전부 처리 완료하는지 여부로 확인.
- 측정: 2770*2/10초 = 약 200만개/시간.
-
대한민국 온라인 상품 정보 DB
- 목표: 2000만개 이상
- 메타 상품 데이터의 고유 데이터개수가 총 2000만개 이상인지 확인.
-
-
-
라즈베리파이용 샘플 github 등록
- ~/microbot 등록
-
설치 환경 및 순서가 readme.md 에 기술됨.
-
크롤링 노드의 서비스 프로토콜
-
네이버 가격 비교 상품 예제. (자세한 내용은 api spec 문서 참고)
-
Http JSON기반 Task GET 요청
Request:
http://<server-address>/tasks?agent=<agent>&size=<size>Reponse: application/json
[ { "id": "nv_5639964597", // task-id from server. "mid": "5639964597", // target mid of nshop. }, { "id": "nv_8621530988", // task-id from server. "mid": "8621530988", // target mid of nshop. } ]
- 크롤링 완료할 경우 POST 전달함..
Request Body: application/json
{ /* server info */ "id": "nv_5639964597", // any id from server. "mid": "5639964597", // target mid of nshop. /* client crawling response */ "data": [ { "cat": "봉지라면", // category name (delimiter '>') "item_name": "농심 신라면 120g", // item name "option_name": "1개", // option name "pkey": 20041523, // option id (or key) "count": 1328, // max search count "is_invalid": 1 // whether the item is invalid "nodes": [ // list of malls found. { "id": "11900885999", "name": "농심 신라면 120g / 라면 모음전", "mall": "푸드온라인몰", "price": 10, "delivery": 2500, "npay": 0, }, { "id": "11532092155", "name": "농심 신라면 120g", "mall": "구르미", "price": 10, "delivery": 2500, "npay": 0, }, ... , ], "meta": { // additional meta information. "cat": "식품>가공식품>라면>봉지라면", "thumbnail": "http://shopping.phinf.naver.net/main_5639964/5639964597.20170602120039.jpg?type=f300", ... , } }, ... , ] }
Response Body:
HTTP_STATUS: 200- ok.- 1개의 Task 에 대해서 최대 5초내에 처리를 완료.
-
-
-
-
ML 엔진을 활용한 카테고리 추천
-
상품 이미지 기반 카테고리 분석
- tensor-flow, cnn 활용한 300만건 데이터 학습
-
추후: 상품 이미지 + 상품명 활용한 카테고리 분석.
-
추후: 상품 이미지 + 상품명 + 제조사 + 브랜드 활용한 카테고리 분석.
-
-
ML 엔진을 이용한 상품 유사도 벡터 생성
- 상품 정보를 10차원 벡터 값으로 저장
- 추후: word2vec 활용한 prod2vec 발전.

-