인프런 커뮤니티 질문&답변

Jaesang Yoon님의 프로필 이미지
Jaesang Yoon

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 1 - 기본

N+1 문제 관련 10:22초 부분 질문드립니다.

작성

·

214

0

해당 부분에서 페치 조인을 하지 않는 이상 지연로딩을 하든, 즉시로딩을 하든 N+1 문제가 발생하게 된다고 하셨는데요. 즉시로딩을 하게되면 연관된 엔티티를 한번에 가져오기 때문에 N+1 문제를 피할 수 있지 않나요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

Jaesang Yoon님, 질문하신 내용은 JPA에서 매우 중요한 개념 중 하나인 N+1 문제와 관련이 깊습니다. N+1 문제는 데이터베이스로부터 연관된 객체를 조회할 때 발생하는 성능 문제를 말합니다. 이는 쿼리 한 번으로 N개의 결과를 얻은 후, 각 결과에 대해 추가적인 쿼리를 수행해야 하는 상황을 가리킵니다.

Jaesang Yoon님이 언급하신 내용에 대해, 즉시 로딩(EAGER)이라고 해서 항상 N+1 문제가 해결되는 것은 아닙니다. 즉시 로딩은 연관된 엔터티를 최초 쿼리 시 함께 로드하는 방식인데, 이는 많은 경우 예상치 못한 별도의 SQL 쿼리를 발생시킬 수 있습니다. 특히, 많은 연관관계가 있는 복잡한 객체 그래프를 조회할 때는 더욱더 주의가 필요합니다.

해당 주제와 관련하여, “N+1의 문제와 LAZY, EAGER”라는 질문 (N+1의 문제와 LAZY, EAGER) 에서 해당 내용이 다루어진 바 있습니다. 이 질문에서는 지연 로딩(LAZY)과 즉시 로딩(EAGER) 모두 N+1 문제의 위험이 있다는 점을 다루고 있으며, 특히 즉시 로딩이 항상 N+1 문제를 해결하는 것이 아니라, 상황에 따라 오히려 더 많은 쿼리를 발생시킬 수도 있다는 점을 강조합니다.

페치 조인은 쿼리 시점에 연관된 엔터티를 함께 조회하여 N+1 문제를 해결할 수 있는 방안 중 하나입니다. 이는 조회하는 쿼리 내에서 명시적으로 연관 엔터티를 함께 가져오도록 하여, 추가적인 쿼리 발생 없이 필요한 모든 데이터를 한 번의 쿼리로 가져올 수 있게 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Jaesang Yoon님의 프로필 이미지
Jaesang Yoon

작성한 질문수

질문하기