기본적으로 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 를 좀 더 사용할 것으로 예상된다.
'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 |