본문 바로가기
Back-End/JPA

JPA) Join Fetch, @EntityGraph 차이점

by 어렵다어려웡 2022. 3. 24.

기본적으로 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 Fetchinner Join 을 사용한다.

 

SQL을 사용할 경우 Outer Join 보다 Inner Join을 사용하는 것이 성능 최적화에 좋다.

따라서, 실무에서도 Join Fetch 를 좀 더 사용할 것으로 예상된다.

 

 

'Back-End > JPA' 카테고리의 다른 글

JPA) deleteById 호출 시 연관객체 SQL 줄이기  (0) 2022.04.01
JPA) 벌크 연산  (0) 2022.03.30
JPA) Spring OSIV  (0) 2022.03.14
JPA) 과거 방식의 OSIV  (0) 2022.03.13
JPA) 값 타입 컬렉션 vs @OneToMany  (0) 2022.03.12