패스잇
백엔드 개발 · 중급

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 / ORM 면접 질문 전체 보기