[Spring Boot] N+1 문제 해결 기술 비교 (FetchJoin, @EntityGraph, batch-size)
개요N+1 문제란 1개의 조회를 위해 N개의 추가적인 쿼리가 발생하는 문제를 말한다. JPA에서 조회 쿼리를 날릴 경우, 해당 엔티티와 연관된 모든 관계에 있는 내용도 받아오기 때문에 발생한다. 왜 N+1 문제가 실무에서 위험한가?실무에서 N+1 문제는 데이터 로딩 시 의도치 않은 다량의 쿼리가 발생해 서버와 DB를 동시에 압박한다. 목록 1건마다 추가 연관 데이터를 별도 쿼리로 가져오면, N개의 엔티티에 대해 1+N번의 쿼리가 나가며 트래픽이 늘어날수록 지수적으로 지연이 커진다. 이는 TPS 하락, 타임아웃, 커넥션 풀 고갈, 캐시 무력화 같은 장애로 직결된다.특히 ORM에서 지연 로딩이 컬렉션/연관 엔티티 접근 시마다 쿼리를 발생시킨다. 페이지네이션 환경에서 더 치명적인데, 페이지당 20건이라도 각 ..