조회 전용 패턴

DTO 직접 조회는 엔티티 탐색 대신 결과 형태를 바로 만든다

핵심은 연관 엔티티를 읽어 가며 데이터를 모으는 것이 아니라, 필요한 컬럼을 한 번의 조인 결과로 모아 DTO에 즉시 담아 반환하는 것입니다.

N+1이 사라지는 이유 조회가 끝난 뒤에 더 따라갈 엔티티가 없으므로, 목록 1번 + 연관 객체별 추가 조회 패턴이 끊깁니다.
1. JOIN 한 번 Order와 User를 한 SQL에서 함께 읽습니다.
2. 필요한 컬럼만 선택 id, amount, name만 가져옵니다.
3. DTO로 즉시 반환 화면은 DTO를 바로 쓰고, Lazy 로딩이 개입할 자리가 없습니다.
비교 축
엔티티 조회
DTO 직접 조회
무엇을 들고 오나
엔티티 중심으로 읽기

Order를 우선 가져오고, 연관 정보는 접근 시점에 뒤늦게 필요해질 수 있습니다.

결과에 필요한 값만 읽기

응답에 쓸 컬럼만 바로 선택합니다.

SELECT new OrderDto(o.id, o.amount, u.name)
쿼리가 언제 늘어나나
연관 필드 접근 때 추가 가능

목록은 1번 조회했어도 user.name 같은 접근마다 N번 더 나갈 수 있습니다.

JOIN + 매핑으로 끝

필요한 연관 값이 이미 한 쿼리에 포함되어 있어 후속 조회가 생기지 않습니다.

운영상 의미
수정 모델에는 유리

변경 감지와 영속성 컨텍스트를 활용할 수 있지만, 읽기 화면에는 과한 데이터가 섞일 수 있습니다.

읽기 전용 화면에 유리

응답 모양이 명확하고 가벼워서 목록, 대시보드, API 조회처럼 성능 중심 화면에 잘 맞습니다.

정리 DTO 직접 조회는 "엔티티를 다 가져와서 나중에 꺼내 쓰기"가 아니라 "필요한 결과를 바로 만들기" 전략입니다. 그래서 N+1을 피하면서도 조회 비용을 예측 가능하게 유지할 수 있습니다.