본문 바로가기

Programming/프로그래밍 내용 정리

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

 

 

 

위 내용대로 엔티티를 작성하면 다음과 같다. 

 

[ Member.class ]

 

[ Team.class ] 

 

Team과 Member는 양방향 연관관계이고, 

연관관계의 주인은 Member이다.

 


🎈 예제코드

 

위 예제는 Team 객체와 Member 객체를 각각 만들고

Member 객체의 Setter 메소드를 통해 Team 객체를 셋팅해준 뒤

em.find() 메소드를 통해 Member를 조회한다.

 

여기서 중요한 점은 Member를 조회했다는 점이다. 

 

 


👉🏻 FetchType이 EAGER 일 때 쿼리

Member를 조회했는데 Team까지 join되어 쿼리가 나간 것을 볼 수 있다.

 

 

 

👉🏻 FetchType이 LAZY 일 때 쿼리

Member만 조회해온 것을 볼 수 있다.

 

EAGER는 사전적 의미인 열심인, 열렬한 처럼 

Member를 조회하면 연관관계에 있는 Team 역시 함께 조회해 온다.

 

LAZY는 게을러서 Member만 조회해오고 연관관계에 있는 나머지 데이터는 조회를 미룬다.

 


 

그렇다면 어떤 상황에 EAGER를 또는 LAZY 로딩을 사용해야 할까?


비지니스 로직 상 Member 데이터가 필요한 곳에 대부분 Team의 데이터가 필요하다면 

FetchType을 EAGER로 설정하여 항상 Member와 Team을 같이 조회해오는 것이 더 좋을 것이다.

Member를 사용하는 곳 대부분에서 Team 데이터가 필요하지 않다면? 

FetchType을 LAZY로 설정하여 Member만 조회하고, 

Team이 필요할 때는 Team에 대한 쿼리를 한번 더 날려 조회하는것이 좋을 것이다.