JPA 책의 LAZY + JPQL 질문입니다.
302
작성한 질문수 11
좋은 강의 감사합니다.
연관관계 fetch Type을 LAZY로 설정하고, JPQL을 이용해 하나의 엔티티만 조회하도록 하면, 실제로 연관 대상 엔티티를 사용하기 전까지는, query가 발생하지 않는 것으로 이해를 했는데, 다음과 같은 현상이 발생하는데 잘 이해가 가질 않습니다 도와주세요.. ㅠ


답변 3
1
안녕하세요. galid님
먼저 Team을 쿼리하는 부분이 어디인지 찾아야 합니다.
Member를 쿼리로 조회하는 시점인지 아니면 어디인지 찾는 것이 필요합니다.
이 부분을 먼저 다양한 곳에 로그를 남겨서 확인해주세요.
감사합니다.
0
바쁘실텐데 빠른 답변 감사드립니다.
테스트용으로 만든것이라 다음과 같이 하나의 API만 만들어져있고, 테스트하고 싶은 부분만 코드가 작성되어 있는 상태입니다.


계속해서 아래와 같이 N+1이 발생합니다 ㅠ
1
안녕하세요 . galid님
답변에서 말씀드린 것 처럼 어디에서 N+1이 발생하는지 그 위치를 찾아야 합니다.
먼저 다양한 곳에 로그를 남겨서 추정되는 부분을 찾아주세요.
예를 들어서 조회하는 시점인지 테스트 코드에서 발생하는지 등등 확인이 필요합니다.
0
답변 감사합니다. 제 코드 자체가 너무 간단해서 질문을 잘 이해하지 못하겠습니다 ㅠ
JPQL로 member만을 조회하는 api 단 하나 밖에 없으며, 해당 API를 호출하는 시점에 N+1 쿼리가 발생합니다. (위의 첨부된 사진이 작성한 코드의 전부입니다.)
1
JPQL을 조회하는 시점에 발생하는지, 아니면 JPQL을 조회하고 컨트롤러에서 데이터를 반환한 다음에 발생하는지 이 포인트를 찾아야 합니다.
JPQL 조회 직전에 추가 로그
JPQL 조회 직후에 추가 로그
컨트롤러 데이터 반환 직전에 추가 로그를 남겨서 실행해보시겠어요?
0
바쁘실텐데 항상 답변 감사합니다.
1. JPQL 쿼리 직전, 직후
2. Controller에서 반환 직전
둘다 쿼리로그를 찍어보았습니다
위 그림처럼 쿼리와 동시에 N+1이 발생하는것 처럼 보입니다 ㅠ
(service 계층에서 jpql을 단순히 호출만 하고 반환하는 코드는 없으며, controller 계층에서도 jpql호출 메소드만 호출하며 데이터를 조회하거나, 별도로 만들어서 응답하는 코드가 일절 없는 상태입니다)
0
같은 문제에 대한 질문이 google에 이미 있었네요.. 찾아봤어야 했는데 Java와의 차이점일거라고는 생각을 미처 못했습니다.
Kotlin에 대해서 더욱 깊이있게 공부를 해야할 것 같습니다 감사합니다. !!
https://stackoverflow.com/questions/67130567/why-hibernate-lazy-loading-acts-different-in-kotlin
https://wave1994.tistory.com/154
0
안녕하세요. galid님
어떤 문제가 있는지 지금 상태로는 알기가 어렵네요. 결국 코드를 받아보아야 답을 드릴 수 있을 것 같아요.
제가 코틀린을 사용하지 않아서, 프로젝트를 자바로 새로 작성하신 다음에 구글 드라이브로 공유부탁드립니다.
구글 드라이브 사용방법은 다음을 참고해주세요.
감사합니다.
0
Java로 구현하고 테스트를 해보니 kotlin과 똑같이 구현했는데 java에서는 N+1문제가 발생하지 않네요 .. ㅠ
항상 정성스런 답변 감사드립니다.
JAVA 구현 링크입니다.
https://drive.google.com/file/d/1YgVuFbVn_eEdb6ITwx2QrGNWnzqJfpqe/view?usp=sharing
Kotlin 구현 링크입니다.
https://drive.google.com/file/d/1aIzzrsMW3Tab71MSMZW3xEUYLrXVxDgz/view?usp=sharing
강의 관련 외 질문입니다.
0
77
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
96
1
BeanCreationException
0
95
3
Update 후 UpdateMemberResponse 매핑할 때
0
54
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
102
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
70
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
115
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
91
2
fetch join과 영속화와 OSIV의 관계
0
90
2
Distinct 사용 전 결과에 대한 의문
0
117
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
61
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
62
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
87
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
189
2
양방향 연관관계 알아보는 법?
0
108
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2





