Learn everyday/Product Design

[7월 TIL #19] 추천 시스템에는 꼭 머신러닝이 필요할까: 규칙 기반 추천으로 시작하기

besoluble 장은솔 2026. 7. 30. 09:05

최근 리텐션에 관한 데이터 분석과 사용자와의 대화에서, 우리 제품이 이미 가지고 있는 데이터를 콘텐츠로 더 적극적으로 활용할 필요가 있다는 생각이 들었다.

우리 제품은 방대한 논문 데이터를 수집하고, 이를 사용자가 이해하기 쉬운 논문 리뷰 형태로 계속 만들어내고 있다. 그러나 이렇게 쌓인 콘텐츠를 사용자가 직접 찾아오기를 기다리고 있을 뿐, 적절한 순간에 다시 제안하는 데에는 충분히 활용하지 못하고 있었다.

콘텐츠가 부족한 것이 아니라, 이미 있는 콘텐츠와 사용자를 연결하는 방식이 부족한 것은 아닐까? 이 문제의식을 바탕으로 개인화와 추천 시스템에 관한 자료를 찾아보기 시작했다.



먼저 UX Magazine의 5 Levels of Product Personalization: An Intro to Recommender Systems를 읽었다.

이 글은 개인화를 카피와 이미지처럼 비교적 가볍게 적용할 수 있는 단계부터 사용자 신호, 콘텐츠 기반 필터링, 협업 필터링, 강화학습 모델까지 다섯 단계로 나누어 설명한다.

5 levels of product personalization: an intro to recommender systems by Guillaume Galante

글을 읽으며 우리 제품에도 활용할 수 있는 사용자 신호와 콘텐츠 정보가 꽤 많다는 것을 알게 되었다. 동시에 새로운 고민도 생겼다.

내가 추천 시스템을 이해하고 설계할 수 있을까?


추천 시스템이라고 하면 자연스럽게 머신러닝 엔지니어, 방대한 학습 데이터, 복잡한 알고리즘부터 떠올랐다. 내가 사용자 경험을 제안할 수는 있더라도, 그 안에서 실제로 작동하는 추천 로직까지 다루는 것은 어렵지 않을까 생각했다.

그러다 Metabase의 프로덕트 매니저 Conor Dewey가 작성한 Rule-based Recommendations라는 글을 발견했다.


작은 팀이 추천 시스템을 실험한 방법

글의 저자인 Conor의 팀도 새로운 온보딩 과정에 개인화와 추천을 적용하려고 했다. 이미 많은 제품이 머신러닝을 활용하고 있었기 때문에 그들 역시 성공적인 제품을 만들려면 머신러닝이 필요하다고 생각하기 쉬웠다. 하지만 팀의 상황을 살펴보니 정교한 추천 모델을 구축할 시간과 인력, 그리고 당장의 필요성이 부족했다.

그래서 머신러닝 대신 SQL을 활용한 규칙 기반 추천 시스템을 선택했다. 작성자의 평가에 따르면 이 단순한 방식으로도 처음 기대했던 목표의 80~90%까지 도달할 수 있었다.

규칙 기반 추천 시스템이란?

규칙 기반 추천 시스템은 사용자의 행동이나 속성을 바탕으로 미리 정의한 If–Then 규칙을 적용하는 방식이다.
예를 들면 다음과 같다.

사용자가 특정 주제의 논문을 여러 번 저장했다면
→ 같은 주제의 새로운 논문을 추천한다.

아직 사용자에 관한 정보가 충분하지 않다면
→ 최근 많은 사용자가 읽은 논문을 보여준다.

 
머신러닝 모델처럼 복잡한 인프라를 마련하거나 모델을 지속적으로 재학습할 필요가 없다. 어떤 조건 때문에 특정 콘텐츠가 추천되었는지 확인할 수 있어 구조가 투명하고, 필요에 따라 규칙을 빠르게 수정할 수도 있다.

따라서 규모가 작은 팀, 빠르게 가설을 검증해야 하는 환경, 아직 데이터가 충분하지 않은 제품에서 특히 유용하다.

규칙을 만들기 전에 문제부터 검증하기

하지만 단순히 구현하기 쉽다는 이유로 추천을 만들어서는 안 된다. 가장 먼저 확인해야 하는 것은 추천이 사용자에게 측정할 수 있는 가치를 제공하는가이다.

추천을 추가해도 사용자가 더 좋은 콘텐츠를 발견하거나 기존의 목적을 더 쉽게 달성하지 못한다면, 개인화를 위해 들인 노력은 정당화되기 어렵다. 데이터도 함께 검증해야 한다. 제품이 사용자들을 여러 그룹으로 나눌 수 있더라도 실제 행동에 차이가 없다면, 세그먼트에 따라 서로 다른 추천을 제공할 이유가 없다.

즉 추천 시스템을 만들기 전에 다음 두 가지 질문에 답할 수 있어야 한다.

  1. 추천이 해결하려는 사용자의 문제는 무엇인가?
  2. 사용자나 상황에 따라 원하는 콘텐츠가 실제로 달라지는가?


순차적으로 고를 것인가, 점수를 합산할 것인가?

규칙 기반 추천에는 크게 두 가지 접근 방식이 있다.

첫 번째는 순차 매칭(One-by-One Matching)이다. 정해진 순서대로 조건을 확인하고, 처음 일치하는 규칙의 결과를 보여주는 방식이다. 예를 들어 신규 사용자는 인기 논문을, 관심 주제를 선택한 사용자는 해당 분야의 논문을, 충분한 저장 기록이 있는 사용자는 저장한 논문과 관련된 콘텐츠를 보여줄 수 있다.

두 번째는 최종 결정 스코어링(Final Decision Scoring)이다. 여러 조건에 각각 점수를 부여한 뒤, 합산 점수가 높은 콘텐츠를 보여준다. 최근 저장한 주제와 일치하면 3점, 사용자가 자주 읽은 분야라면 2점, 최근 인기가 높아졌다면 1점을 추가하는 식이다. 하나의 요소가 아니라 여러 신호가 함께 추천 결과에 영향을 주어야 할 때 적합하다.

어떤 방식을 선택하든 데이터 분석과 제품에 관한 도메인 지식을 함께 사용해 규칙을 만들어야 한다. 이후 SQL의 CASE 문처럼 단순한 조건문으로 첫 번째 버전을 구현하고, 실제 반응을 확인하면서 규칙을 수정한다.


목표는 거대한 시스템이 아니라 추천의 가치를 검증하는 것이다

이 사례를 보면서 추천 시스템을 바라보는 관점이 조금 바뀌었다.

처음부터 거대한 시스템을 구축하는 것이 목적이 아니었다. 우리가 가진 신호를 이용해 콘텐츠를 제안했을 때 사용자가 실제로 가치를 느끼는지부터 확인하는 것이 우선이었다. 물론 사용자가 많아지고 데이터가 충분히 쌓이면 머신러닝이 필요해질 수 있다. 다양한 사용자의 취향을 동시에 고려하거나, 행동의 변화를 실시간으로 반영하려면 규칙만으로는 한계가 있다. 하지만 아직 어떤 추천이 효과적인지도 모르는 상태에서 정교한 모델부터 만드는 것은, 검증되지 않은 가설을 비싼 방식으로 구현하는 일이 될 수 있다.

규칙 기반 방식에서는 추천의 근거가 명확하다. 디자이너 역시 다음과 같은 제품 판단에 참여할 수 있다.

  • 어떤 사용자 행동을 관심 신호로 볼 것인가?
  • 어떤 상황에서 콘텐츠를 제안할 것인가?
  • 여러 후보 중 무엇을 먼저 보여줄 것인가?
  • 왜 이 콘텐츠를 추천했는지 어떻게 설명할 것인가?
  • 사용자가 추천을 원하지 않을 때 어떻게 거절하게 할 것인가?

추천 알고리즘 자체를 만드는 것과 별개로, 이러한 추천 정책과 경험을 설계하는 일은 충분히 나의 역할이 될 수 있다.


우리 제품을 확인해보니 이미 추천의 재료가 있었다

이후 LLM과 함께 우리 제품의 추천 구조를 점검해보았다.

내부 구조를 살펴보니 우리 제품에는 이미 관련도, 최근 인기도, 사용자가 저장한 정보 등을 활용하는 여러 추천 경로가 존재했다. 모든 경로가 사용자 개인의 행동을 반영하는 것은 아니었지만, 추천 시스템을 완전히 처음부터 만들어야 하는 상태는 아니었다.

사용자가 선택한 관심 분야, 저장한 논문, 콘텐츠를 열어본 기록, 하이라이트나 메모처럼 비교적 강한 관심을 드러내는 행동도 있었다. 추천을 클릭했는지, 실제 논문을 열었는지, 이후 저장까지 이어졌는지 확인할 수 있는 데이터 역시 일부 마련되어 있었다.

즉 부족한 것은 데이터나 기술만이 아니었다.

어떤 신호를 어떤 상황에서 사용할지, 사용자에게 어떤 가치를 전달할지에 대한 제품 차원의 판단이 더 필요했다.

특히 규칙은 추천 이유를 사용자에게 설명하기 쉽다는 장점이 있다.

  • “최근 저장한 논문과 같은 분야예요.”
  • “읽고 있는 논문과 함께 보면 좋아요.”
  • “이번 주에 연구자들이 많이 읽었어요.”
  • “전에 관심을 보인 주제의 새로운 리뷰예요.”


단순히 “추천 논문”이라고 보여주는 것보다, 사용자는 왜 이 콘텐츠가 자신에게 나타났는지 이해할 수 있다. 추천 이유는 시스템의 내부 작동 방식을 설명하는 문구이면서, 동시에 콘텐츠를 확인할 이유를 전달하는 UX가 된다.
결국 내가 집중해서 고민해야 할 문제는 더욱 분명해졌다.

어떤 타이밍에 어떤 콘텐츠를 제안해야 사용자에게 가치가 되는가?
그 가치를 어떻게 설명하고, 사용자의 반응을 어떻게 다시 받을 것인가?


다음으로 해볼 일

1. 현재 추천 경험을 사용자 여정 위에 펼쳐보기

제품 안에서 추천이 나타나는 접점을 정리한다. 각 접점에서 어떤 사용자가, 어떤 상황에, 어떤 콘텐츠를 보고 있는지 확인한다. 추천에 사용되는 신호와 노출 이유, 개인화 여부, 추천할 콘텐츠가 없을 때의 대체 결과도 함께 정리한다. 이를 통해 기술적으로 존재하는 추천과 사용자가 실제로 경험하는 추천 사이의 차이를 찾을 수 있을 것이다.

2. 하나의 추천 가설을 규칙으로 표현해보기

처음부터 여러 신호를 복잡하게 연결하지 않고, 하나의 사용자 문제와 하나의 추천 규칙을 선택한다. 예를 들어 저장해두었지만 아직 충분히 읽지 않은 주제의 새로운 리뷰를 적절한 시점에 다시 제안하는 시나리오를 생각해볼 수 있다. 어떤 조건에서 누구에게 무엇을 보여줄지 문장과 간단한 점수표로 먼저 표현한다. 실제 개발에 들어가기 전에도 화면 프로토타입이나 수동 큐레이션을 통해 추천의 가치와 문구를 검증할 수 있다.

3. 클릭 이후의 피드백 구조 설계하기

추천 카드의 클릭률만으로는 추천이 사용자에게 실제로 유용했는지 알기 어렵다. 추천을 통해 논문을 열었는지, 일정 시간 이상 읽었는지, 저장이나 하이라이트 같은 후속 행동으로 이어졌는지 살펴봐야 한다. “관심 없음”이나 “이미 알고 있음”처럼 사용자가 추천 결과에 직접 피드백할 방법도 함께 검토하려고 한다. 이 피드백은 다음 추천을 개선하기 위한 데이터인 동시에, 사용자가 자신의 추천 경험을 통제할 수 있게 하는 UX이기도 하다.


추천 시스템을 처음 떠올렸을 때는 기술적으로 매우 복잡하고, 전문 엔지니어가 있어야만 시작할 수 있는 영역이라고 생각했다. 하지만 이번에 자료와 제품 구조를 살펴보면서 추천 시스템의 시작은 복잡한 알고리즘이 아니라, 사용자에게 더 좋은 콘텐츠를 연결하고 싶은 제품의 판단일지도 모르겠다. 일단 무엇을 추천할지, 언제 보여줄지, 왜 보여주는지, 사용자의 반응을 어떻게 받을지에 관한 작은 규칙부터 만들어보자. 굿!