성능 최적화

1. OSIV JPA에서 EntityManager가 하이버네이트 에서는 Session이라고 한다. 여기서 말하는 Session이란 사용자의 데이터를 저장해주는 곳이 아니다. 따라서 OSIV(Open Session In View) 는 하이버네이트, OEIV(Open EntityManager In View) 는 JPA에서 사용된다. OSIV는 말 그대로 영속성 컨텍스트를 뷰 까지 열어두는 기능이다. Spring.jpa.open-in.view는 기본값이 True이다. 1)True 해당 값을 True로 하게 되면 트랜젝션 시작 시점에 DB와 커넥션을 맺는 영속성 컨텍스트가 생성되고 API응답이 끝날 때까지 영속성 컨텍스트와 DB커넥션을 유지한다. 따라서 지금까지 View Template이나 API Control..
컬렉션 조회 - DTO 조회 최적화 기존 V4방식에서 1 + N번 쿼리가 나가는 것을 1 + 1번 쿼리가 나가도록 하는 것이다. In절을 이용한다. public List findAllByDto() { List result = findOrders(); List orderIds = result.stream().map(o -> o.getOrderId()).collect(Collectors.toList()); List orderItems = em.createQuery( "select new jpabook.jpabook.dto.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count) " + "from OrderItem oi " + "join oi.item ..
컬렉션 조회 - 페치조인 최적화 V2에서는 엔티티를 직접 노출하지는 않았지만 지연로딩으로 인해 SQL문이 너무 많이 나가는 문제(1 + N 쿼리)가 발생하였다. 이를 해결하기 위해 fetch join을 사용하여 V3를 만들어 보겠다. 1. 코드 Controller @GetMapping("/api/v3/orders") public List ordersV3(){ List orders = orderRepository.findAllWithItem(); List result = orders.stream() .map(o -> new OrderDto(o)) .collect(toList()); return result; } orderRepository public List findAllWithItem() { retur..
주문조회 V3 - 페치 조인 최적화 @GetMapping("/api/v3/simple-orders") public List orderV3(){ List orders = orderRepository.findAllWithMemberDelivery(); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(Collectors.toList()); return result; } 다음과 같이 작성하고 OrderRepository에 다음 코드를 추가 한다. public List findAllWithMemberDelivery() { return em.createQuery("select o from Order o" + " join fetch o...
코드 미식가
'성능 최적화' 태그의 글 목록