코딩과 결혼합니다

[JPA] 지연 로딩과 조회 성능 최적화(3) 본문

2세/JPA

[JPA] 지연 로딩과 조회 성능 최적화(3)

코딩러버 2024. 2. 24. 12:52
728x90

https://coding-s2-chaewon.tistory.com/253

 

[JPA] 지연 로딩과 조회 성능 최적화(2)

https://coding-s2-chaewon.tistory.com/252 [JPA] 지연 로딩과 조회 성능 최적화(1) 등록이나 수정 등은 데이터 한 건을 다루는 것이기 때문에 거의 성능 문제가 발생하지 않는다. 주로 조회하는 데에 문제가

coding-s2-chaewon.tistory.com


@GetMapping("/api/v4/simple-orders")
public List<OrderSimpleQueryDto> ordersV4() {
    return orderSimpleQueryRepository.findOrderDtos();
}

JPA에서 DTO로 바로 조회하는 방법이다.

 

이전의 fetch join을 사용한 것 처럼 쿼리 1번에 호출한다.

@Repository
@RequiredArgsConstructor
public class OrderSimpleQueryRepository {

    private final EntityManager em;

    public List<OrderSimpleQueryDto> findOrderDtos() {
        return em.createQuery(
                "select new jpabook.jpashop.repository.order.simplequery.OrderSimpleQueryDto(o.id, m.name, o.orderDate, o.status, d.address) " +
                        " from Order o" +
                        " join o.member m" +
                        " join o.delivery d", OrderSimpleQueryDto.class
        ).getResultList();
    }
}
  • new 명령어를 사용해서 JPAL 의 결과를 DTO로 즉시 변환
  • select 절에서 원하는 데이터만 선택해서 조회한다.

재사용성

깔끔하게 내가 원하는 데이터만 얻을 수 있지만 리포지토리 재사용성이 떨어진다는 단점이있다.

API 스펙에 맞춘 코드가 리포지토리에 들어가기 때문이다.


엔티티를 DTO로 변환하거나, DTO로 바로 조회하는 두가지 방법의 장단점을 이해하고, 상황에 따라 더 나은 방법을 선택하면 된다.