Spring JPA [활용] API 개발 고급

신재원·2023년 2월 11일
0

Spring JPA 활용

목록 보기
12/18

조회의 성능 최적화

  • 📌 엔티티를 외부로 노출 방법 !! (사용 XX), (이런 방법이있다 정도)

    • 예시 (Order 엔티티 클래스를 외부에 노출)
    • 성능상 문제, LAZY (지연로딩)인 관계까지 쿼리를 날려서 확인하게된다.
      • 그렇다고 !! LAZY (지연로딩)을 !! EAGER(즉시로딩)으로 바꿔서 사용하면 절대 안된다.
    • 양방향이 걸리는 엔티티 관계를 찾아 직접 @JsonIgnore를 사용하여 관계를 끊어줘야된다.

📌 DTO로 엔티티를 변환해서 반환해야된다.

  • 예시
    (위의 사진과 다르게 Dto라는 클래스를 만들어 필요한 엔티티의 데이터값을 반환하여 사용한다)

  • 정리 : 두 예시 다 문제점이 있다.
    • LAZY (지연로딩)로딩으로 인한 데이터베이스 쿼리가 너무 많이 발생한다. ( N + 1) 문제

📌 fetch 조인을 사용해 한방쿼리로 반환 (실무에서 많이사용)

  • 예시
    (fetch 조인을 사용해 엮여있는 데이터를 한방쿼리로 조회),
    LAZY (지연로딩) 발생 X
    (inner)생략가능 join

  • 정리

📌 쿼리 방식 선택 권장 순서
1. 우선 엔티티를 DTO로 변환하는 방법을 선택한다.
2. 필요하면 패치 조인으로 성능을 최적화 한다 --> 대부분 성능 이슈가 해결된다.
3. 그래도 안되면, DTO로 직접 조회하는 방법을 사용한다.
4. 최후의 방법은 JPA가 제공하는 네이티브 SQL이나 스프링 JDBC Template을 사용해 SQL을 직접 작성한다.

0개의 댓글