목록분류 전체보기 (572)
오봉이와 함께하는 개발 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bU87Ii/btrLyZImI7M/UIgoIVz6IgpEHDJNlueGvK/img.png)
OSIV와 성능 최적화 Open Session In View : 하이버네이트 Open EntityManager In View : JPA (관례상 OSIV라 한다.) OSIV ON spring.jpa.open-in-view : true (기본값) WARN 85220 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning이 기..
API 개발 고급 정리 엔티티 조회 엔티티를 조회해서 그대로 반환 : V1 엔티티 스펙이 변하면 API 스펙이 변하기 때문에 사용하지 말자. 엔티티 조회 후 DTO로 변환 : V2 여러 테이블을 조인해야 하면 성능이 안 나올 수 있다. 페치 조인으로 쿼리 수 최적화 : V3 V2에서 성능이 안 나오면 페치 조인을 통해 성능 향상 컬렉션 페이징과 한계 돌파 : V3.1 컬렉션(XToMany)은 페치 조인시 페이징이 불가능 XToOne 관계는 페치 조인으로 쿼리 수 최적화 컬렉션(XToMany)은 페치 조인 대신에 지연 로딩을 유지 hibernate.default_batch_fetch_size, @BatchSize로 in 쿼리를 사용해서 최적화 DTO 직접 조회 JPA에서 DTO를 직접 조회 : V4 컬렉션..
주문 조회 V6: JPA에서 DTO로 직접 조회, 플랫 데이터 최적화 조회 V6 OrderApiController에 추가 @GetMapping("/api/v6/orders") public List ordersV6() { return orderQueryRepository.findAllByDto_flat(); } OrderQueryRepository에 추가 public List findAllByDto_flat() { return em.createQuery( "select new jpabook.jpashop.repository.order.query.OrderFlatDto" + "(o.id, m.name, o.orderDate, d.address, o.status, i.name, oi.orderPrice, oi..
주문 조회 V5: JPA에서 DTO 직접 조회 - 컬렉션 조회 최적화 OrderApiController에 추가 @GetMapping("/api/v5/orders") public List ordersV5() { return orderQueryRepository.findAllByDto_optimization(); } OrderQueryRepository에 추가 /** * 최적화 * Query: 루트 1번, 컬렉션 1번 * 데이터를 한꺼번에 처리할 때 많이 사용하는 방식 */ public List findAllByDto_optimization() { //루트 조회(toOne 코드를 모두 한번에 조회) List result = findOrders(); //orderItem 컬렉션을 MAP을 통해 한번에 조회(루..
주문 조회 V4: JPA에서 DTO 직접 조회 OrderApiController에 추가 @GetMapping("/api/v4/orders") public List ordersV4() { return orderQueryRepository.findOrderQueryDtos(); } OrderQueryRepository package jpabook.jpashop.repository.order.query; @Repository @RequiredArgsConstructor public class OrderQueryRepository { private final EntityManager em; /** * 컬렉션은 별도로 조회 * Query: 루트 1번, 컬렉션 N 번 * 단건 조회에서 많이 사용하는 방식 */ pu..