본문 바로가기

JAVA

[JPA] n+1 문제

 

회사에서 JPA를 사용하는 도중에

 

과정과 과제 entity가 따로 있는 상태에서 과정 하위의 과제를 가져올 때 queryDSL로 join해서 가져오는 방법을 사용하고 있었습니다.

후에 이 과제를 가져올 때 과정-과제 상세 entity를 따로 만들어

queryDSL을 사용하지 않고 JPA를 사용하여 한번에 정렬하여 가져오도록 고쳐야 했습니다.

 

findBy[과정]OrderBy[과제 번호] 를 사용하여 구현하였는데

실제 동작과정을 살펴보니 과정-과제 상세 entity가 과정과 과제 entity를 포함하고 있어서 1번만 쿼리를 실행해야 할 것을 

N+1번 실행하고 있었습니다. 

 

이를 JPA에서 N+1 문제라고 한다길래 한번 찾아보았습니다.

 

여기서 발생한 원인은 과정-과제 상세를 전체 한번 보는 쿼리와 각각의 과정을 한번씩 보는 쿼리가 발생하기 때문이었습니다.

 

따라서 성능 저하의 우려로 기존에 사용하던 join-fetch의 방법으로 orderBy만 추가하여 custom repository를 적용하였습니다.

 

 

JPA를 처음 보는 입장에서는 이런 문제가 발생할 수도 있구나 하는 기록용으로 경험했던 문제를 작성하였습니다.

 

더 다양한 해결방법을 참고한 블로그:

https://jojoldu.tistory.com/165

 

JPA N+1 문제 및 해결방안

안녕하세요? 이번 시간엔 JPA의 N+1 문제에 대해 이야기 해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미

jojoldu.tistory.com

 

'JAVA' 카테고리의 다른 글

[JAVA] java.util 패키지  (0) 2021.07.15
[JAVA] 자바 언어의 특징  (0) 2021.07.04