추천 기능 넣고 싶은데 구현방법을 모르겠어요
추천의 뜻부터 후보 조회·제외·정렬 과정과 추천 방식별 필요한 데이터를 설명해요
2026-08-23 · 읽는 시간 6분
추천 기능을 만들려면 어떻게 해야 할까요?
먼저 어디서 누구에게 무엇을 추천할지 ‘추천 목표’를 정해야 합니다. 그다음 인기순, 내용 기반, 개인화 중 어떤 방식으로 추천할지 고르고, 그 방식에 맞는 데이터를 준비하면 돼요. UQA로 항목 정보·임베딩·사용자 행동을 함께 저장하고 추천 후보를 조회·제외·정렬할 수 있습니다.
1. 추천 기능, 왜 필요하고 어떻게 만들까요?
추천 기능은 사용자가 뭘 찾지 않아도 앱이 알아서 "이거 한번 봐봐!" 하고 보여주는 기능이에요.
예를 들어, 쇼핑몰에서 "이 상품 본 사람들은 이것도 샀어요" 하거나, 유튜브에서 "이 영상 다음에 이거 보세요" 하는 것들이 모두 추천 기능입니다.
추천 기능을 만들려면 크게 세 단계를 거쳐야 해요.
어디에, 누구에게, 뭘 추천할지 정하기 (추천 목표)
어떤 방식으로 추천할지 고르기 (인기순, 내용 기반, 개인화)
그 방식에 맞는 데이터 준비하기
2. 추천 목표 정하기: 누구에게 뭘 보여줄까요?
추천 기능을 만들 때 가장 먼저 할 일은 "어디서, 누구한테, 뭘 추천해 줄까?"를 정하는 거예요.
마치 친구에게 선물을 고를 때, "생일 파티에서, 친구에게, 어떤 선물을 줄까?" 하고 생각하는 것과 비슷합니다.
이걸 추천 목표라고 부르는데, 추천 목표에 따라 필요한 데이터나 추천 방식이 달라져요.
예를 들어, 상품 상세 화면에서는 "이 상품과 비슷한 다른 상품"을 추천하고 싶을 수 있습니다.
홈 화면에서는 "요즘 가장 인기 있는 상품"을 보여주고 싶을 수도 있어요.
로그인한 사용자에게는 "사용자가 좋아할 만한 맞춤 상품"을 보여주고 싶을 수도 있습니다.
3. 추천의 3단계: 후보 찾고, 걸러내고, 순서 정하기
추천 기능은 후보를 조회하고, 제외 조건을 적용하고, 표시 순서를 정하는 세 단계로 동작합니다.
1. 후보 찾기
현재 화면과 추천 목표에 맞는 글이나 상품을 추천 후보로 조회합니다.
상품 상세 화면이라면 같은 카테고리의 판매 중 상품, 홈 화면이라면 최근 반응이 기록된 상품처럼 후보 범위를 먼저 정해요.
2. 걸러내기
현재 보고 있는 항목, 비공개 글, 판매 종료 상품, 재고가 없는 상품처럼 보여주면 안 되는 후보를 제외합니다.
사용자별 추천이라면 이미 구매했거나 관심 없음으로 표시한 항목도 제외 조건에 포함할 수 있어요.
3. 순서 정하기
남은 후보를 인기 반응, 내용의 유사성, 사용자 행동처럼 추천 목표에 맞는 기준으로 정렬합니다.
정렬이 끝나면 제목·가격·URL처럼 화면에 필요한 정보를 함께 조회해 추천 목록을 표시해요.
4. 추천 방식 3가지: 인기순, 내용 기반, 개인화
| 추천 방식 | 후보와 순서를 정하는 기준 | 준비할 데이터 |
|---|---|---|
| 인기순 | 최근 사용자 반응이 많은 항목 | 항목 ID · 행동 종류 · 발생 시간 · 공개 또는 판매 상태 · 조회·찜·구매 기록 |
| 내용 기반 | 현재 항목의 제목·설명과 의미가 가까운 항목 | 제목 · 설명 · 분류 · 가격 · 재고 · 항목 내용을 비교할 정보 |
| 개인화 | 사용자가 이전에 반응한 항목과 관련된 항목 | 사용자 ID · 항목 ID · 행동 종류 · 발생 시간 · 항목 정보 · 사용자별 조회·찜·구매 기록 |
사용자 행동 기록이 적다면 인기순 또는 내용 기반부터 시작해요.
추천 목표를 정했다면, 이제 어떤 방식으로 추천할지 골라야 해요. 크게 세 가지 방법이 있습니다.
인기순 추천: "요즘 가장 잘나가는 게 뭐야?"
기준: 최근에 사람들이 많이 보고, 찜하고, 구매한 항목들을 보여주는 거예요.
필요한 데이터: 어떤 항목이, 언제, 어떤 행동(조회, 찜, 구매)을 받았는지 기록한 데이터가 필요합니다.
예시: "이번 주 베스트셀러", "실시간 인기 검색어" 같은 것들이 여기에 해당해요.
특징: 특별히 복잡한 기술(임베딩, 벡터 검색)은 필요하지 않습니다.
내용 기반 추천: "이거 좋아하면 이것도 좋아할걸?"
기준: 사용자가 보고 있는 항목과 내용이 비슷한 다른 항목을 추천해 주는 거예요.
필요한 데이터: 항목의 제목, 설명, 분류, 가격 같은 정보가 필요합니다.
어떻게 비슷함을 알까요?
컴퓨터는 글이나 그림을 바로 이해하지 못하니까, 임베딩 모델이라는 걸 사용해서 제목이나 설명을 숫자로 바꿔줘요.
이 숫자를 임베딩이라고 하는데, 비슷한 내용의 항목들은 이 숫자들도 서로 가까워집니다.
그리고 벡터 검색이라는 기술로 이 숫자들 중에서 가장 가까운(비슷한) 항목들을 찾아내는 거예요.
예시: 사용자가 강아지 사료를 보고 있다면, 다른 강아지 사료나 강아지 장난감을 추천해 주는 거예요.
개인화 추천: "너만을 위한 맞춤 추천!"
기준: 사용자가 이전에 어떤 항목에 반응했는지(보고, 찜하고, 구매하고)를 확인하고, 사용자가 좋아할 만한 항목을 추천해 주는 거예요.
필요한 데이터: 사용자가 어떤 항목에, 언제, 어떤 행동을 했는지 기록한 데이터가 필요합니다.
예시: 넷플릭스에서 사용자가 본 영화들을 바탕으로 "OO님을 위한 추천 영화"를 보여주는 거예요.
새로운 사용자에게는?: 아직 사용자 행동 기록이 없으면, 인기순이나 내용 기반 추천을 먼저 보여주기도 해요.
5. UQA로 추천 기능 쉽게 만들기
추천 기능을 만들 때 여러 종류의 데이터를 다뤄야 하는데, 이걸 따로따로 관리하면 복잡하고 힘들 수 있어요.
예를 들어, 상품 정보는 한 데이터베이스에, 상품의 임베딩(숫자 정보)은 다른 곳에 저장하면, 상품이 바뀔 때 두 군데를 모두 고쳐야 합니다.
UQA라는 도구를 사용하면 이런 복잡함을 줄일 수 있어요.
UQA는 상품 정보와 임베딩 같은 여러 데이터를 한곳에 같이 저장할 수 있게 해줍니다.
그래서 인기순, 내용 기반, 개인화 추천에 필요한 데이터를 한 번에 쉽게 조회하고 관리할 수 있게 되는 거예요.
마치 여러 종류의 장난감을 한 상자에 모아 보관하면 찾기도 쉽고 정리하기도 쉬운 것과 같습니다.
UQA가 모든 걸 자동으로 해주지는 않아요.
어떤 기준으로 추천할지, 뭘 제외할지 같은 추천 기준은 사용자가 직접 정해야 합니다.
UQA는 사용자가 정한 기준에 따라 데이터를 저장하고 조회하는 걸 도와주는 도구라고 보면 돼요.
현재 UQA는 로컬 설치와 운영이 기본이고 UQA Cloud는 준비 중입니다. 아래 프롬프트는 로컬 개발 환경에서 추천 기능을 구현하고 확인할 때 사용해요.
curl -fsSL https://releases.uqa-cloud.cognica.io/install.sh | sh &&
export PATH="${UQA_INSTALL_DIR:-$HOME/.local/bin}:$PATH" &&
uqa llm install skills프로젝트에서 추천 영역이 필요한 화면과 현재 저장 중인 데이터를 확인해줘. 화면마다 인기순·내용 기반·개인화 중 어떤 추천이 적합한지, 추가로 기록할 데이터와 제외 조건이 무엇인지 표로 정리해줘. 아직 코드는 수정하지 말아줘
로컬 개발 환경에서 앞서 정한 추천 기준으로 UQA 추천 기능을 구현해줘. 필요한 항목 정보와 사용자 행동을 저장하고, 추천 후보를 조회한 뒤 현재 항목·비공개 항목·판매 종료 항목을 제외해줘. 추천 목록에는 제목·요약 또는 가격·URL을 표시하고, 추천 노출과 클릭도 기록해줘