Spring Boot와 JPA 활용2 - TIL(3)

YulHee Kim·2021년 10월 5일
0

Spring Boot와 JPA 활용

목록 보기
10/11
post-thumbnail

[참고 강의] 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

💡 지연 로딩과 조회 성능 최적화

간단한 주문 조회: JPA에서 DTO 직접 조회

OrderSimpleApiController

    @GetMapping("/api/v4/simple-orders")
    public List<OrderSimpleQueryDto> ordersV4() {
        return orderRepository.findOrderDtos();
    }

OrderSimpleQueryRepository 조회 전용 레포지토리

  @Repository
  @RequiredArgsConstructor
  public class OrderSimpleQueryRepository {
      private final EntityManager em;
      public List<OrderSimpleQueryDto> findOrderDtos() {
          return em.createQuery(
                  "select new
  jpabook.jpashop.repository.order.simplequery.OrderSimpleQueryDto(o.id, m.name,
  o.orderDate, o.status, d.address)" +
 } }

OrderSimpleQueryDto 레포지토리에서 DTO 직접 조회

@Data
public class OrderSimpleQueryDto {
    private Long orderId;
    private String name;
    private LocalDateTime orderDate;
    private OrderStatus orderStatus;
    private Address address;

    public OrderSimpleQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address) {
        this.orderId = orderId;
        this.name = name;
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
        this.address = address;
    }
}
  • 일반적인 SQL을 사용할 때 처럼 원하는 값을 선택해섲 ㅗ회
  • new 명령어를 사용해서 JPQL의 결과를 DTO로 즉시 변환
  • SELECT 절에서 원하는 데이터를 직접 선택하므로 DB -> 애플리케이션 네트워크 용량 최적화
  • 레포지토리 재사용성 떨어짐, API 스펙에 맞춘 코드가 레포지토리에 들어가는 단점

쿼리 방식 선택 권장 순서

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

0개의 댓글

관련 채용 정보