목록분류 전체보기 (572)
오봉이와 함께하는 개발 블로그
간단한 주문 조회 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..
조회용 샘플 데이터 입력 userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK package jpabook.jpashop; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.item.Book; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.persistence.EntityMana..
회원 조회 API 회원조회 V1: 응답 값으로 엔티티를 직접 외부에 노출 @GetMapping("/api/v1/members") public List membersV1() { return memberService.findMembers(); } 문제점 엔티티에 프레젠테이션 계층을 위한 로직이 추가된다. 기본적으로 엔티티의 모든 값이 노출된다. 응답 스펙을 맞추기 위해 로직이 추가된다. (@JsonIgnore, 별도의 뷰 로직 등등) 예 : 회원 정보에 대한 내용만 원하는데, Member 엔티티에는 orders에 대한 정보도 있기 때문에 주문 내역이 있으면 주문 내역도 응답해서 주문 내역에 대한 정보는 응답하지 않도록 한 경우 다른 API에서는 주문 내역만 응답을 원할 때는 곤란해진다. 실무에서는 같은 엔티..