JPA4 OSIV와 성능 최적화 OSIV란 하이버네이트: Open Session In View JPA: Open EntityManager In View OSIV ON spring.jpa.open-in-view : true (기본값) 동작 원리 클라이언트의 요청이 들어오면 영속성 컨텍스트를 생성한다. 이때 트랜잭션은 시작하지 않는다. 서비스 계증에서 트랜잭션을 시작하면 생성해둔 영속성 컨텍스트에 트랜잭션을 시작한다. 비즈니스 로직을 실행하고 서비스 계층이 끝나면 트랜잭션을 커밋하면서 영속성 컨텍스트를 플러시한다. 이때 트랜잭션만 종료하고 영속성 컨텍스트는 살려둔다. 클라이언트의 요청이 끝날 때 영속성 컨텍스트를 종료한다. 장점 영속성 컨텍스트가 유지되지 때문에 View Template이나 API 컨트롤러에서 지연 로딩이 가능하다. 단점 .. 2022. 3. 25. JPA 지연 로딩과 조회 성능 최적화 (2) 지연 로딩 @OneToMany 연관관계에 대한 성능 최적화 내용이다. 엔티티 직접 노출 엔티티를 API의 응답 값으로 반환하는 방법이다. @GetMapping("/api/v1/orders") public List orderV1() { List orders = orderRepository.findAll(); for (Order order : orders) { order.getMember().getName(); order.getDelivery().getAddress(); List orderItems = order.getOrderItems(); orderItems.forEach(o -> o.getItem().getName()); } return orders; } @OneToMany 연관 관계인 엔티티의 값을 .. 2022. 3. 7. JPA 지연 로딩과 조회 성능 최적화 (1) 지연 로딩 @ManyToOne, @OneToOne 연관관계에 대한 성능 최적화 내용이다. @OneToMany 연관관계는 다음 포스트에서 정리할 예정이다. 예제 도메인 @Entity @Table(name = "orders") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL).. 2022. 3. 6. 우아한테크캠프 Pro 2주차 미션 후기 우아한테크캠프 Pro 2주차 JPA 미션을 진행한 내용과 후기를 정리해본다. 이번 미션의 목표 TDD 기반으로 프로그래밍하는 경험 메서드 분리 + 클래스를 분리하는 리팩터링 경험 점진적으로 리팩토링하는 경험 효율적으로 JPA를 사용하는 방법 경험할 객체지향 생활 체조 원칙 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 5: 줄여쓰지 않는다. (축약 금지) 규칙 8: 일급 콜렉션을 쓴다. 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다. 저장소 및 PR 저장소: https://github.com/jsyang-dev/jwp-qna 1단계 PR: https://github.com/next-step/jwp-qna/pull/202 2단계 PR: https://github.com/next-step/jwp-qna/p.. 2021. 12. 25. 이전 1 다음