[프로젝트] 광고관리 시스템

마케팅 업무 효율화를 위한 웹 애플리케이션 

- 작업내용 : Angular2 + Node.js + Express + Mysql 을 이용한 웹 어플리케이션 및 Node.js 를 이용한 자동화 어플리케이션 개발

- 작업 참여도 : 70%(2인 팀플)
- 나의 작업 : API Server, Open API Call, Authentication, Web Scraping, Database, Linux Crontab
- 작업 기간 : 360시간(6개월 프로젝트)
- 작업 범위 : Angular2 + DevExtreme(HTML5 UI Widget) + Node.js + Express(Node.js Framework) + MysqlDB + Linux
- 사용외부소스 :
네이버 광고 API http://naver.github.io/searchad-apidoc/#/guides
네이버 검색 API https://developers.naver.com/products/search/
네이버 데이터랩 API https://developers.naver.com/products/datalab/
구글 트랜드 API https://www.npmjs.com/package/google-trends-api
카페24 쇼핑몰 API https://developer.cafe24.com/docs/guide/customer_service.html
- 소프트웨어 구성

  • OS(Server) : Linux CentOS
  • DataBase : MySQL
  • Language : HTML5 / CSS3 / Node.js / SQL
  • FrameWork : Express(Node.js) / Angular2(HTML, CSS, JS)

설명 : 웹 어플리케이션과 자동화 로직을 위한 어플리케이션 개발 프로젝트입니다.
크게 '네이버 (쇼핑검색/파워링크) 자동입찰 시스템'과 '가격위반상품 스크래핑 시스템'으로 나뉩니다.
네이버 자동입찰 시스템은 사용자가 웹프로그램을 통해 네이버광고에 등록한 정보를 조회하고 입찰 제약조건 및 목표수치를 입력하면 Node 프로그램이 자동으로 원하는 상품을 원하는 키워드에 원하는 순위에 '최적가'로 입찰해줍니다.
가격위반상품 스크래핑 시스템은 사용자가 웹프로그램을 통해 카페24 쇼핑몰에 등록된 상품정보를 조회하고 제품키워드를 입력하면 Node 프로그램이 자동으로 해당 제품의 최저가를 위반한 상품으로 네이버 쇼핑페이지를 스크래핑해 찾아줍니다.

1. API 서버
Rest API 를 준수하여 라우팅 설계했으며, JSON Web Token 으로 토큰기반 인증처리 했습니다. 추후 상업용 솔루션화를 위해서 유저 정보와 광고주 및 쇼핑몰 계정정보를 맵핑하여 권한없는 데이터에 대해 접근하지 못하게 처리했습니다. MVC 패턴에서 뷰로직은 프론트엔드 프레임워크 앵귤러로 넘기고 라우터, 컨트롤러, 모델을 통해 각각의 영역을 분리했습니다.

2.  애플리케이션 서버
Node 프로그램으로 제작하였으며, 크게 네이버 광고 API - DB 동기화 로직 / 카페24 API - DB 동기화 로직 / 네이버 광고 API 입찰가 조정 로직 / 네이버 쇼핑상품 스크래핑 - DB 동기화 로직 4가지로 구분됩니다.
4가지 프로세스는 각각 리눅스 크론탭을 사용하여 일정 주기로 반복되며, 쉘스크립트를 통해 프로세스의 중복을 예방해줍니다. 네이버 자동입찰의 경우 자동입찰 로직으로 이진트리 알고리즘을 사용하였으며, 사용자 설정값에 따라 자동입찰여부, PC or 모바일 기준 입찰, 최대입찰가, 최소입찰가, 입찰키워드, 목표순위 등 제약조건에 따라 입찰합니다.
자동 스크래핑의 경우 여타 이유로 페이지를 긁어오는데 실패하거나 쿼리스트링으로 페이징하며 여러페이지를 가져와야 하는 에러카운트 경우 재귀함수로 처리하고 DOM Parsing 후 데이터화하였습니다.
API 호출로직, DB 커넥션 풀, 스크래퍼, Web Request/Response 객체 등 자주 사용하는 로직은 모듈화하여 컨트롤러에서 호출하여 사용할 수 있게 하였습니다. 특히 광고데이터의 트리구조상 순차적 프로그래밍이 필요한 경우가 많았는데, 비동기 API를 동기적으로 사용하기 위해 Promise 객체를 사용하여 처리했습니다.
데이터베이스는 각각의 광고 트리구조 및 카페24 상품정보와 스크래핑 결과에 따라 계층형으로 설계하였으며,  서브쿼리, 조인을 최대한 활용하였습니다.