** 지연 로딩은 어떠한 상황에 사용해야 하는가? **
* MEMBER의 ID와 USERNAME 만을 조회하여 이용하고자 할때, Team 객체 조회는 필요한가?
당연하게도 Team 조회는 불필요하다.
이 경우 Member.class의 team 필드를 지연로딩(FetchType.LAZY) 설정 하면된다.
<지연 로딩 테스트 코드>
* findMember : em.find() 를 통해 생성한 객체 정보 확인
* findMember.Team 필드의 객체 정보 확인
<지연 로딩 실행 로그>
SELECT SQL 쿼리를 보면, Team 과 Member를 INNER JOIN 으로 동시에 조회 해오는 것이 아니라, Member 만 먼저 조회해 온다.
" findMember : em.find() " 의 클래스는 '실제 엔티티'
" findMember.Team 필드 " 의 클래스는 '프록시 객체' 로 생성된 것을 볼 수 있다.
※ " findMember.Team 필드 " 에게 값 조회 요청!
프록시 객체에게 값 조회 요청을 하자, 그제서야 SELECT SQL 쿼리를 통해 조회해 오는 것을 볼 수 있다.
즉시 로딩은?
=> 즉시 로딩 사용은 지양한다.
즉시 로딩은 데이터의 양이 적고, 한 객체에 다른 객체들이 많이 엮겨 있는 경우 굉장히 불리하다...
<FetchType.EAGER 설정>
<즉시 로딩이 적용되었는지 확인>
SELECT SQL 쿼리를 보면, Team 과 Member를 INNER JOIN 으로 함께 조회해 오는 것을 볼 수 있다.
" findMember : em.find() " 의 클래스는 '실제 엔티티'
" findMember.Team 필드 " 의 클래스는 '실제 엔티티' 로 생성된 것을 볼 수 있다.
즉시로딩 사용 지양!
'Spring > JPA' 카테고리의 다른 글
[JPA - 13 - JPQL] 페치 조인 (Fetch Join) (0) | 2023.12.15 |
---|---|
[JPA - 9] 프록시 (Proxy) (0) | 2023.12.05 |
[JPA - 8] 상속관계 매핑 / @MappedSuperclass (0) | 2023.12.02 |
[JPA - 7] 다양한 연관관계 매핑 (0) | 2023.12.01 |
[JPA - 6] 연관관계 매핑 (양방향 연관관계 / 연관관계의 주인 - 중점) (0) | 2023.11.26 |