본문 바로가기

entitygraph2

JPA N+1 완전 정복: 자동 감지부터 fetch join·EntityGraph·batch_size 실전 해결 전략 JPA N+1 완전 정복: 자동 감지부터 fetch join·EntityGraph·batch_size 실전 해결 전략운영 중인 서비스에서 가장 많이 겪는 퍼포먼스 문제 중 하나가 바로 N+1 문제입니다.제가 실제로 겪었던 한 사건은, 한 페이지 조회가 로컬에서는 몇 ms였는데운영에서는 갑자기 3~5초로 느려지며 장애 직전까지 갔던 일이었습니다.원인은 단순했습니다. 리스트 조회 → 연관 엔티티 지연 로딩 → 수십~수백 건의 추가 쿼리 발생.튜닝하기 전까지는 도대체 왜 이런 일이 생기는지 이해조차 어려운 문제였습니다.그래서 이 글에서는 단순히 “N+1이 뭔지” 설명하는 수준을 넘어서,실제 서비스에서 어떻게 자동 감지하고, 어떻게 해결했는지까지 모두 정리해 봅니다. 1. N+1은 왜 생기는가? (지연 로딩의.. 2025. 10. 9.
연관관계 주인/지연로딩 N+1 체크리스트 연관관계 주인/지연로딩 N+1 체크리스트JPA/Hibernate로 도메인 모델을 설계할 때 가장 많이 실수하는 두 가지가 있습니다. 첫째, 연관관계의 주인(owner)을 잘못 잡아 업데이트가 반영되지 않는 문제, 둘째, 지연로딩(LAZY)로 인한 N+1 쿼리 폭증입니다. 이 글에서는 “문제 → 원인 → 해결” 순서로 체크리스트를 정리하고, 실전 코드와 함께 안전한 패턴을 제시합니다.도메인 예시@Entityclass Member { @Id @GeneratedValue Long id; String name; // 읽기전용: mappedBy = "member" → 주인은 Order.member @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) List.. 2025. 10. 2.