본문 바로가기
728x90
반응형

Dev/JPA35

[JPA] JPA 활용 II - API 개발 고급 (실무 필수 최적화) OSIV (Open Session In View) 영속성 컨텍스트를 View까지 열어두는 전략이다. 영속성 컨텍스트가 유지되면 엔티티도 영속 상태로 유지되기 때문에 View에서도 지연로딩을 사용할 수 있다. ※ 하이버네이트에선 Open Session In View라고 부르며 JPA에선 Open EntityManager In View라고 부른다. OSIV 설정 // application.yml spring: jpa: open-in-view: false // ON : true(default), OFF : false OSIV ON OSIV 전략을 사용할 경우 트랜잭션 시작부터 고객의 요청에 따른 처리결과가 반환될 때 까지 DB 커넥션을 유지하고 있는 것이다. DB 커넥션을 계속 유지함으로써 View Templ.. 2021. 10. 20.
[JPA] JPA 활용 II - API 개발 고급 (컬렉션 조회 최적화) 목표 이전 포스팅에서 조회한 주문내역에서 추가로 주문한 상품 정보인 OrderItem과 Item을 조회하고, 일대다 관계 조회 시 최적화하는 방법을 알아보자. V1. 엔티티 직접 노출 기본 조회 package jpabook.jpashop.api; @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; /** * V1. 엔티티 직접 노출 * - Hibernate5Module 모듈 등록, LAZY=null 처리 * - 양방향 관계 문제 발생 -> @JsonIgnore */ @GetMapping(value = "/api/v1/orders") publ.. 2021. 10. 20.
[JPA] JPA 활용 II - API 개발 고급 (지연로딩과 조회성능 최적화) 목표 간단한 주문을 조회하는 기능을 만들면서 지연로딩 때문에 발생하는 성능 문제 해결 @ManyToOne, @OneToOne 관계 성능 최적화 V1. 엔티티 직접 노출 기본 조회 소스 구현 package jpabook.jpashop.api; /** * * xToOne(ManyToOne, OneToOne) 관계 최적화 * Order * Order -> Member * Order -> Delivery * */ @RestController @RequiredArgsConstructor public class OrderSimpleController { private final OrderRepository orderRepository; @GetMapping(value="/api/v1/simple-orders") p.. 2021. 10. 4.
[JPA] JPA 활용 II - API 개발 고급 (준비) 등록, 수정에 비해 조회 기능은 성능 문제가 많이 발생한다. 앞으로 학습할 성능 최적화를 통해 문제를 해결해보자 샘플 데이터 생성 조회 성능 최적화 실습을 위한 샘플 데이터를 생성하는 클래스를 생성해보자 데이터 생성 클래스 package jpabook.jpashop; import javax.annotation.PostConstruct; import javax.persistence.EntityManager; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import jpabook.jpashop.domain.Address; import jpabook.j.. 2021. 9. 29.
[JPA] JPA 활용 II - API 개발 기본 회원 등록, 수정, 조회 API 개발을 학습해보자 준비사항 포스트맨 설치 API 테스트 툴을 설치한다. (https://www.postman.com/) 포스트맨 설정 REST API 테스트 시 기본적인 설정 회원등록 API 엔티티를 사용하는 방식과 DTO를 사용하는 방식을 각각 구성해보자 엔티티 사용 회원 컨트롤러 구성 package jpabook.jpashop.api; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; /** * 등.. 2021. 9. 29.