스프링&스프링부트
[스프링부트/웹 애플리케이션 개발]API 개발 고급-2
gitofjy
2023. 1. 11. 16:40
- 지연 로딩과 조회 성능 최적화
- 주문 + 배송정보 + 회원을 조회하는 API 만들기
- 지연 로딩 때문에 발생하는 성능 문제 단계적 해결
간단한 주문 조회V1 : 엔티티를 직접 노출
package jpabook.jpashop.api;
import jpabook.jpashop.domain.Order;
import jpabook.jpashop.repository.OrderRepository;
import jpabook.jpashop.repository.OrderSearch;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
// xToOne (ManyToOne, OneToOne)
//order
//order -> member (ManyToOne)
//order -> delivery (OneToOne)
@RestController
@RequiredArgsConstructor
public class OrderSimpleApiController {
private final OrderRepository orderRepository;
@GetMapping("/api/v1/simple-orders")
public List<Order> ordersV1() {
List<Order> all = orderRepository.findAllByString(new OrderSearch());
return all;
}
}
JpashopApplication
@SpringBootApplication
public class JpashopApplication {
public static void main(String[] args) {
@Bean
Hibernate5Module hibernate5Module() {
return new Hibernate5Module();
}
}
buil.gradle > dependencies 추가
dependencies {
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'
}
- null > lazy 로딩이라서
@GetMapping("/api/v1/simple-orders")
public List<Order> ordersV1() {
List<Order> all = orderRepository.findAllByString(new OrderSearch());
for (Order order : all) {
order.getMember().getName(); //lazy 강제 초기화
order.getDelivery().getAddress(); //lazy 강제 초기화
}
return all;
}
@SpringBootApplication
public class JpashopApplication {
@Bean
Hibernate5Module hibernate5Module() {
Hibernate5Module hibernate5Module = new Hibernate5Module();
//강제 지연 로딩 설정
//hibernate5Module.configure(Hibernate5Module.Feature.FORCE_LAZY_LOADING, true);
return new Hibernate5Module();
}
}
728x90