서버를 터지게 만드는 N+1 문제

김성박김성박
2026.01.14 13:38조회 10
김성박김성박·2026.01.14 13:38·조회 10

image.png

Spring Data JPA 쓰다 보면 한 번쯤 만나는 게 N+1 문제입니다.
엔티티 하나 가져온 줄 알았는데, 연관 데이터 때문에 쿼리가 줄줄이 추가로 나가죠.
이유는 명확합니다. “접근하는 순간 로드한다”라는 기본 동작 때문입니다.
그래서 우리는 fetch join, EntityGraph, batch size 같은 걸 씁니다.
미리 불러오지 말거나, 한 번에 묶어서 가져오자는 거죠.
그런데 이게 백엔드만의 이야기가 아닙니다.
프론트엔드에도 똑같은 N+1 문제가 있습니다.
게시글 목록 10개 보여줬을 뿐인데, 상세 페이지 API가 20개 나가는 상황.
범인은 의외로 Next.js Link의 prefetch였습니다.
보이는 링크마다 “나중에 갈 페이지”를 미리 준비하다 보니,
클릭도 안 했는데 API가 우수수 나갑니다.
해결책은 JPA 때랑 똑같습니다.
미리 가져오지 말자.
Link에 prefetch={false} 한 줄 넣음으로 해결할 수 있습니다.
N+1은 결국 기술 문제가 아니라, 기본 동작을 모르고 쓰면 생기는 문제인거죠.
AI를 이용한 프로그래밍에서 이러한 지침을 주는 것이 중요합니다.

댓글

불러오는 중...