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

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

Before: 1 + N

Lazy 반복 조회

Q1 SELECT users 목록
Q2 SELECT orders WHERE userId = 1
Q3 SELECT orders WHERE userId = 2
Qn 사용자마다 같은 SQL 반복
After: 1 or 2

관계 로딩 고정

JOIN users와 orders를 한 SQL 계획 안에서 조회
BATCH WHERE userId IN (...)로 한 번 더 조회
SELECT 필요한 컬럼만 반환해 전송량 축소
목록 + 관계

N+1 후보입니다. 로그에서 같은 SQL 반복을 찾습니다.

항상 필요

명시적 join 또는 relations를 씁니다.

조건부 필요

batch loading이나 별도 endpoint로 나눕니다.

핵심: 데이터 개수에 따라 쿼리 수가 늘면 N+1이고, 목표는 왕복 수를 고정하는 것이다.