반응형 JPA/SpringBoot with JPA12 [스프링 부트와 JPA 활용2] 08. QueryDSL 소개 실무에서는 조건에 따라서 실행되는 쿼리가 달라지는 동적 쿼리를 많이 사용한다. 주문 내역 검색으로 돌아가보고, 이 예제를 Querydsl로 바꾸어 보자. Querydsl로 처리 public List findAll(OrderSearch orderSearch) { QOrder order = QOrder.order; QMember member = QMember.member; return query .select(order) .from(order) .join(order.member, member) .where(statusEq(orderSearch.getOrderStatus()), nameLike(orderSearch.getMemberName())) .limit(1000) .fetch(); } private Bo.. 2021. 12. 18. [스프링 부트와 JPA 활용2] 07. 스프링 데이터 JPA 소개 스프링 데이터 JPA는 JPA를 사용할 때 지루하게 반복하는 코드를 자동화 해준다. 이미 라이브러리는 포함되어 있다. 기존의 MemberRepository 를 스프링 데이터 JPA로 변경해보자. MemberRepository package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MemberRepository extends JpaRepository { List findByName(String name); } findOne() → findById()로.. 2021. 12. 18. [스프링 부트와 JPA 활용2] 06. API 개발 고급 - 실무 필수 최적화 OSIV와 성능 최적화 Open Session In View: 하이버네이트 Open EntityManager In View: JPA (관례상 OSIV라 한다.) OSIV ON spring.jpa.open-in-view : true 기본값 이 기본값을 뿌리면서 애플리케이션 시작 시점에 warn 로그를 남기는 것은 이유가 있다. OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그래서 지금까지 View Template이나 API 컨트롤러에서 지연 로딩이 가능했던 것이다. 지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지한다. 이것 자체가 큰 장점이다... 2021. 12. 18. [스프링 부트와 JPA 활용2] 05. API 개발 고급 정리 정리 엔티티 조회 엔티티를 조회해서 그대로 반환: V1 엔티티 조회 후 DTO로 변환: V2 페치 조인으로 쿼리 수 최적화: V3 컬렉션 페이징과 한계 돌파: V3.1 컬렉션은 페치 조인시 페이징이 불가능 ToOne 관계는 페치 조인으로 쿼리 수 최적화 컬렉션은 페치 조인 대신에 지연 로딩을 유지하고, hibernate.default_batch_fetch_size , @BatchSize 로 최적화 DTO 직접 조회 JPA에서 DTO를 직접 조회: V4 컬렉션 조회 최적화 - 일대다 관계인 컬렉션은 IN 절을 활용해서 메모리에 미리 조회해서 최적화: V5 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환: V6 권장 순서 엔티티 조회 방식으로 우선 접근 페치.. 2021. 12. 18. 이전 1 2 3 다음 반응형