본문 바로가기

Spring

[Spring] API 개발 정리

API 개발 고급 정리

📍 API 개발 정리

엔티티 조회

  • 엔티티를 조회해서 그대로 반환
  • 엔티티 조회 후 DTO로 변환
  • 페치 조인으로 쿼리 수 최적화
  • 컬렉션 페이징과 한계 돌파
    • 컬렉션은 페치 조인시 페이징이 불가능
    • ToOne 관게는 페치 조인으로 쿼리 수 최적화
    • 컬렉션은 페치 조인 대신 지연 로딩을 유치하고, hibernate.default_batch_fetch_size, @BatchSize로 최적화

DTO 직접 조회

  • JPA에서 DTO를 직접 조회
  • 컬렉션 조회 최적화 - 일대다 관계인 컬랙션은 IN 절을 활용하여 메모리에 미리 조회해서 최적화
  • 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환

📍 API 개발 권장 순서

  1. 엔티티 조회 방식으로 우선 접근
    • 페치 조인으로 쿼리 수를 최적화
    • 컬렉션 최적화
      • 페이징 필요 : hibernate.default_batch_fetch_size, @BatchSize로 최적화
      • 페이징 필요 X : 페치 조인 사용
    • 거의 코드를 수정하지 않고, 옵션만 약간 변경해서 다양한 성능 최적화를 시도할 수 있음
  2. 엔티티 조회 방식으로 해결이 안될 경우 DTO 조회 방식 사용
    • 최적화 시 많은 코드를 변경해야 함
  3. DTO 조회 방식으로 해결이 안되면 NatveSQL or 스프링 JdbcTemplate 사용

📌 개발자는 성능 최적화와 코드 복잡도 사이에서 줄타기 해야함

📍 DTO 조회 방식의 선택지

  • DTO로 조회하는 방법도 각각 장단점이 있음 (V4: 기본, V5 :컬렉션 조회 최적화(IN 절), V6: 플랫 데이터 최적화)
  • V4는 코드가 단순. 특정 주문 한 건만 조회하는 경우(단건 조회) 이 방식을 사용해도 성능이 잘 나옴.
  • V5는 코드가 복잡. 여러 주문을 한번에 조회하는 경우에는 V4 대신 V5를 사용해야함. (V4 : 1 + N, V5: 1 + 1 와 같이 쿼리가 실행되므로)
  • V6는 완전히 다른 접근 방식. 일대다가 조인 되더라도 쿼리는 한번 나가는 장점이 있음. 다만 페이징은 불가능함.

 

 

 

 


** '실전! 스프링 부트와 JPA 활용2' 강의를 듣고 작성했습니다.