2.3 KiB
2.3 KiB
두 형제 문제는 Fetch Join에서 합류한 뒤 단계별 해법으로 최종 구조가 된다
Alternative text
요구사항과 모델에서 기준선으로 진행한 뒤 N1과 N2로 분기하고 Fetch Join에서 합류해, 실패와 다섯 개선 단계를 거쳐 최종 피드 조회 구조에 이르는 흐름도.
Long description
왼쪽에서 과제 요구사항, 도메인·데이터 모델, 최초 피드 조회 기준선 순으로 시작한다. 기준선에서 컬렉션 N+1(N1)과 User·Page 연관의 숨은 쿼리(N2)가 서로 앞뒤가 아닌 형제 문제로 동시에 갈라지고, 두 경로는 Fetch Join 시도에서 합류한다. 이 시도는 다중 컬렉션·페이징 실패로 이어진다. 마지막 노드는 Batch Fetch, DTO Projection, 아이템별 Top-3, Keyset Pagination, 가시성 조건 인덱싱을 거쳐 최종 피드 조회 구조에 도달하는 순서를 담는다.
Elements and evidence
- 요구사항·모델·기준선 (journey-stage): 전체 여정은 과제 요구사항에서 도메인·데이터 모델을 거쳐 최초 피드 조회 기준선으로 시작한다. Evidence: L23–L26, L42–L42.
- 컬렉션 N+1 (N1) (problem): 기준선에서 N2와 동시에 나타나는 컬렉션 조회 문제다. Evidence: L32–L34.
- User·Page 숨은 쿼리 (N2) (problem): 기준선에서 N1과 동시에 나타나는 User·Page 연관의 숨은 쿼리 문제다. Evidence: L32–L34.
- Fetch Join → 실패 (query-strategy): N1과 N2가 Fetch Join 시도에서 합류한 뒤 다중 컬렉션·페이징 실패로 이어진다. Evidence: L34–L35.
- 후속 개선 → 최종 구조 (query-strategy): 실패 뒤 다섯 조회 전략 단계가 명시된 순서로 발전해 최종 피드 조회 구조를 만든다. Evidence: L32–L32, L35–L36.
Relationships
- 요구사항·모델·기준선 → 컬렉션 N+1 (N1): 동시 분기. Evidence: L32–L33.
- 요구사항·모델·기준선 → User·Page 숨은 쿼리 (N2): 동시 분기. Evidence: L32–L33.
- Fetch Join → 실패 → 후속 개선 → 최종 구조: 실패 뒤 단계별 개선. Evidence: L34–L36.
- 컬렉션 N+1 (N1) → Fetch Join → 실패: 합류. Evidence: L34–L34.
- User·Page 숨은 쿼리 (N2) → Fetch Join → 실패: 합류. Evidence: L34–L34.