이번 시간에는 @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 관계일 때를 살펴보도록 하자.