Skip to content

[REFACTOR] RecommendationSet 개념 1차 도입 #422

Description

@Dimo-2562

Parent: #419

✨ 리팩토링 할 부분

RecommendationSet 표준 개념을 코드에 1차 반영해 현재 추천 목록 교체 흐름을 캡슐화한다.


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

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

📌 현재 코드의 문제점

  • 문서상 표준 용어는 RecommendationSet이지만 코드는 RecommendedPost 단건 중심이다.
  • 기존 추천 이력화, 기존 추천 삭제, 새 추천 저장이 LlmRecommendationService 절차 안에 흩어져 있다.
  • rank 연속성, post 중복 방지, 목록 크기 상한 같은 불변식이 명시적 모델로 드러나지 않는다.

🎯 리팩토링 방향

  • RecommendationSet 또는 CurrentRecommendationSet 도메인 모델/서비스를 도입한다.
  • 기존 RecommendedPost 테이블은 저장 단위로 유지한다.
  • 추천 목록 교체 흐름을 캡슐화한다.
    • 기존 추천 조회
    • RecommendationHistory 변환
    • 기존 추천 삭제
    • RecommendedPost 생성
  • 1차 개선에서는 DB schema와 API 응답 shape를 바꾸지 않는다.

⚠️ 경계 제약

  • 1차 작업에서는 현재 RecommendedPost의 JPA 연관관계와 DB schema를 유지한다.
  • RecommendationSet 자체의 공개 계약에는 User/Post JPA 엔티티나 lazy proxy 의미를 새로 확산하지 않는다.
  • 사용자와 게시글 식별은 가능한 범위에서 userId/postId 또는 Recommendation 내부 값으로 표현한다.
  • persistence 변환 때문에 entity reference가 필요한 경우 application/infrastructure 경계 안에 가두고 임시 계약임을 명시한다.
  • ID/projection 기반 cross-context 계약과 ReadPost projection 최적화는 후속 sub-issue #453에서 처리한다.

💡 기대 효과

  • 가독성 향상
  • 성능 개선
  • 유지보수성 향상
  • 코드 중복 제거
  • 기타: 문서상 RecommendationSet 개념과 코드 간 드리프트 축소

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions