인프런 Spring 강의 정리/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
📌 OSIV와 성능 최적화 🔶 Open Session In View : 하이버네이트 🔶 Open EntityManager In View : JPA ⚡ OSIV ON spring.jpa.open-in-view: true 기본값 이 기본값을 뿌리면서 애플리케이션 시작 시점에 warn 로그를 남기는 것은 이유가 있음 OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지함 지금까지 View Template이나 API 컨트롤러에서 지연 로딩이 가능했던 것 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있음 -> 장애 ex) 컨트롤러에서 외부 AP..
🖇 주문 조회 주문내역에서 추가로 주문한 상품 정보를 추가로 조회 Order 기준으로 컬렉션인 OrderItem와 Item이 필요 ➡ 앞의 예제는 toOne(OneToOne, ManyToOne) 관계 이야기 ➡ 이번 예제는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 알아봄 📌 1. 엔티티 직접 노출 🔶 OrderApiController 코드 생성 package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderItem; import jpabook.jpashop.domain.OrderSearch; import jpabook.jpashop.repository.Ord..
📌 간단한 주문 조회 ✔ 주문 + 배송 정보 + 회원을 조회하는 API 생성 ➡ 지연 로딩 떄문에 발생하는 성능 문제를 단계적으로 해결 📌 1. 엔티티를 직접 노출 🔶 OrderSimpleApiController package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderSearch; import jpabook.jpashop.repository.OrderRepository; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springfram..
📌 조회용 샘플 데이터 입력 package jpabook.jpashop; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.item.Book; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component @RequiredArgsConstructor public clas..