V1, V2 실행 시 OrderItem 차이
안녕하세요.
이전 강의에서 만든 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입니다.
v1과 v2의 차이는 엔티티를 그대로 부르냐, DTO에 필요한 값만 부르냐의 차이에 집중을 해주고 있는데요,
사실 v1에서는 Hibernate5Module에서 해준 설정 때문에 프록시들이 강제로 초기화되고 있습니다.

이 설정으로 인해 json으로 로딩할 때 지연 로딩된 프록시 객체들을 강제로 초기화해서 값을 뿌려주기 때문에 v1에서는 orderitems도 초기화되어 조회 SQL이 날아간 것으로 보입니다. 전 강의 부분인 간단한 주문 조회 V1: 엔티티를 직접 노출 의 16분 경 후부터 설명을 해주고 계시죠. :)
그리고 v2에서 simpleOrderDto 에서는 말씀하신 것처럼 DTO에서 orderItems 를 부르는 게 없기 때문에 관련한 조회 SQL이 나가지 않고 있습니다.
감사합니다.
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
34
2
강의 관련 외 질문입니다.
0
91
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
114
1
BeanCreationException
0
105
3
Update 후 UpdateMemberResponse 매핑할 때
0
66
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
113
2
페이징 + 검색조건 관련해서 질문드립니다.
0
79
1
Query Dsl Q파일 질문입니다.
0
93
1
루트 쿼리라는것은
0
69
1
메서드를 분리하는 기준
0
77
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
126
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
98
2
fetch join과 영속화와 OSIV의 관계
0
104
2
Distinct 사용 전 결과에 대한 의문
0
126
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
65
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
86
2
dto 필드 속 엔티티 여부
0
71
1
뷰템플릿 사용 시
0
88
2
Result 클래스 관련 질문
0
60
1
@PostConstruct 프록시 관련 질문드립니다
0
91
1
DTO 대신 Form 사용은 안되나요?
0
144
1
OSIV ON 상태일 때
0
102
1
fetch join VS fetch join 페이징 궁금증
0
196
2
양방향 연관관계 알아보는 법?
0
113
1





