Search

Engineering Review: 부스트 추천

부스트 탐색 UX 개선을 위해, 사용자에게 부스트를 다양한 기준에 따라 추천해주는 API 엔드포인트를 제공한다.
기본적으로 추천되는 부스트의 개수는 top 3 top 6를 가정한다.
(상하 관계가 명확하지 않은 경우 random한 6개)

API Spec

api-server(@Get /v1/boost/recommended)
BoostRecommendationController → boost-server로부터 응답 반환
boost-server(@Get /recommendation)
추천 기준에 따라 orm으로부터 부스트 프로모션 브랜드 ID를 받아와서, 현재 유저에게 보이는 모든 부스트들 중 해당 브랜드와 일치하는 부스트를 찾아 추천기준에 따른 순서대로 반환
추천 기준 중 어떤 기준이 선택되는지는 random 혹은 외부에서 조절 가능하도록 하게 될 것
v1.0 기준 랜덤
동일 브랜드의 활성화된 부스트 프로모션이 여러가지일 수 있다. 이는 별개로 취급한다.
ex:) 작성 시점 기준 요기요 부스트
채워지는 추천 목록에 중복되는 부스트 프로모션은 없어야 하며, 유저가 곧바로 구매할 수 있는 부스트들이어야 한다.
ex:) 기한이 지난 타임어택 부스트, 모집이 마감된 선착순 부스트, 구매할 수 없는 미션 부스트 등등 필터링하는 과정이 존재한다.
당장 구매하기에 부스트 기한이 유효하지 않은 경우
잠겨있는 경우(카드 부스트인데 해당 유저가 카드 유저가 아닌 경우..)
부스트 추천은 v1.0기준 카드 유저 대상으로만 오픈되어서 당장은 의미없다
부스트 타입별로 해당 부스트 타입의 특성으로 인해 유저가 구매할 수 없는 경우
시간 지난/시작하지 않은 타임어택, 더이상 수량이 안남은 선착순, 미션 완료되지 않은 미션
유저가 해당 부스트 캠페인의 구매 가능 횟수를 초과한 경우
이미 해당 유저가 활성화한 부스트이거나, 이미 현재까지 쌓인 추천 목록에 포함되는 경우
처음에 선택된 추천 기준에 알맞은 구매 가능한 부스트들이 정해진 추천 개수(v1.0 기준 6개) 이하일 경우
1.
(v1.0 기준) 다른 카드 유저들이 많이 구매한 순서대로 브랜드 ID들을 가져온다.
2.
그래도 부족하다면 현재 구매할 수 있는 모든 부스트들 중 랜덤하게 가져온다.
앱에서는 초기 구동 시 enabled & visible promotion들에 대한 정보들을 전부 받아오기 때문에, ID만 전달해주는 것으로 충분할 것이다. - resolved: 메인 진입 시 주어지는 정보와 동일하게

추천 조건

v1.0 - 즐겨찾기를 제외한 모든 추천 조건은 최근 30일을 기준으로 한다.

유저가 즐겨 구매한 부스트

유저가 구매한 모든 부스트에 대해 brand ID로 group by 하여, 많은 개수 순으로 brand ID 추출
부스트 프로모션으로 group by 해야 할지, 부스트 캠페인으로 group by 해야 할지, 아니면 brand테이블을 join하여 브랜드 ID로 group by 한뒤 해당 브랜드의 활성화된 부스트 프로모션들을 뽑는 식으로 해야 할지 조금 애매하다. - resolved: 브랜드 기준

유저가 최근에 구매한 부스트

boost 테이블에서 시간순으로 유저가 구매한 부스트 캠페인 brand ID 추출

유저가 최근에 클릭한 부스트 (현재 비활성화)

DB에 해당 정보가 저장되고 있는 곳이 없다.. 어떻게? -

유저가 즐겨찾기한 부스트

유저가 즐겨찾기한 브랜드 랜덤한 순서로 추출