Back-End/JPA
JPA) Join Fetch, @EntityGraph 차이점
어렵다어려웡
2022. 3. 24. 01:05
기본적으로 JPA를 사용하다보면 발생하는 대표적인 성능문제가 있다. 바로 N+1 문제이다.
N+1 문제에 대한 해결책은 대체로 알려진 방식이 많이 있다.
간단하게 나열하면 다음과 같다.
1. Join Fetch 의 사용
2. @EntityGraph
이외에도 Batch Size 설정 & Hibernate Fetch Mode 설정 등이 있다.
사실 Join Fetch, @EntityGraph 라는 대답은 모두가 알고 있다.
대부분 JPA를 공부하는 개발자라면 알고있다.
두 설정의 공통점은 N+1을 해결한다는 점이지만, 해결하는 과정에서 조금의 차이가 존재한다.
그것은 사용하는 SQL이 다르다는 점이다.
연관관계의 fetch 속성은 LAZY 로 설정했다
1. @EntityGraph 를 사용 한 경우
@EntityGraph 를 사용하게 된다면 outer join 을 사용한다.
2. Join Fetch 를 사용 한 경우
Join Fetch 는 inner Join 을 사용한다.
SQL을 사용할 경우 Outer Join 보다 Inner Join을 사용하는 것이 성능 최적화에 좋다.
따라서, 실무에서도 Join Fetch 를 좀 더 사용할 것으로 예상된다.