Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- buffer
- stream
- 이스케이프 문자
- JSON
- coding test
- Stack
- insertion sort
- 윤성우의 열혈 자료구조
- datastructure
- C 언어 코딩 도장
- ㅅ
- s
- Graph
- list 컬렉션
- 이것이 자바다
- C programming
- 알기쉬운 알고리즘
- 윤성우 열혈자료구조
- Algorithm
- 혼자 공부하는 C언어
- R
- 메모리구조
- Serialization
- Selection Sorting
Archives
- Today
- Total
Engineering Note
[JPA] fetch join을 사용하는 이유와 한계 본문
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이 수행되지 않고 메모리에서 직접 페이지네이션을 적용하면서 성능이슈가 발생할 수 있다.
'Server > JPA ORM' 카테고리의 다른 글
| [JPA] 고아객체 (0) | 2026.02.06 |
|---|---|
| [JPA] 영속성 전이 CASCADE (0) | 2026.02.06 |
| [JPA] N+1문제가 발생하는 예(주문내역 조회) (1) | 2026.01.23 |
| [JPA] JPA에서 연관관계가 맺어진 객체를 비교(eq)하는 것은, 실제 DB에서는 그 객체의 'ID(PK) 값'을 비교하는 것과 완전히 동일하다. (0) | 2026.01.14 |
| [JPA] 영속성 전이 옵션과 연관관계 편의 메서드가 필요한 이유, 고아객체 설정 (1) | 2026.01.10 |
Comments