N+1 PROBLEM

N+1은 “목록 1번 + 항목마다 N번”으로 쿼리가 폭증하는 패턴이다

사용자 목록을 가져온 뒤 각 사용자 주문을 반복 조회하면 데이터 수가 늘수록 DB 왕복이 선형으로 늘어난다.

1 + Nusers 1번 뒤 orders를 사용자 수만큼 반복
1 or 2join 또는 batch loading으로 왕복 수 고정

Before: lazy 반복 조회

Q1
SELECT users목록을 먼저 가져온다.
Q2Q3Q4...Qn
N번
SELECT orders WHERE userId = ?사용자마다 같은 모양의 쿼리가 반복된다.

After: 필요한 관계를 한 번에 로드

JOIN
leftJoinAndSelectusers와 orders를 한 SQL 계획 안에서 가져온다.
BATCH
WHERE userId IN (...)목록의 id를 모아 관련 데이터를 한 번 더 조회한다.
SELECT
필요 컬럼만 반환관계 로딩과 projection을 같이 줄인다.
목록 + 관계N+1 후보. 로그에서 같은 SQL 반복을 찾는다.
항상 필요명시적 join 또는 relations를 쓴다.
조건부 필요batch loading이나 별도 endpoint로 나눈다.