본문 바로가기
JPA

[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY)의 차이점?

by 반오십 코린이 2023. 2. 19.
728x90
팀프로젝트 ERD 캡쳐본이다.

 

 

여기서 real_estate와 member 사이의 관계를 주목해보자.

둘 사이의 관계는 N:1 관계이다.

 

다음은 real_estate의 코드이다.


 

 

Real_estate와 member 사이의 관계는 N:1이기 때문에 Real_estate 입장에선 @ManytoOne 관계가 맞다.

그리고 추가적으로 입력하는 fetch = FetchType.LAZY 라는 정보는 어떤 의미일까?

 

LAZY 속성을 사용하게 되면 EntityManager에 있는 member 값을 조회하려 할 때 오직 member만 조회된다.


그렇다면 EAGER 속성을 사용하면 어떻게 될까?

 

EntityManager에 있는 member을 조회하려 할 때 member와 연관 관계가 있는 테이블이 모두 조회가 된다.

즉, 위의 경우에선 real_estate까지 join 되어 불러오게 된다는 것이다.

 


그렇다면 LAZY를 사용하는 것이 맞나요?

 

어떤 의도로 구현하려 하느냐에 따라 다르겠지만 테이블 하나를 조회할 때 매핑 되어있는 테이블들을 함께 조회하고 싶다

→ EAGER 사용

 

아니다. 나는 하나의 테이블만을 조회하고 싶다.

→ LAZY 사용

 

보통 LAZY를 사용하라고 권고하는 이유는 불러오고 하는 과정에서 데이터 낭비가 존재하기에 

 

728x90