Engineering Note

[JPA] fetch join을 사용하는 이유와 한계 본문

Server/JPA ORM

[JPA] fetch join을 사용하는 이유와 한계

Software Engineer Kim 2026. 4. 8. 14:22

fetch join을 사용하는 이유

fetch join은 JPA에서 지연로딩으로 설정되어 있는 연결된 엔티티를 지연로딩으로 조회하지 않고 한 번에 조회하기 위해 사용. 

 

 

fetch join의 한계

일대다 컬렉션으로 연관관계를 맺고 있는 엔티티의 경우 페이지네이션이 불가능하다.

 

왜 페이지네이션이 적용이 안되나?

RDBMS는 두 개의 테이블을 조인할 때, Cartesian Product(카테시안 곱)이 일어나는데 이때 데이터 중복이 발생한다. 예를 들면, 하나의 게시글에 3개의 댓글이 달렸다고 할 때, Post(게시글 테이블)과 Comment(댓글 테이블)을 조인하면 3개의 Row가 생긴다.

 

Post 테이블

post_id title
1 JPA 공부중

 

Comment 테이블

comment_id post_id contents
1 1 재밌어요
2 1 어렵네요
3 1 쉬워요

 

 

두 개의 테이블을 조인한 결과

- 데이터 중복이 발생. post_id는 하나지만 게시글과 조인을 하면서 3개의 게시글이 존재하는 것처럼 결과가 나타났다.

post_id comment_id title contents
1 1 JPA 공부중 재밌어요
1 2 JPA 공부중 어렵네요
1 3 JPA 공부중 쉬워요

 

페이지네이션이 적용이 안된다는 의미는 논리적 오류가 발생한다는 의미다. 페이지네이션은 조인 후에 offset과 limit으로 데이터를 분류하는데 이때 요청한 결과와 다른 결과가 반환될 수 있다. 그리고 JPA는 객체로 데이터를 다루기 때문에 만약 하나의 게시글만 가져오기 위해 limit 1를 적용하면 DB SQL문에서 limit 1이 수행되지 않고 메모리에서 직접 페이지네이션을 적용하면서 성능이슈가 발생할 수 있다.

Comments