본문 바로가기
Spring/API

[jpashop] API 개발 고급 정리

by 김긍수 2021. 3. 29.

API 개발 고급 정리

  • 엔티티 조회
    • 엔티티를 조회해서 그대로 반환: V1 - 절대 사용해선 안된다. API 스펙이 바뀔 수 있음.
    • 엔티티 조회 후 DTO로 변환: V2 - API 스펙에 맞는 DTO 사용 !!
    • 페치 조인으로 쿼리 수 최적화: V3 - V2 성능이 나오지 않을 경우(여러 테이블 조인) 패치 조인 사용
    • 컬렉션 페이징과 한계 돌파: V3.1 
      • 컬렉션은 패치 조인시 페이징이 불가능
      • ToOne 관계는 패치 조인으로 쿼리 수 최적화
      • 컬렉션은 패치 조인 대신에 지연 로딩을 유지하고, hibernate.default_batch_fetch_size, @BatchSize 로 최적화
  • DTO 직접 조회
    • JPA에서 DTO를 직접 조회: V4 
    • 컬렉션 조회 최적화 - 일대다 관계인 컬렉션은 IN 절을 활용해서 메모리에 미리 조회해서 최적화: V5 - 조인 시 데이터가 늘어나게 되므로 IN 절사용
    • 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환: V6

 

권장 순서

1. 엔티티 조회 방식(DTO사용)으로 우선 접근
    1. 페치조인으로 쿼리 수를 최적화

     2. 컬렉션 최적화
          1. 페이징 필요 hibernate.default_batch_fetch_size, @BatchSize 로 최적화
          2. 페이징 필요X -> 페치 조인 사용
2. 엔티티 조회 방식으로 해결이 안되면 DTO 조회 방식 사용
3. DTO 조회 방식으로 해결이 안되면 NativeSQL or 스프링 JdbcTemplate

 

엔티티 조회 방식은 JPA가 많은 부분을 최적화 해준다. 단순한 코드를 유지하면서, 성능을 최적화 할 수 있다. 반면에 DTO 조회 방식은 SQL을 직접 다루는 것과 유사하다.

 

'Spring > API' 카테고리의 다른 글

[API] 컬렉션 조회 최적화  (0) 2021.03.25
API 개발 기본  (0) 2021.03.24

댓글