JPA 페이징 제약 돌파하는법

정명진·2022년 4월 16일
0
post-thumbnail

개인 공부겸 배운 내용을 정리하기 위해 쓰는 글입니다.

페이징은 컬렉션을 페치 조인하면 사용이 불가능하다.
1. 페치 조인시 컬렉션은 일대다 조인이 발생하므로 예측이 불가함.
2. 1:N, 1:1등 1을 기준으로 페이징하는게 목적임. 그런데 컬렉션은 다(N)을 기준으로 생성됨.
3. 1이 기준이 아니라 N이 돼버리는것...

그렇다면 어떻게 해결해야 하나?
1. 먼저 ToOne(OneToOne, ManyToOne) 관계를 모두 페치 조인한다. 이러한 관계는 row를 증가시키지 않음.
2. 컬렉션은 Lazy Loading한다.
3. Lazy Loading 성능 최적화를 위해 배치 사이즈를 설정하자.

JPA는 @BatchSize 또는 default_batch_fetch_size를 통해 배치 사이즈 조정이 가능하다.

여기서 서버에 부하가 가지 않을까 하는 걱정이 있을 수 있다.

물론 순간적으로 배치 사이즈만큼 한번에 데이터를 읽기 때문에 서버에 부하가 갈 수 있음.
하지만 전체적으로 보면 결국 사용하게 되는 메모리 양은 똑같고 기존보다 성능을 더 높일 수 있다.

profile
개발자로 입사했지만 정체성을 잃어가는중... 다시 준비 시작이다..

0개의 댓글