목록BE (354)
오봉이와 함께하는 개발 블로그
주문 조회 V1: 엔티티 직접 노출 주문내역에서 추가로 주문한 상품 정보를 추가로 조회하자. Order기준으로 컬렉션인 OrderItem와 Item이 필요하다. 앞의 예제에서는 XtoOne(OneToOne, ManyToOne)관계만 있었다. XtoOne관계에서는 fetch join을 사용해서 쉽게 해결할 수 있지만 일대다 관계는 얘기가 다르다. 예를 들어 1:3 관계라고 하면 1을 조회하기 위해 쿼리가 3개 더 추가되는 문제가 있고, 이런 경우 최적화하기 어렵다는 문제가 있다. 이번에는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 알아보자. /** * V1. 엔티티 직접 노출 * - 엔티티가 변하면 API 스펙이 변한다. * - 트랜잭션 안에서 지연 로딩 필요 * - 양방향 연..
간단한 주문 조회 V4: JPA에서 DTO로 바로 조회 OrderSimpleApiController - 추가 @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderRepository.findOrderDtos(); } OrderSimpleQueryRepository 조회 전용 리포지토리 public List 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...
간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 OrderSimpleApiController - 추가 @GetMapping("/api/v3/simple-orders") public List ordersV3() { List orders = orderRepository.findAllWithMemberDelivery(); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(toList()); return result; } OrderRepository - 추가 코드 public List findAllWithMemberDelivery() { return em.createQuery("select o from Order..
간단한 주문 조회 V2: 엔티티를 DTO로 변환 @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAllByCriteria(new OrderSearch()); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) // a -> b로 바꿈. .collect(Collectors.toList()); return result; } @Data static class SimpleOrderDto { private Long orderId; private String name; private LocalDateTime orderDate; pri..
간단한 주문 조회 V1: 엔티티를 직접 노출 주문 + 배송정보 + 회원을 조회하는 API를 만들자. 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결해보자. OrderSimpleApiController xToOne(ManyToOne, OneToOne) 관계를 어떻게 최적화 하는지에 대해 알아보자. /** * * xToOne(ManyToOne, OneToOne) 관계 최적화 * Order * Order -> Member * Order -> Delivery * */ @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMa..