김영한님 JPA 강의를 들으며 알게된 정보 - 지연 로딩 & 즉시 로딩

2024. 5. 13. 18:59강의/자바 ORM 표준 JPA 프로그래밍

JPA는 지연 로딩과 즉시 로딩을 둘 다 지원한다.

지연 로딩과 즉시 로딩에 대해 알아보자.

지연 로딩과 즉시 로딩

해당 자료로 간단하게 설명을 해보겠다.

MEMBER와 TEAM이 있다. MEMBER와 TEAM은 연관관계가 있고, 어떨 때는 MEMBER만 쓰이고 어떨 때는 MEMBER와 TEAM이 같이 사용 될 경우가 있다.

 

만약 로직을 짤 때 MEMBER를 조회 할 때 항상 TEAM이 같이 사용이 된다면? TEAM의 사용 빈도가 올라가게 되므로 즉시 로딩으로 한번에 MEMBER를 조회할 때 TEAM을 같이 조회하는 것이다. 그렇게 된다면 네트워크 통신이 줄고 DB 간에 이동도 줄일 수 있다고 한다.

 

하지만 MEMBER 조회할 때 TEAM을 사용하는 빈도가 매우 적다면 MEMBER만 조회하는게 성능이 좋을 것이다. 그러므로 지연 로딩을 사용하여서 MEMBER만 사용하도록 MEMBER만 가져오고 연관된 TEAM 정보를 가져오지 않게 해서 불필요한 동작을 줄여 성능 개선이 될 것이다.

 

그림에서 보이듯이 memberId로 member를 조회 했고 그 다음으로 team을 조회하고 team이름을 조회하는 코드이다.

코드 상으로는 같은 동작으로 보이지만 지연 로딩과 즉시 로딩의 동작 방식은 다르다.

 

지연 로딩

실제로 객체가 사용이 될 때 로딩이 되어 SQL문을 보면 MEMBER에 대해서만 조회가 되고, 그 다음으로 team 정보를 조회 할 때 TEAM에 대해서 조회를 한다.                   

요약 -> 실제로 해당 정보가 필요할 때 해당 객체의 정보를 가져 옴.

즉시 로딩

실제로 연관된 객체가 사용이 되지 않더라도 연관된 객체 정보를 조회하는 것이다. SQL문을 보면 처음부터 MEMBER와 TEAM의 JOIN문으로 쿼리가 나가게 되는 것을 볼 수 있다.

요약 -> 실제로 사용할 객체 정보와 연관된 객체의 정보까지 가져 옴.

 

 

지연 로딩 VS 즉시 로딩

지연 로딩이 더 좋냐 즉시 로딩이 더 좋냐 라기보다는 어떤 상황에서 어떤 로딩을 사용해 성능 개선을 해야할지 고민을 하는 것이 좋다.

강의에서는 보통 JPA 개발 때는 모두 지연 로딩으로 세팅을 해 놓은 후, 성능을 보고 어느 부분은 즉시 로딩으로 하는 것이 좋을 것 같다 하면 그 때 즉시 로딩을 사용해 최적화를 하면 된다고 했다. 

 

 

강의 참조