인프런 커뮤니티 질문&답변

blackjack_96님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V4: JPA에서 DTO 직접 조회

dto조회 시 default_batch_fetch_size가 적용되지 않습니다

작성

·

139

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (/아니오)

[질문 내용]

이 코드는 batch가 잘 적용되는데

dto로 다음과 같이 조회하게 되면 batch가 적용되지 않습니다.

원래 dto로 o를 조회하게 되면 배치가 적용되지 않나요?

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변 드리자면, default_batch_fetch_size 설정은 엔티티나 컬렉션을 조회할 때 지정된 사이즈만큼 IN 쿼리로 가져오는 배치 사이즈를 제어하는 옵션입니다. 따라서 엔티티 직접 조회 시에는 적용되어 n+1 문제를 해결할 수 있지만, DTO로 직접 조회하는 경우에는 default_batch_fetch_size 옵션이 직접적으로 적용되지 않습니다.

DTO 조회 시에는 JPQL or QueryDSL 등에서 작성된 쿼리 자체로 결과를 가져오기 때문에, 해당 쿼리 내에서 배치 사이즈를 제어하는 로직을 직접 구현해야 합니다. 예를 들어, 연관된 엔티티를 조회할 때 별도의 쿼리를 날려 해당 엔티티들을 미리 로딩하는 방법(IN 절을 활용한 조회 등)을 사용해야 합니다.

즉, 첫 번째 이미지에서 보여주신 방식은 엔티티를 직접 조회함으로써 default_batch_fetch_size가 적용되어 n+1 문제를 해결할 수 있습니다. 그러나 두 번째 이미지에서처럼 DTO를 직접 조회하는 경우는 각각의 DTO 생성 로직 내에서 추가적인 쿼리 최적화 방법을 적용해야합니다.

DTO 조회에 default_batch_fetch_size의 배치 페칭 효과를 기대하는 경우, 별도의 최적화 고려가 필요합니다. 예를 들면, Fetch Join을 활용하거나, Batch Size를 직접 적용하는 쿼리를 작성하는 방법 등이 있습니다.