JPA에서 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이점과 사용 시 주의사항은?
힌트 · 성능과 프록시 객체의 관점에서 설명해보세요.
모범답안
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(Java Persistence API)란 무엇이며, 자바 애플리케이션에서 어떤 역할을 하는 기술 표준인가요?
- JPA의 N+1 문제가 무엇이며, 어떻게 해결할 수 있나요?
- JPA의 영속성 컨텍스트(Persistence Context)란 무엇이며, 1차 캐시의 역할은 무엇인가요?
- JPA의 더티 체킹(Dirty Checking)이란 무엇이며, 어떻게 동작하나요?
- JPA의 @ManyToOne, @OneToMany 관계에서 양방향 매핑 시 주의사항은 무엇인가요?
- JPQL과 QueryDSL의 차이점과 각각의 장단점에 대해 설명해주세요.