개요
내가 좋아하고 자주 사용하는 서비스들을 잘 살펴보면 어느센가 추천 시스템이 다 적용이 된 걸 알 수 있다.
유튜브나 넷플릭스는 워낙 유명하기 때문에 굳이 설명하지 않을 것이고 나머지 서비스들에 대해 한번 분석해 보도록 하겠다.
쿠팡
Main 추천
어떤 사용자가 어떤 상품 하나의 상세 정보 페이지로 진입한다.
- 해당 상품을 판매하고 있는 판매자가 판매하고 있는 다른 상품들을 보여준다.
- 해당 상품을 구매한 고객들이 같이 구매한 상품들을 보여준다.
- 해당 상품을 본 다른 사용자들의 다음으로 본 상품들을 보여준다.
- 위의 사항과 상품과 연관성이 있다고 생각하는 상품들을 보여준다.
그외의 추천
- 할인 상품을 항상 골라 사는 사용자에게는 할인 상품을 먼저 추천해준다.
- 트랜디한 상품을 골라 사는 사용자에게는 트랜디한 상품을 먼저 추천해준다.
- 시간 기반 인기 상품 추천.
- 장바구니에 담긴 항목들과 현재 보고 있는 상품과 연관성이 높은 상품 추천.
추천 시스템의 변천사
기존(2019년도 당시) 쿠팡의 추천 방식 : 유저 기반 추천
현재 쿠팡의 추천 방식 : 개인화 추천(할인을 좋아하는 사용자에게는 할인 추천 항목들을 상위에 노출 시켜주는 것과 같은.)
과거 추천 아키텍처
데이터
로그 데이터, 상품 정보, 유저 정보 → 복잡한 중간 단계의 테이블을 생성 → 결과(Source Item, Target Item, Score)
서버

모델 파이프라인의 추천 결과가 Batch 테이블에 쌓게 하는 것이 핵심 로직.
백엔드 서버는 하나의 제품과 다른 하나의 제품의 연관도를 계산하여 점수를 매긴 다음 점수의 내림차순으로 Key-Value 구조의 NoSQL에 Look-Up 해주는 것만으로 충분함.
이 아키텍처에서는 상품의 수가 증가하면 점수 계산할 양이 Linear 하게 증가하지만 캐시 서버에 올려둬서 레이턴시를 낮추는 방식으로 아키텍처를 구성하였다고 한다.
단점
- 모델 변경에 따라 길어지는 파이프라인(필터, 부스팅 등)
- 추가 요청 사항을 처리하기 어려움.
- 완성 전까지 결과를 알 수 없음.
- 개발에 시간이 오래 걸림.
한계
- 점진적인 개선이 힘듦.
- 모델의 재활용이 어려움.
개선 목표
- 추천 모델과 서비스를 분리시킬 것.
- 상품 정보나 사용자 정보를 서빙 단계에서 접근 가능할 것.
- 필터, 부스팅 등의 변경이 쉽고 빠를 것.
현재 추천 아키텍처
검색과 추천
검색 | 자연어 | 키워드 매칭 | 관련도 |
---|
추천 | 상품/유저 | 모델 결과 | 모델 스코어 |
쿼리 → 후보 찾기 → 랭킹

- Feature(상품을 잘 표현 하기 위한 도구) : TensorFlow, Spark, Hive 중 하나로 각자 상품을 잘 표현하는 도구를 선정하여 만든다. 그리고 이러한 내용을 주기적으로 Hbase에 저장을 한다. 여기서 사용하는 통신 방식은 gRPC 통신을 쓴다.
- Protocol Buffer를 이용하는데 상품에 대한 정보를 메세지로 정의한다.
- HBase 상에는 함께 보여져야 하는 상품들을 리버스 인덱싱 하거나 카테고리, 성인용 상품 여부, 로켓배송 상품 여부와 같은 필터링 되어야 하는 것들도 인덱싱 된다.
- 때에 따라서 서빙 타임 때 바로 데이터를 꺼내봐야 하는 시점에 protobuf 그대를 바이너리로 저장한 형태로 꺼내올 수 있도록 설계.

인프런(22.10.03 기준)
로그인 한 어떤 사용자의 메인 피드
- 나와 비슷한 사람들이 수강한 강의 추천(유저 기반 필터링)
- 내가 학습한 OO 언어 분야 인기 강의(인프런이 만든 추천 강의 서비스)
- 신규 강의(인프런이 만든 추천 강의 서비스)
어떤 강의의 상세 정보 페이지
- 해당 강사가 만든 다른 강의
- 비슷한 강의(아이템 기반 필터링)
- 해당 강의와 관련된 채용 공고(다른 서비스와의 연결, 광고)
- 연관 로드맵(아이템 기반 필터링)
원티드(22.10.03 기준)
로그인 한 어떤 사용자의 메인 피드
- 커리어에 도움 되는 아티클 추천
- 해당 사용자의 Job에 따른 자체 제작 영상 컨텐츠 추천
로그인 한 어떤 사용자의 채용 피드
- 합격률 높은 포지션(원티드가 만든 추천 채용 서비스)
- 급성장 중 기업 추천(원티드가 만든 추천 채용 서비스)
- 기업 복지에 다른 기업 추천(원티드가 만든 추천 채용 서비스)
- 각 테마에 따른 기업 추천(원티드가 만든 추천 채용 서비스)
- 요즘 뜨는 포지션(원티드가 만든 추천 채용 서비스)
당근마켓(22.10.03 기준)
어떤 사용자가 어떤 상품 하나의 상세 정보 페이지로 진입한다.
- 해당 상품 판매자가 판매하고 있는 다른 상품을 보여준다.
- 해당 상품을 본 다른 사용자들이 이어서 찾아본 상품을 보여준다.(이 글과 함께 봤어요.)
- 해당 사용자가 최근에 검색하거나 찾아본 상품과 연관 있는 상품들을 보여준다.
(2번 추천-"이 글과 함께 봤어요"에서 아무런 값이 나오지 않은 경우 보여진다고 함.)
출처