주문조회 V2 - 엔티티를 DTO로 변환
엔티티를 외부에 노출하면 안된다.
V2에서는 엔티티를 조회하여 DTO로 변환한다.
@GetMapping("/api/v2/simple-orders")
public List<SimpleOrderDto> orderV2(){
List<Order> orders = orderRepository.findAllByString(new OrderSearch());
List<SimpleOrderDto> result = orders.stream()
.map(o -> new SimpleOrderDto(o))
.collect(Collectors.toList());
return result;
}
@Data
static class SimpleOrderDto {
private Long orderId;
private String name;
private LocalDateTime orderDate; //주문시간
private OrderStatus orderStatus;
private Address address;
public SimpleOrderDto(Order order) {
this.orderId = order.getId();
this.name = order.getMember().getName();
this.orderDate = order.getOrderDate();
this.orderStatus = order.getStatus();
this.address = order.getDelivery().getAddress();
}
}
엔티티를 V1과같이 조회하여 자바에서 제공하는 stream을 이용하여 엔티티를 DTO로 변환 하였다.
해당 요청에서는 최악의 경우 쿼리가 총 1 + N + N번 나가게 된다.(V1과 쿼리 수 동일)
- order 조회 1번(order 조회 결과 수가 N이 됨)
- order -> member 지연로딩 조회 N번
- order -> delivery 지연로딩 N번
- 지연로딩에서 영속성 컨텍스트에 있는 상태이면, 쿼리를 보내지 않는다.
- 따라서 최악의 경우 1 + N + N번 쿼리가 나간다.
'JPA > API개발 및 성능 최적화' 카테고리의 다른 글
[Rest API] 10. 컬렉션 조회 - DTO로 변환 (0) | 2023.02.14 |
---|---|
[Rest API] 9. 컬렉션 조회 - 엔티티 직접 노출 (0) | 2023.02.13 |
[Rest API] 8. 주문조회 - DTO로 바로 조회 (0) | 2023.02.12 |
[Rest API] 7. 주문조회 - 페치 조인 최적화 (0) | 2023.02.11 |
[Rest API] 5. 주문조회 - 엔티티 노출 (0) | 2023.02.09 |
[Rest API] 4. 조회용 샘플 입력 (0) | 2023.02.08 |
[Rest API] 3. 회원 조회 API (0) | 2023.02.07 |
[Rest API] 2. 회원 수정 API (0) | 2023.02.07 |