인프런 커뮤니티 질문&답변

명아주님의 프로필 이미지
명아주

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

실전 예제 5 - 연관관계 관리

OneToOne 연관관계 주인아닌 테이블에서 LAZY 로딩 관련 질문

해결된 질문

작성

·

275

0

[질문 내용]
안녕하세요! 강의 들으면서 열심히 배우고 있습니다!
이번에 질문드리는 부분은 저번 강의의 프록시의 한계(?)와 관련된 질문입니다.
OneToOne 관계에서 연관관계 주인이 아닌 테이블에서 LAZY로딩을 하더라도 프록시의 한계로 인해 쿼리가 두번나가는 것을 배웠었습니다.
 
거의 모든 경우에 대해 LAZY를 설정하는데, 이렇게 OneToOne 연관관계주인이 아닌 테이블에서는 LAZY를 설정하는게 오히려 성능 하락을 불러일으킬것 같다는 생각이 들어서 질문드립니다.
 
실제 이번 강의에서 Delivery 엔티티에서 Order를 LAZY 로딩 적용해주셨는데 임시로 DeliveryStatus는 주석처리 해놓고 Delivery를 em.find 로 조회해보면 쿼리가 두번 나가는 것을 확인했습니다.(저번 강의에서 말씀해주신 프록시의 한계)
 
그래서 아직 짧은 제 식견으로는 이런 경우엔 EAGER를 하는게 오히려 성능상 좋지 않을까? 라는 생각을 했는데요.
 
실무적인 관점에서 어떤식으로 푸시는지 궁금합니다!
 
감사합니다.
명아주 드림

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 명아주님

말씀하신 것 처럼 OneToOne에서 LAZY를 사용할 수 없는 경우에는 EAGER를 사용한다고 해서 더 나빠지는 것은 없을 것 같네요.

혹시 관련해서 다른 생각이 있으신 분들은 답변 부탁드립니다.

감사합니다.

명아주님의 프로필 이미지
명아주
질문자

답변 감사합니다!

JPQL 로 리스트 조회했을땐 어떻게 되는지 확인해보고 추가 댓글 달겠습니다!

감사합니다.

명아주님의 프로필 이미지
명아주
질문자

JPQL 로 리스트를 조회했을 때도 마찬가지로 프록시의 한계를 피할 수 없었습니다.

리스트 조회 시, join fetch를 사용하는게 N+1 이슈를 피할 수 있는 방법인것 같습니다.

혹은, 아예 mappedBy를 생략하고 쓰게되면 LAZY로도 동작이 가능했습니다.

명아주님의 프로필 이미지
명아주

작성한 질문수

질문하기