개발 환경에서는 데이터가 적어서 조용히 숨어 있다가, 운영에서 트래픽이 몰리면 DB CPU를 순식간에 바닥내는 전형적인 장애 원인이 N+1 문제입니다. forEach 한 줄뿐인 코드에서 쿼리가 수천 번 나가지만, 서비스 코드만 봐서는 원인을 찾기 어렵습니다.
이번 영상에서는 N+1이 발생하는 내부 동작 원리(영속성 컨텍스트 → 프록시 초기화 → LAZY 로딩 시점)를 먼저 파헤치고, Fetch Join·@EntityGraph·Batch Fetch Size·DTO Projection 네 가지 해결 전략을 각각의 장단점과 코드로 비교합니다. 특히 컬렉션 Fetch Join과 페이징이 충돌할 때 발생하는 인메모리 페이징 함정, 양방향 연관 관계에 숨어 있는 N+1, 그리고 해결책 선택을 위한 의사결정 트리와 운영 환경 모니터링 방법까지 프로덕션에서 바로 쓸 수 있는 내용으로 정리했습니다.
📌 이런 분들에게 추천합니다
- N+1 문제를 겪어봤지만 왜 발생하는지 내부 원리까지는 모르는 백엔드 개발자
- Fetch Join, @EntityGraph, Batch Fetch Size 중 언제 뭘 써야 하는지 기준이 필요한 분
- 컬렉션 Fetch Join + 페이징 조합에서 메모리 장애를 겪어본 분
- 면접에서 "N+1 문제와 해결 방법"을 깊이 있게 답하고 싶은 개발자
#JPA #N+1문제 #FetchJoin #BatchFetchSize #백엔드개발