패스잇
백엔드 개발 · 중급

JPA에서 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이점과 사용 시 주의사항은?

힌트 · 성능과 프록시 객체의 관점에서 설명해보세요.

지연 로딩즉시 로딩N+1 문제성능FetchType

모범답안

JPA에서 지연 로딩과 즉시 로딩은 연관된 엔티티를 언제 데이터베이스에서 가져올지 결정하는 방식입니다.

지연 로딩(Lazy Loading)은 연관된 엔티티가 실제로 사용될 때까지 로딩을 미룹니다. 예를 들어, Member 엔티티를 조회할 때 Team 엔티티는 프록시 객체로만 존재하고, team.getName()처럼 실제 Team 데이터에 접근할 때 데이터베이스에서 가져옵니다. 장점은 초기 조회 성능을 향상시킬 수 있다는 것이지만, 필요할 때마다 쿼리가 실행되어 N+1 문제를 야기할 수 있습니다.

즉시 로딩(Eager Loading)은 엔티티를 조회할 때 연관된 엔티티까지 한 번에 가져옵니다. Member 엔티티를 조회할 때 Team 엔티티도 함께 로딩되는 것이죠. 장점은 한 번에 필요한 데이터를 모두 가져오므로 N+1 문제를 방지할 수 있지만, 사용하지 않는 연관 엔티티까지 로딩하여 초기 조회 성능을 저하시킬 수 있습니다.

사용 시 주의사항은 다음과 같습니다. 지연 로딩은 N+1 문제를 주의해야 하며, 필요한 경우 Fetch Join을 사용하여 해결할 수 있습니다. 즉시 로딩은 예상치 못한 연관 엔티티까지 로딩될 수 있으므로, 정말 필요한 경우에만 사용하는 것이 좋습니다. 상황에 따라 적절한 로딩 전략을 선택하고, 성능 테스트를 통해 최적의 방법을 찾는 것이 중요합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 JPA / ORM 면접 질문

← JPA / ORM 면접 질문 전체 보기