페치조인 최적화

학습 페이지

저번시간에 굉장한 수의 쿼리가 날아가던 현상을 페치조인으로 해결해보자…

아래는 예전에 배웠던 내용임…

image.png

먼저 리포지토리에 다음의 메서드를 만들자.

   public List<Order> findAllWithMemberDelivery() {

        }

그리고 다음과같은 jpql을 짜준다.

fetch조인

        public List<Order> findAllWithMemberDelivery() {
        return em.createQuery(
                "select o from Order o" +
                        " join fetch o.member m" +
                        " join fetch o.delivery d", Order.class
        ).getResultList();

이는 member, delivery등을 join한 후에 한번에 다 select하는 방식임.

이 경우에는 지연로딩도 다 무시하고 값을 한번에 다 가져온다…

그리고 위의 메서드를 이용해 API에서 같은 로직을 작성해주면 된다.

    @GetMapping("/api/v3/simple-orders")
    public List<SimpleOrderDto> ordersV3() {
        List<Order> orders = orderRepository.findAllWithMemberDelivery();
        return orders.stream().map(SimpleOrderDto::new).collect(Collectors.toList());
    }

페치조인은 JPA에서 너무나 자주쓰이고, 그리고 반드시 필수적으로 쓰여야 하기 때문에 100%이해해야 한다.

페치 조인(fetch join)이란?