티스토리 뷰

Sada9에는 사실 API 서버가 두개가 있습니다. 클라이언트와 통신하는 Main API 서버Main API 서버에서 상품의 카테고리 분류를 위해서 호출하는 카테고리분류 API서버

이 글에서는 Sada9앱에서 어떻게 상품들의 카테고리를 분류 하는지와 카테고리 분류API 서버의 시스템 구성에 대해서 간략하게 설명드리려고 합니다.  


1. 서버 사양

카 테고리 분류 API서버는 물리적으로 Main API 서버와 다른 Host(AWS - m1.small)상에서 동작하고 있습니다. 시스템 설계상의 이유로 분리한 건 아니고 단순히 AWS 를 한 번 써보고 싶다는 생각에서 사비를 털어서 운영중에 있습니다.

(최근에 가격은 내렸다지만 여전히 비싸요)


2. 카테고리 분류 방식

1차 버전에서는 상품의 카테고리를 파악하기 위해 사전 기반의 간단한 방법을 사용하고 있습니다. 카테고리 분류는 상품명과 상품의 카테고리를 형태소 분석하여 형태소 분석된 단어를 단어-카테고리 사전에 lookup 하여 상품의 카테고리를 파악합니다. 기존에는 상품명만으로 분류하였으나 상품명에 충분한 정보가 없는 경우가 많아서 카테고리명 활용 로직을 오픈전에 부랴부랴 추가하게 되었습니다. 하지만 아직 사전이 미흡하기도 하고 상품에 카테고리 정보가 없는 경우도 많아 오분석 되는 경우가 적지 않습니다. 2차 릴리즈에서는 좀 더 정확한 분류를 위해서 다른 방법을 추가로 고안해 보는 중이고 좀 더 세분화된 카테고리 분류를 가져가는 것은 어떨까도 생각중입니다. 사전을 기반하지 않고 분류하는 방법도 생각중인데 간단한 방법이 생각나질 않네요 ㅎ

(상품명을 이용하여 카테고리 분류할 때)


3. 시스템 구성

개발언어
* Ruby(루비는 사랑입니다) 

사용 라이브러리
* Ruby on Rails ( http://rubyonrails.org/ )
- API 서버 Framework로 사용 

* Puma ( http://puma.io )
- Ruby Webserver(ROR backend로 사용, thin을 사용하다가 api서버에서 blocking call이 들어가면서 thin에서 puma로 교체) 

* Mongoid ( https://github.com/mongoid/mongoid )
- MongoDB ORM라이브러리

* Nokogiri ( http://nokogiri.org/ )
- HTML문서 파싱을 위해 사용 

* 은전한닢 ( http://eunjeon.blogspot.kr )
- 형태소 분석 라이브러리. 좋아요

API 서버 개발을 위해서 위와 같은 라이브러리들을 사용했습니다. ROR을 이용하면 정말 쉽게 API 서버를 완성할 수 있습니다. 처음 사용할때는 조금 복잡하다고 느낄 수는 있으나 조금 익숙해지면 활용도가 정말 높다고 생각됩니다. 따로 더 언급할 점은 RoR Backend로 처음에는 thin(Event Loop based Webserver)을 사용했는데 상품페이지 파싱하여 카테고리 정보를 가져오는 로직(Blocking Call)이 나중에 추가되었던 관계로 API 서버가 thin을 사용하기 힘든 구조가 되어서 쓰레드풀을 사용하는 PumaROR Backend를 변경하였습니다. 그 리고 형태소 분석을 위해 은전한닢을 사용하였는데요. 루비 바인딩이 있어서 편리하게 사용할 수 있었습니다. 사용자 사전 추가할 때 품사를 명시해야 하는것과 단어의 마지막 음절에 받침 존재여부를 적어주어야 하는 것은 조금 불편하지만 여전히 훌륭한 오픈소스 형태소 분석기라 생각됩니다.


4.  향후 기능 추가.

멀 티 카테고리(or 태깅)을 이용하여서 사용자가 필요한 상품을 좀 더 편리하게 선택할 수 있도록 하는 방법을 고려중에 있습니다. 하지만 아직 완전히 결정난 것은 아니구요. 그리고 2차에서는 사용자가 좋아할 만한 상품을 추천해 주기 위해서 추천시스템을 적용예정입니다. 성공적으로 추천시스템이 개발된다면 다음에는 추천시스템 구현 관련 글을 적어볼 수 있겠네요.

댓글
최근에 올라온 글
싸다구
최근에 달린 댓글