Project/Team Project(딱좋은여행)

N+1 문제 및 LAZY문제

해달's code 2025. 9. 16. 00:27

문제 분석

1. N+1 문제 (주요 원인)

 
java
 

N+1 문제 발생 과정:

  1. AirPurchase 1개 조
  1. AirPassengers N개 조회 (JOIN FETCH)
  1.  AirPassenger specialRequests M개씩 조회 (JOIN FETCH)

결과: 1 + N + (N × M) = 1 + N + NM 개의 쿼리 실행

2. LAZY 문제 (부차적 원인)

 
java
 

LAZY 문제 발생:

  • specialRequests가 LAZY로 설정되어 있어서
  • 실제 사용할 때 추가 쿼리가 발생할 수 있음

해결 방법별 효과

방법 1: Set 사용 (현재 적용)

 
java
 

효과: 중복 제거만 해결, N+1 문제는 여전히 존재

방법 2: 쿼리 분리 (더 근본적 해결)

 
java
 

방법 3: 배치 크기 설정

 
java
 

현재 상황에서의 문제 유형

문제원인해결 방법

중복 표시 N+1 조인으로 인한 중 ✅ Set 사용으로 해결
능 저하 N+1 문제 🔄 쿼리 분리 필요
지연 로딩 LAZY 설정 �� EAGER 또는 별도 조회

권장 해결책

현재는 중복 문제만 해결했으므로, 성능 최적화를 위해 쿼리를 분리하는 것을 추천합니다:

 
java
 

결론: 현재 해결한 것은 N+1 문제의 부작용(중복)이고, 근본적인 N+1 문제는 쿼리 분리로 해결해야 합니다.