티스토리 뷰

728x90
반응형

 

JPA를 사용하다 보면 LAZY로딩에 의해서 더 많은 쿼리가 나가는 경우가 발생한다.

 

쿼리를 보낼 때 연관된 내용을 바로 찾지 않고 필요할때 다시 쿼리를 보내서 찾는 LAZY 방식을 사용하여 N+1 쿼리 문제가 발생하게 된다.

 

ToOne에 관계는 fetch join을 사용하여 한번에 값들을 모두 조회할 수 있지만 ToMany 같은 컬렉션 조회는 한개는 상관없지만 여러개를 fetch join을 걸게되면 MultipleBagFetchException 에러가 나게된다.

 

properties설정에 하이버네이트의 default_batch_fetch_size 글로벌 옵션을 걸거나 필요한 엔티티에 어노테이션 @BatchSize를 붙이면 된다.

이 옵션은 설정한 size만큼 in절로 묶어서 한번에 가져오기 때문에 쿼리를 줄일 수 있다. 

 

그리고 컬렉션에 fetch join을 쓰면 페이징 처리가 불가능 하지만 이 방식은 페이징 처리가 가능하다. 

max size는 1000으로 하는게 적당하다.

 

Reference


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94/dashboard

 

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의

스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 본 강의는 자바 백엔드 개발의 실전 코스에 있는 활용2 강의 입니다. 스프링 부트와 J

www.inflearn.com

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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