그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록JPA
JPA

JPA에서 Fetch Join과 페이징을 함께 쓸 때 왜 주의해야 하나요?

실무5/5
설계4/5
인간4/5
기초3/5

면접관의 질문 의도

fetch join을 N+1 해결책 정도로만 쓰는지, ToMany 페이징의 한계를 알고 운영 리스크와 대안 설계까지 보는지를 가르려는 질문이다.

큐레이션 답변

학습 자료

ToMany 관계를 fetch join하면 부모 행이 자식 수만큼 중복돼 결과 집합이 부풀어 오른다. 여기에 Pageable을 더하면 Hibernate가 SQL의 limit/offset을 적용하지 못하고 전체 결과를 메모리에 올린 뒤 잘라내는 방식으로 떨어진다. 그래서 데이터가 많을수록 힙 사용량이 폭증해 OOM과 응답 지연으로 이어진다. 컬렉션 fetch join은 빼고 @BatchSize·default_batch_fetch_size로 N+1을 잡거나, ID만 먼저 페이징한 뒤 상세를 따로 조회하는 두 단계 전략으로 분리하는 게 정석이다.

좋은 답변 구조

  1. 01ToMany fetch join 결과 집합이 왜 부풀어 오르는지부터 설명한다
  2. 02Hibernate가 페이징을 메모리에서 처리하는 동작을 짚는다
  3. 03OOM과 응답 지연으로 이어지는 운영 경로를 드러낸다
  4. 04@BatchSize·두 단계 조회 같은 대안과 선택 기준을 비교한다

자주 실수하는 포인트

fetch join과 Pageable을 같이 써도 안전하다고 가정한다
Hibernate의 'firstResult/maxResults' 경고를 무시하고 성능을 추정으로만 판단한다
N+1 방지에만 집중하느라 메모리 부하 가능성을 못 본다

실무 맥락

  • 상품-카테고리처럼 부모-자식 관계 데이터를 한 번에 보여주는 목록 API
  • 관리자 페이지에서 수만 건 이상을 페이징해 내려보내는 환경
  • Hibernate 'firstResult/maxResults specified with collection fetch' 경고가 운영 로그에 깔린 환경

본인 경험에 녹이는 힌트

조회 API가 갑자기 느려지거나 OOM이 났던 경험이 있다면 fetch join + 페이징 조합과 연결할 수 있다

@BatchSize 도입 전후로 쿼리 수와 응답 시간 변화를 측정해 본 경험이 있다면 비교 데이터를 답변 근거로 가져갈 수 있다

fetch join을 걷어내고 두 단계 조회로 바꿔 안정성이 회복된 경험이 있다면 의사결정 과정을 풀어낼 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1ToOne fetch join과 ToMany fetch join에서 페이징 동작이 어떻게 갈리나요
Q2@BatchSize 값을 정할 때 어떤 기준으로 잡나요
Q3ID만 먼저 페이징한 뒤 상세를 따로 조회하는 두 단계 전략은 언제 유리한가요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문