PSD( Private-Self-Development )

JPA 조회 성능 최적화 본문

Backend/JPA

JPA 조회 성능 최적화

chjysm 2022. 12. 1. 16:35

1. 엔티티를 API 응답으로 노출 시키지 말자.

1) 양방향 연관관계 설정 시 Json 화 하면서 무한루프에 빠진다 (@JsonIgnore 설정 필요)

2) 불필요하고 너무 많은 정보가 노출된다.

3) 연관 관계 지연로딩 설정 시 초기화 해주지 않으면 프록시가 대신 위치하기 때문에 파싱 문제 발생

 

2. 패치 조인( fetch join ) 을 활용하자.

em.createQuery(
                "select o from Order o" +
                        " join fetch o.member m" +
                        " join fetch o.delivery d", Order.class)
                .getResultList();

1) ToOne 관계는 패치 조인 조회

2) ToMany 관계는 지연 로딩을 이용 하자. (default_batch_fetch_size 설정 혹은 @BatchSize 어노테이션 설정 으로 성능 최적화 100 - 1000 이 적당하다. )

# application.yml 에 설정값을 추가하여 지연 로딩시 한번에 가지고 오는 수량을 설정할 수 있다 
default_batch_fetch_size: 100

 

 

3. 패치 조인으로 처리가 안되면 DTO로 직접 조회를 사용하자 

em.createQuery(
                "select new jpabook.jpashop.repository.order.query.OrderQueryDto(o.id, m.name, o.orderDate, o.status, d.address)" +
                        " from Order o" +
                        " join o.member m" +
                        " join o.delivery d", OrderQueryDto.class)
                .getResultList();

4. 위 사항으로 처리가 안되면 네이티브 SQL/JDBC 사용하여 조회하자

 


참조 : 

 

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 극한의 성능 최적화 방법을 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

'Backend > JPA' 카테고리의 다른 글

OSIV( Open Session In View ) 성능 최적화  (0) 2022.12.12
JPA 의 쿼리 작성 라이브러리  (0) 2022.10.20
JPA 값 타입  (0) 2022.10.14
JPA 의 프록시, 지연 로딩, 즉시 로딩  (0) 2022.10.12
JPA 의 상속  (0) 2022.10.11