피드로 돌아가기
Dev.toDatabase
원문 읽기
Cartesian Explosion 해결을 통한 중복 데이터 전송 및 쿼리 지연 제거
EF Core: La explosión cartesiana — Hiciste todo bien y aun así el query es un desastre
AI 요약
Context
EF Core의 Include를 통한 Eager Loading 구현 중 여러 컬렉션 관계를 동시에 로드할 때 발생하는 데이터 중복 문제 분석. 단일 쿼리 내 다중 JOIN으로 인해 결과 셋의 행 수가 기하급수적으로 증가하는 Cartesian Explosion 현상이 성능 병목의 핵심 원인으로 작용.
Technical Solution
- 다중 컬렉션 JOIN으로 인한 결과 행의 곱셈 연산 구조를 파악하여 데이터 전송 오버헤드 식별
- AsSplitQuery 도입을 통한 단일 대형 쿼리의 다수 소형 쿼리 분할 처리 방식으로 전환
- 각 관계별 독립적 쿼리 실행 후 애플리케이션 메모리 단에서 결과를 조립하는 구조 설계
- Entity 전체 materialized 대상이 아닌 경우 Select 프로젝션을 통한 DTO 매핑으로 불필요한 컬럼 로드 및 Join 제거
- DB 로그 모니터링을 통한 실제 실행 SQL의 Row 수와 실행 시간 간의 불균형 지점 포착
실천 포인트
- EF Core 로그에서 'Compiling a query which loads related collections for more than one collection navigation' 경고 메시지 확인 - 다수의 컬렉션 Include 사용 시 AsSplitQuery 적용 검토 - Read-only 시나리오에서는 Include 대신 Select 프로젝션을 통한 DTO 반환 우선 적용 - 개발 환경의 소량 데이터 테스트가 아닌 운영 환경 수준의 데이터셋으로 쿼리 실행 시간 측정