
이번 시간에는 @toOne 관계일때의 성능 최적화에 대해 고민해보도록 하자.

Order과 Member, Order와 Delivery는 @toOne 관계이다.


상황: Order 2개 일때, Order를 조회하기 위해서 몇번의 쿼리가 나갈까?
(Order과 OrderItem 관련 쿼리는 다음 시간에 다루기로 하겠다.)
즉, 1번의 쿼리를 위해서 1 -> 5(1+2+2)번의 쿼리가 나가는 상황이다.





N+1문제를 해결하기 위해 fetch join을 활용할 수 있다.
fetch join은 연관된 entity들을 한꺼번에 로드해서 가져오는 것이다.

쿼리는 위와 같다. join fetch 명령어를 통해 함께 가져올 엔티티를 넣어주면, 한꺼번에 로딩한다.

함수를 실행하면, 쿼리가 아래와 같이 한번만 나간다.

이렇듯 @toOne 관계는 fetch = lazy로 설정해 놓고, fetch join을 사용해 쿼리의 수를 줄일 수가 있다.
다음 시간에는 @toMany 관계일 때를 살펴보도록 하자.