인기상품 추천

인기상품 추천에 대한 이야기로 시작해 보자. 인터넷 시대 이전에는 가장 많이 팔린 도서나 음반을 진열하곤 했고, 개인화 추천이 핵심이 된 요즘에도 빌보드 차트에 오른 노래들은 많은 사람들의 관심을 끈다.

수집 기간과 갱신 주기

좋은서점닷컴을 방문하는 고객에게 인기상품을 보여주기 위해 주로 구매정보를 이용한다. 즉, "가장 많이 판매된 서적"을 인기상품으로 선정한다는 뜻이다. 언뜻 단순해 보이지만, 좀더 구체화할 필요가 있다.

  • 데이터 수집 기간: 얼마나 오랜시간 동안의 주문 데이터를 이용해 인기상품을 계산할까?
  • 갱신 주기: 얼마나 자주 인기상품을 계산할까?

데이터 수집 기간으로 가령 1일, 1주, 1달, 1년 등을 선택할 수 있다. 1년을 기준으로 계산하는 방법은 꾸준히 많은 사람들에게 판매되는 서적을 선택할 수 있는 반면, 며칠 전에 출판된 신간도서는 아직 판매량이 많지 않아서 인기상품에 선정되기가 쉽지 않을 것이다. 반면 1일을 기준으로 계산하는 방법은 꾸준히 많이 판매되는 책들 이외에도, 새로 나온 책 또는 일시적으로 관심이 높아진 서적도 선택될 수 있다. 예를 들자면, 홍길동작가의 어떤 소설이 며칠 전에 노벨 문학상을 수상했다면 갑자기 많은 독자들이 관심을 가지게 되어 1일을 기준으로 계산한 인기상품 목록에 선정될 수 있을 것이다. 한편 1일을 기준으로 계산된 인기상품들 중 일부는 시간이 지나서 1달이나 1년 기준으로 보면 그다지 인기있는 상품이 아닐 가능성이 있다.

데이터 수집 기간으로 1주를 선택하기로 했다고 한다면, 그 1주는 구체적으로 언제일까? 좋은서점닷컴을 화요일 오후 1시 30분에 어떤 고객이 방문한다고 하자. 1주간의 인기상품 목록을 계산할 때,

  • 매주 한번, 가령 일요일 자정에 계산한다면, 고객은 이전 주의 월요일부터 일요일 동안의 주문데이터를 바탕으로 계산된 목록을 보게 된다.
  • 매일 자정에 계산한다면, 고객은 이전 주의 화요일부터 하루 전 월요일까지의 기간을 바탕으로 계산된 상품들을 보게 된다.
  • 한 시간에 한번씩 계산한다면, 고객은 이전 주의 화요일 오후 1시부터 당일 오후 1시까지의 기간을 바탕으로 계산된 상품들을 보게 된다.

매주 한번씩만 계산하는 경우에는 일주일에 한번만 계산하게 되니까 비교적 간단하지만, 그 결과가 일주일동안 변하지 않기 때문에, 만약 주중에 발간되는 신간이 판매량이 많더라도 며칠이 지나서야 인기상품 순위에 고려된다는 단점이 있다. 매일 계산하거나, 매 시간 계산하는 경우 고객의 방문시점을 기준으로 좀더 최근의 주문 데이터를 사용한 결과를 보여줄 수 있는 반면, 인기상품 목록을 좀더 자주 갱신하도록 구현해야 한다.

데이터베이스의 활용

인기상품 목록을 계산한다는 것은 어떤 의미일까? 개념적으로는 정해진 기간동안의 상품별 판매량을 계산한 뒤, 판매량이 가장 많은 상품을 고르는 것으로, 실제 계산은 데이터베이스를 이용한다.

트랜잭션 데이터베이스를 직접 이용해서 인기상품을 계산하는 것은 불가능한 것은 아니지만 좋은 방법은 아니다. 트랜잭션 데이터베이스의 핵심기능은 새로운 항목을 생성하거나, 이미 생성된 항목을 변경하는 데에 있기 때문이다. 정해진 기간 동안의 상품별 판매량를 계산하는 것과 같이 기초 데이터를 가공하는 분석작업을 많이 하면 트랜잭션 데이터베이스에 필요이상의 부하를 주게 된다. 데이터 수집기간이 길어서 많은 양의 데이터를 처리해야 하거나, 갱신 주기가 짧아서 자주 계산해야 하는 경우 더욱 부담이 된다.

인기상품 선정을 위한 상품별 판매량 계산은 데이터 웨어하우스를 이용하는 것이 좋다. 다량의 데이터를 다룰 수 있으므로 데이터 수집기간이 길거나 갱신 주기가 짧아도 문제가 없다. 다만 데이터 웨어하우스는 백엔드(backend)에서 접근하지 못하므로 상품별 판매량 및 인기상품 선정을 위한 질의문(query)를 데이터 웨어하우스에서 실행하고 그 결과를 백엔드로 옮겨두는 작업을 갱신주기마다 해야한다. 데이터 웨어하우스에만 저장하고 트랜잭션 데이터베이스에는 저장하지 않는 정보도 있다. 고객이 사이트를 이용할 때 발생하는 정보 중 추후에 변경해야할 필요가 없고 또 발생하는 데이터의 양이 많은 경우로 클릭정보가 그 예이다. 데이터 웨어하우스에서 인기상품을 계산하면 구매정보에 추가로 클릭정보를 활용하는 것도 가능해진다.

특화된 방법으로 드루이드(Druid), 피노(Pinot), 클릭하우스(ClickHouse)와 같은 실시간 분석 데이터베이스 (Real-time OLAP) 도 있다. 이들 기술들은 데이터 웨어하우스로 기록되는 다량의 이벤트 데이터를 실시간으로 처리하며 임시 결과를 저장해 두기 때문에, 상품별 판매량을 빠르게 - 거의 실시간에 가깝게 - 갱신할 수 있다. 실시간 분석 데이터베이스는 데이터 웨어하우스보다 덜 범용적이기 때문에 그 활용도가 충분할 때를 적절히 판단하여 도입하게 된다.