Parent: #419
✨ 리팩토링 할 부분
Recommendation 컨텍스트가 사용하는 cross-context lookup seam을 JPA 엔티티/지연 프록시가 아닌 ID·projection 중심의 명시적 계약으로 고도화한다.
🏷️ 도메인 (해당하는 것에 체크)
📌 현재 코드의 문제점
- #421에서 cross-context repository 직접 참조는 application lookup seam 뒤로 이동했지만, 일부 seam은
User, Post JPA 엔티티와 getReferenceById() 지연 프록시 의미를 그대로 노출한다.
- 현재 seam은 의존 진입점을 통제하는 효과는 있지만 bounded-context 간 안정적인 published contract로 보기 어렵다.
ReadPostLookupService는 ID 집합을 반환하지만 내부 쿼리가 ReadPost와 Post 전체 엔티티를 fetch join한다.
getRecentReadPostIds 이름만으로는 readDuration >= 10초 또는 null이라는 “의미 있는 읽기” 정책이 드러나지 않는다.
- 이 상태가
RecommendationSet에 그대로 흡수되면 임시 엔티티 결합이 새 도메인 모델의 영구 계약으로 굳어질 수 있다.
🎯 리팩토링 방향
- Recommendation이 소비하는 User/Post 계약을 ID 또는 최소 projection 기반으로 좁힌다.
- JPA reference가 필요한 경우 해석 책임을 Recommendation infrastructure/persistence 경계 안에 둔다.
RecommendationSet과 추천 생성 도메인 API가 cross-context JPA 엔티티를 새 공개 파라미터로 확장하지 않도록 한다.
- 최근 읽은 게시글 제외 쿼리를 post ID projection으로 변경해 전체 엔티티 fetch join을 제거한다.
- “의미 있는 읽기” 조건과 최신순/최대 1,000개 정책을 lookup 계약명 또는 명시적 문서로 드러낸다.
- 기존 API 응답, DB/Elasticsearch schema, 추천 결과와 누락 사용자 처리 의미는 유지한다.
✅ 완료 조건
💡 기대 효과
순서
4.5 1차 로드맵(#422~#425)에서는 현재 schema를 유지하고 임시 계약의 확산만 막는다.
본 이슈는 1차 문서 동기화 이후 수행하는 2차 경계 고도화 작업으로 둔다.
Parent: #419
✨ 리팩토링 할 부분
Recommendation 컨텍스트가 사용하는 cross-context lookup seam을 JPA 엔티티/지연 프록시가 아닌 ID·projection 중심의 명시적 계약으로 고도화한다.
🏷️ 도메인 (해당하는 것에 체크)
📌 현재 코드의 문제점
User,PostJPA 엔티티와getReferenceById()지연 프록시 의미를 그대로 노출한다.ReadPostLookupService는 ID 집합을 반환하지만 내부 쿼리가ReadPost와Post전체 엔티티를 fetch join한다.getRecentReadPostIds이름만으로는readDuration >= 10초 또는 null이라는 “의미 있는 읽기” 정책이 드러나지 않는다.RecommendationSet에 그대로 흡수되면 임시 엔티티 결합이 새 도메인 모델의 영구 계약으로 굳어질 수 있다.🎯 리팩토링 방향
RecommendationSet과 추천 생성 도메인 API가 cross-context JPA 엔티티를 새 공개 파라미터로 확장하지 않도록 한다.✅ 완료 조건
💡 기대 효과
순서
4.5 1차 로드맵(#422~#425)에서는 현재 schema를 유지하고 임시 계약의 확산만 막는다.
본 이슈는 1차 문서 동기화 이후 수행하는 2차 경계 고도화 작업으로 둔다.