[spring] API 개발 고급 - 지연 로딩과 조회 성능 최적화2
JPA에서 DTO로 바로 조회
3까지는 엔티티를 조회해서, 엔티티를 dto로 변환했고, 이번에는 바로 dto로 조회
package jpabook.jpashop.repository;
import jpabook.jpashop.domain.Address;
import jpabook.jpashop.domain.Order;
import jpabook.jpashop.domain.OrderStatus;
import lombok.Data;
import java.time.LocalDateTime;
@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;
}
}
@GetMapping("/api/v4/simple-orders")
public List<OrderSimpleQueryDto> ordersV4() {
return orderRepository.findOrderDtos();
}
@Data
static class SimpleOrderDto {
private Long orderId;
private String name;
private LocalDateTime orderDate; //주문시간
private OrderStatus orderStatus;
private Address address;
public SimpleOrderDto(Order order) {
orderId = order.getId();
name = order.getMember().getName(); //Lazy 초기화
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getMember().getAddress(); //Lazy 초기화
}
}
public List<OrderSimpleQueryDto> findOrderDtos() {
return em.createQuery(
"select new jpabook.jpashop.repository.OrderSimpleQueryDto(o.id, m.name, o.orderDate, o.status, d.address)" +
" from Order o"+
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDto.class)
.getResultList();
}
v4의 결과는 v3와 동일하지만
select 쿼리를 보면 v3보다 원하는 결과에 맞는 것만 select 되어서 나온다.
직접 쿼리를 짰기 때문이다.
v3은 페치 조인이어서 select를 많이 하기 때문에 v4보다는 네트워크를 더 많이 쓴다.
v4와 v3은 둘 간에 우열을 가리기 어렵다. (trade-off 잇음)
v3은 내부의 원하는 것만 fetch로 튜닝
v3는 쿼리를 sql짜듯이 jpa로 가져온 것이다. 화면엔 사용할 수 있지만 재사용성이 떨어진다.
v3은 많은 api가 사용할 수 있음. 원하는 dto로 바꿔서 재사용
v3는 로직 재활용 안되지만, 성능최적화
Author And Source
이 문제에 관하여([spring] API 개발 고급 - 지연 로딩과 조회 성능 최적화2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vector13/spring-API-개발-고급-지연-로딩과-조회-성능-최적화2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)