• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

V1, V2 실행 시 OrderItem 차이

22.09.16 22:08 작성 조회수 191

0

안녕하세요.

이전 강의에서 만든 v1 API와 이번 강의에서 만든 v2 API를 각각 호출해보면, 실행된 쿼리에 차이가 있는데요~

v1에서는 order_items 테이블을 N번(2번) 조회하고, v2에서는 조회하지 않습니다. 이 차이가 왜 발생하는지 궁금합니다.

Order의 List<OrderItem> @OneToMany 매핑 시 cascade 설정을 해두었고,
v1은 Order 조회 및 lazy loading 강제 초기화 이후에 orders가 그대로 응답으로 나가는 과정에서 order_items 테이블이 조회된 걸까요?

그렇다면 v2는 응답으로 사용하는 SimpleOrderDto를 생성할 때 order.orderItems를 불러오지 않기 때문에 order_items의 데이터가 필요하지 않아서 조회 쿼리가 발생하지 않은 거라고 보면 될까요?

 

코드는 아래와 같습니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2022.09.17

안녕하세요. 장환호님, 공식 서포터즈 y2gcoder입니다.

v1과 v2의 차이는 엔티티를 그대로 부르냐, DTO에 필요한 값만 부르냐의 차이에 집중을 해주고 있는데요,

사실 v1에서는 Hibernate5Module에서 해준 설정 때문에 프록시들이 강제로 초기화되고 있습니다.

image

이 설정으로 인해 json으로 로딩할 때 지연 로딩된 프록시 객체들을 강제로 초기화해서 값을 뿌려주기 때문에 v1에서는 orderitems도 초기화되어 조회 SQL이 날아간 것으로 보입니다. 전 강의 부분인 간단한 주문 조회 V1: 엔티티를 직접 노출 의 16분 경 후부터 설명을 해주고 계시죠. :)

그리고 v2에서 simpleOrderDto 에서는 말씀하신 것처럼 DTO에서 orderItems 를 부르는 게 없기 때문에 관련한 조회 SQL이 나가지 않고 있습니다.


감사합니다.