스프링 키워드

N+1 문제

깨돌 2023. 12. 29. 19:50

참고할 블로그

https://ttl-blog.tistory.com/1135

 

[JPA] N+1 문제가 발생하는 여러 상황과 해결방법

🧐 N + 1 문제 N + 1 문제는 연관관계가 설정된 엔티티 사이에서 한 엔티티를 조회하였을 때, 조회된 엔티티의 개수(N 개)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제를 의

ttl-blog.tistory.com

1. N+1 문제란?

데이터베이스에서 일어나는 성능 문제 중 하나로, 쿼리를 실행했을 때 불필요한 반복 쿼리 호출로 인해 발생하는 문제다. 

더 쉽게 말하자면 연관관계가 설정된 (1:N or N:1) Entity 사이에서 한 엔티티를 조회했을 때 조회된 Entity의 개수보다 추가적인 쿼리가 발생하는 문제를 말한다

2. N+1 문제의 문제점

데이터를 가져오기 위해 쿼리를 여러 번 실행하여 불필요한 쿼리를 반복적으로 호출한다. 이로 인해 데이터베이스 부하를 유발하고 어플리케이션의 응답시간을 느리게 만든다. 반복적으로 일어난다면 어플리케이션의 성능이 저하된다

 

3. N+1 문제의 원인

3-1 어떤상황에서 발생?

JPA FETCH 전략이 EAGER로 데이터를 조회하는 경우

                                LAZY로 데이터를 가져온 후에 연관관계에 있는 하위 Entity를 다시 조회하는 경우

JPA 레

 

 

4. N+1 문제의 해결

1.jpql  -  sql을 직접 짜줌

장: 제일 간단하게 해결 가능

단: 추가적인 기능이 없음 

   -페이징 처리가 안됨(스크롤을 내렸을 때 정해진 개수만큼 가져오는거??? (Pageabe - 페이지별로 받아올 수 있음) )

 

2.QueryDSL -> 쿼리 복잡함

장: 일반적인 추가 기능을 모두 지원

단: 스프링 공식 라이브러리 x, 코드가 복잡함, Qclass 

 

3.EntityGraphv -> 사용 잘 안함, 수업 x

장: 

단: