@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());
//엔티티를 DTO로 바꾸고 List로 다시 변환
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){ //생성자를 사용하서 람다식을 통해 DTO 세팅
orderId = order.getId();
name = order.getMamber().getName();
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getDelivery().getAddress();
}
-API에서 받아온 엔티티는 그대로 반환해서는 안된다,
-DTO로 변환해서 반환해야 한다.
-V1, V2 둘다 지연로딩으로 인한 SQL이 너무 느리다는 문제점이 있다.
n+1 문제
-최초 Order 조회에 1번 DTO반환시 프록시 객체들 때문에 2번씩 더 작동한다.
-지연로딩 객체 member와 delivery에 접근시 발생
-최초 의도한 1번 이외에 지연로딩 때문에 추가적으로 SQL이 동작하는걸 n+1문제라고 한다.
-최초 쿼리문 하나에 +n번 만큼 쿼리가 더 작동하는 문제를 말한다.
'JPA' 카테고리의 다른 글
| 2월 24일 JPA 간단한 주문조회 V4 (0) | 2023.02.24 |
|---|---|
| 2월 23일 JPA 간단한 주문조회 V3 (0) | 2023.02.23 |
| 2월 22일 JPA API 개발 고급 (0) | 2023.02.22 |
| 2월 22일 JPA 회원조회 V2 (0) | 2023.02.22 |
| 2월 22일 JPA 회원조회 API (0) | 2023.02.22 |