Skip to content

[REFACTOR] 추천 후보 탐색/RRF/MMR 책임 분리 #423

Description

@Dimo-2562

Parent: #419

✨ 리팩토링 할 부분

LlmRecommendationService의 후보 탐색, RRF 변환, MMR 적용, 저장 orchestration 책임을 분리한다.


🏷️ 도메인 (해당하는 것에 체크)

  • 📝 domain:post (게시글)
  • 👤 domain:useraccount (사용자 계정)
  • 🧠 domain:personalization (개인화 프로필)
  • 🏢 domain:source (테크블로그 출처)
  • 🔍 domain:search (검색)
  • 🔔 domain:notification (알림)
  • 📊 domain:recommendation (추천)
  • 🎯 domain:activity (사용자 활동)
  • 🔐 domain:auth (인증/보안)
  • 🌐 infra (인프라/배포)

📌 현재 코드의 문제점

  • LlmRecommendationService가 Elasticsearch kNN/BM25 검색, RRF, time decay, MMR 호출, 추천 이력화/저장을 모두 담당한다.
  • 테스트 대상이 커져 edge case를 좁게 검증하기 어렵다.
  • 후보 탐색 정책과 추천 목록 저장 정책이 한 클래스에 섞여 있다.

🎯 리팩토링 방향

  • 후보 탐색 책임을 별도 컴포넌트로 분리한다.
    • ES kNN/BM25 실행
    • 읽은 게시글 제외 filter 적용
  • RRF/후보 조립 책임을 별도 컴포넌트로 분리한다.
    • vector hits + keyword hits → MmrCandidate
    • time decay 반영
    • summary embedding 없는 후보 제외
  • MmrService는 MMR 선택 책임으로 유지한다.
  • LlmRecommendationService는 프로필 확인 → 후보 탐색 → MMR → RecommendationSet 교체 orchestration만 담당한다.

💡 기대 효과

  • 가독성 향상
  • 성능 개선
  • 유지보수성 향상
  • 코드 중복 제거
  • 기타: 추천 알고리즘 단계별 테스트 용이성 향상

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions