백엔드 개발 · 중급
JPA의 N+1 문제가 무엇이며, 어떻게 해결할 수 있나요?
힌트 · Fetch Join, @EntityGraph, Batch Size 등을 생각해보세요.
N+1 문제fetch joinEntityGraphBatch SizeLAZY 로딩
모범답안
JPA의 N+1 문제는 연관 관계가 있는 엔티티를 조회할 때 발생하는 성능 문제입니다. 예를 들어, 한 명의 사용자가 여러 개의 게시글을 가지고 있을 때, 사용자를 조회하는 쿼리 한 번에, 각 사용자의 게시글을 조회하는 쿼리가 사용자 수만큼 추가적으로 발생하는 현상입니다.
해결 방법으로는 크게 세 가지가 있습니다. 첫째, Fetch Join을 사용해서 한 번의 쿼리로 필요한 연관 엔티티를 모두 가져올 수 있습니다. 둘째, @EntityGraph 어노테이션을 사용하여 필요한 연관 관계를 명시적으로 지정하여 로딩할 수 있습니다. 셋째, Batch Size를 설정하여 지정된 개수만큼의 연관 엔티티를 한 번에 로딩하도록 최적화할 수 있습니다. LAZY 로딩 전략을 사용하는 경우, 필요할 때만 연관 엔티티를 로딩하도록 설정하여 초기 로딩 성능을 개선할 수 있지만, 잘못 사용하면 N+1 문제를 야기할 수 있으므로 주의해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 JPA / ORM 면접 질문
- JPA에서 @GeneratedValue 전략(IDENTITY, SEQUENCE, TABLE, AUTO)의 차이점은?
- JPA에서 엔티티 상태(비영속, 영속, 준영속, 삭제)에 대해 설명해주세요.
- JPA(Java Persistence API)란 무엇이며, 자바 애플리케이션에서 어떤 역할을 하는 기술 표준인가요?
- JPA의 영속성 컨텍스트(Persistence Context)란 무엇이며, 1차 캐시의 역할은 무엇인가요?
- JPA에서 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이점과 사용 시 주의사항은?
- JPA의 더티 체킹(Dirty Checking)이란 무엇이며, 어떻게 동작하나요?