[4.5 주문 조회 V4] DTO 직접 조회<컬렉션> - N+1 문제 발생

기존의 Repository는 순수한 엔티티를 조회할때 사용하고

queryRepository는 API 에 의존관계가 있는 부분을 서로 때어내려고 패키지를 만들었다(화면과 관련된 부분)

리포지토리에서 OrderApiController 에 있는 dto 와 내용이 같지만 쓰지않는 이유는

리포지토리에서 컨트롤러를 의존하는 상황이 되어서 그렇다 - 의존관계가 순환된다

orderQueryDto 를 알아야해서 같은 패키지안에 넣어주었다

OrderApiController.java

OrderQueryRepository.java

OrderQueryDto.java

OrderItemQueryDto.java

Query: 루트 1번, 컬렉션 N 번 실행

ToOne(N:1, 1:1) 관계들을 먼저 조회하고, ToMany(1:N) 관계는 각각 별도로 처리한다.

이런 방식을 선택한 이유는 다음과 같다.

ToOne 관계는 조인해도 데이터 row 수가 증가하지 않는다. (단순 join)

ToMany(1:N) 관계는 조인하면 row 수가 증가한다.

row 수가 증가하지 않는 ToOne 관계는 조인으로 최적화 하기 쉬우므로 한번에 조회하고, ToMany 관계는 최적화 하기 어려우므로 findOrderItems() 같은 별도의 메서드로 조회한다.

결과적으로 N+1 이다

루트 1번 -> 루트 결과 개수 만큼 추가 쿼리 N번

-> 최적화 방법을 다음시간에 알아보자