Skip to content

Requirement

powern90 edited this page Nov 15, 2017 · 15 revisions

OpenAPI 요구 사항

서비스 활용 (Needs):

원프라이스에서 온라인 최적가 판단을 위한 데이터 수집을 포함한 빅데이터 활용 필요성.

서비스 컨셉

프로젝트 목적(Goals):

  • 기 운영되는 로빈 호스트를 공개 SW으로 전환시키며, 상품 관련 정보를 수집/조회/분석하는데 있어서 공개적으로 참여할 수 있는 플랫폼을 제공해 준다

  • 오픈 소스로 참여자가 자유롭게 참여하고 발전시켜나갈 수 있는 환경 제공

서비스 전체 구성도

프로젝트 목표(Objectives):

  • 소스: 언어 스펙 및 운영 SW 를 공개함 (github)
  • 서버: JSON기반 OpenAPI 형태로 지원 (https + json 기반 API 또는 Serverless).
  • 문서: API 공개 문서화 지원 (swagger).
  • 인증: API 인증을 표준 스펙에 지원함 (이메일인증 -> 인증키 -> jwt).
  • 성능: 대용량 데이터 업데이트를 지원함 (jwt 인증 + NoSQL).
  • 수집: 수집기의 표준 프로토콜 정의 및 예제 지원(예: 라즈베리파이)
  • 분석: ML 엔진을 통하여, 상품 정보를 분석함.

참여자(Members):

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) 

요구/요건 사항(Requirements):

  1. 소스 (Source):

    1. 언어 스펙

      • NodeJS 기반 javascript 으로 작성.
      • (추후, Typescript 지원하여 IDE환경에서 편리하게 작업 하도록)
    2. github 운영

    3. documentation

      • 주요 내용은 readme와 comment로 작성하고, 별도 문서는 안함.
      • 주 언어는 영어+한글로 작성.
    4. License

      • MIT, Apache 2.0 등으로 구성
  2. 서버 (Server):

    1. 서버 스펙

      • Node + Express 서버 기반.
      • 서버 환경과 설치에 대한 내용은 readme.md 파일을 통해서 정리.
    2. https + json 기반.

    3. 데이터베이스는 NoSQL 기반의 DynamoDB 기준으로 작성

      • 개발용: Local DynamoDB (Guide to install)
      • 운영용: access 키로 연결하며, 별도의 직접 연결 방법 없음.
  3. 문서 (Document):

    1. API 마다, swagger 기반 스펙문서 작성(json) 파일.

    2. 추가적인 문서들(디비 스키마등) 는 readme(또는 wiki)에 포함 시킴.

  4. 인증 (Authentication):

    1. 인증 방식

    2. 인증키 발급 방법

    3. 인증키 제한 사항

      • 유효하지 않은 이메일 주소 입력 시 발급이 거부 되어야 한다.
      • 인증키는 최장 30일 간 사용이 가능하며 이 후 만료된다.
      • 인증키는 무제한 재발급이 가능하다. 다만 재발급 된 인증키는 과거에 발급 되었던 인증키와 다른 값을 가져야 한다.
    4. 인증키의 사용

      • 발급받은 인증키는 사용자 인증이 필요한 API 호출 시 HTTP request에 실어 전달되어야 한다.
      • 아래 두 가지 방법을 지원한다.
        • HTTP header 사용 시 'x-access-header' 헤더 필드에 인증키 값을 설정
        • HTTP query 사용 시 access_header=<인증키> 형태로 인증키 값을 설정
      • 사용자 인증이 필요한 API 호출 시 유효한 인증키가 전달되지 않은 경우 401 Unauthorized 에러를 반환한다.
  5. 성능 (Performance) - NoSQL 데이터베이스:

    1. 비교 상품군 (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
      }
    2. 메타 상품군 (malls 테이블).

      • malls 테이블의 데이터 개수 : 2000만개 이상.
    3. 샘플 데이터.

      • 샘플 2770건의 비교 상품군 데이터 준비.
      • 샘플 데이터를 동시 요청시 전체 응답 시간이 최대 10초.
    4. 시간별 온라인 상품 가격 모니터링 상품군 개수 (크롤링 클러스터)

      • 목표: 100만개 이상
      • 비교 상품군 2770개 데이터를 동시 처리 요청시 10초안에 전부 처리 완료 되는지 확인.
        • 측정: 2770/10초 = 약 100만개/시간
    5. 시간별 온라인 상품 메타 데이터 수집/저장 및 분석 개수 (빅데이터 수집 및 분석)

      • 목표: 2000만개 이상
      • 각 20개씩 메타 데이터가 있는 2770개의 비교 데이터를 동시에 처리 요청할 경우, 총 10초안에 전부 처리 완료되는지 확인
        • 측정: 2770*20/10초 = 약 2000만개/시간.
    6. 시간별 온라인 상품 최적가 결정 개수 (AI기반 상품 최적가 추천)

      • 목표: 200만개 이상
      • 비교 상품군 2770개 데이터를 준비하고 최적가 계산 요청시 각 2개씩 결과 데이터(판매가기준, 배송비포함가기준)를 총 10초 안에 전부 처리 완료하는지 여부로 확인.
        • 측정: 2770*2/10초 = 약 200만개/시간.
    7. 대한민국 온라인 상품 정보 DB

      • 목표: 2000만개 이상
      • 메타 상품 데이터의 고유 데이터개수가 총 2000만개 이상인지 확인.
  6. 수집 (Collection) - 마이크로봇용 API:

    1. 라즈베리파이용 샘플 github 등록

      • ~/microbot 등록
    2. 설치 환경 및 순서가 readme.md 에 기술됨.

    3. 크롤링 노드의 서비스 프로토콜

      • 네이버 가격 비교 상품 예제. (자세한 내용은 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초내에 처리를 완료.
  7. 분석 (Analysis) - vector:

    1. ML 엔진을 활용한 카테고리 추천

      • 상품 이미지 기반 카테고리 분석

        • tensor-flow, cnn 활용한 300만건 데이터 학습
      • 추후: 상품 이미지 + 상품명 활용한 카테고리 분석.

      • 추후: 상품 이미지 + 상품명 + 제조사 + 브랜드 활용한 카테고리 분석.

    2. ML 엔진을 이용한 상품 유사도 벡터 생성

      • 상품 정보를 10차원 벡터 값으로 저장
      • 추후: word2vec 활용한 prod2vec 발전.

    상품 이미지 학습결과 그래프