연관 데이터가 지금 바로 필요하므로 결과 집합을 처음부터 함께 조립한다.
N+1의 병목은 주문 1번 조회 + 주문 수만큼 user 재조회입니다. Eager Loading은 이 반복을 주문 건수와 무관한 고정 쿼리 수로 바꿉니다.
주문과 사용자를 같은 SQL에서 JOIN해 결과를 즉시 만든다.
주문을 읽은 뒤 필요한 user_id만 모아 한 번 더 조회한다.
연관 데이터가 지금 바로 필요하므로 결과 집합을 처음부터 함께 조립한다.
주문 목록은 먼저 확보하고, 연관 엔티티는 IN (...) 조회로 묶어서 따라온다.
SELECT o.*, u.* FROM orders o JOIN users u ON u.id = o.user_id LIMIT 10;
1) SELECT * FROM orders LIMIT 10; 2) SELECT * FROM users WHERE id IN (1, 2, 3, ...);
가장 단순하게 N+1을 제거한다. 다만 1:N 조인이 많아지면 결과 행이 불어나 중복 데이터가 커질 수 있다.
JOIN 폭증을 줄이면서도 쿼리 수를 통제한다. 연관 데이터가 많아도 주문 수만큼 반복 조회하지 않는다.
즉시 로딩의 본질은 연관 엔티티를 늦게 하나씩 찾지 않고, 필요한 시점에 함께 모아 읽어 운영 데이터가 늘어도 조회 수가 폭증하지 않게 만드는 것이다.
결과를 한 SQL로 완성할 수 있으면 Fetch Join, 조인 뻥튀기나 관계 폭이 부담되면 배치 조회가 더 안정적이다.