#3 of Spring - Spring Boot and JPA when API 개발 (fetch join)

fetch join for 성능 최적화

개요

  • 정의
    • 네이티브 쿼리 형태로 즉시 및 지연 로딩 무시한 채 기본 조인으로 한번에 조회
  • 기본 사용 방법
    • entityManager.createQuery("join fetch 사용한 쿼리문 입력")
  • 사용 이유
    • 지연 로딩의 경우, 최악의 케이스 (1 + N) 조회 발생할 수 있음
      • ex) 주문 정보 (1에 해당하는) 조회 시, 회원 및 배송지 정보 별도 쿼리 실행
    • fetch join 사용 시, 지연 로딩 자체를 무시하고 한번에 모든 데이터 조회
      • 즉, 1회 쿼리로 종료

후속 처리

  • dto 로 변환하는 작업 필요
    • 순서
      • 변환하고자 하는 dto 객체 생성
        • 엔티티에 대응하는 필드
        • 생성자
          • API 스펙에 맞는 응답 데이터만 선별하여 초기화 선언
    • orders.stream().map(o -> new SimpleOrderDto(o)).collect(Collectors.toList())
      • 위와 같은 형태로 조회한 엔티티 기준 데이터를 dto로 변환
    • MSA (Micro Service Architecture)
      • 즉, 서비스가 다수 분리된 경우 별도의 통일된 API 응답 스펙을 미리 정함
      • 정해진 응답 스펙에 변환된 dto 를 담아 front 에 전달

References

댓글