스프링&스프링부트

[스프링부트/웹 애플리케이션 개발]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