728x90
728x90
※ 본 포스팅은 김영한 강사님의 인프런 '실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화' 강의를 들으며 작성한 수강일지 입니다.
| API 개발 고급 - 지연 로딩과 조회 성능 최적화
1. 간단한 주문 조회 V1: 엔티티를 직접 노출
2. 간단한 주문 조회 V2: 엔티티를 DTO로 변환
3. 간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화
4. 간단한 주문 조회 V4: JPA에서 DTO로 바로 조회
3. 간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화
OrderSimpleApiController - 추가
@GetMapping("/api/v3/simple-orders")
public List<SimpleOrderDto> ordersV3() {
List<Order> orders = orderRepository.findAllWithMemberDelivery();
List<SimpleOrderDto> result = orders.stream()
.map(o -> new SimpleOrderDto(o))
.collect(Collectors.toList());
return result;
}
OrderRepository - 추가 코드
public List<Order> findAllWithMemberDelivery() {
// fetch join -> 이 경우 LAZY 다 무시하고 멤버, 딜리버리까지 해서 다 가지고 옴
// 성능 최적화를 위해 자주 사용
return em.createQuery(
"select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d", Order.class
).getResultList();
}
- 엔티티를 페치 조인(fetch join)을 사용해서 쿼리 1번에 조회
- v2는 5번의 쿼리가 나가는데 v3는 한 번의 쿼리만으로 같은 결과를 얻어 옴
- 페치 조인으로 order -> member , order -> delivery 는 이미 조회 된 상태 이므로 지연로딩X
- order에 member, delivery 객체가 같이 조회되어 나옴
728x90
728x90
'프로그래밍 > spring boot' 카테고리의 다른 글
[스프링부트] 실전! 스프링 부트와 JPA 활용2 컬렉션 조회 최적화 #1 엔티티 직접 노출 (2) | 2023.11.26 |
---|---|
[스프링부트] 실전! 스프링 부트와 JPA 활용2 지연 로딩과 조회 성능 최적화 #1 간단한 주문 조회 V4: JPA에서 DTO로 바로 조회 (2) | 2023.11.25 |
[스프링 입문] 스프링을 공부해야 하는 이유? (2) | 2023.11.25 |
[Annotations] Spring Boot Annotation 정리 (1) | 2023.11.23 |
[STS] STS4 설치 / 기본 설정 (0) | 2023.11.20 |