작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
50
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
JPA에서 회원과 팀 엔티티를 조회할 때 발생하는 쿼리에 대한 질문을 주셨네요. 현재 발생하는 동작을 분석해 보면, JPQL을 사용하여 회원을 조회하고 있는데, 기대했던 것과 달리 teamB
관련 쿼리가 발생하지 않는 점이 혼란스러우신 것 같습니다. 이런 현상은 JPA의 영속성 컨텍스트와 연관 관계와 관련이 있는데요.
영속성 컨텍스트: JPA에서는 엔티티를 조회하거나 영속성 컨텍스트에 올라가지 않은 경우, 지연 로딩(Lazy Loading)을 통해 데이터를 가져오려고 시도합니다. 따라서 데이터가 실제로 필요한 시점까지 쿼리가 지연될 수 있습니다.
N+1 문제: 본 예제에서는 for
루프를 통해 영속성 컨텍스트에 로딩된 데이터를 순회하면서 연관된 데이터(팀)를 접근하고 있습니다. Hibernate는 처음에 필요한 모든 팀 정보를 조회할 수 있도록 쿼리를 최적화할 수 있습니다.
현재 실행하고 있는 쿼리의 쿼리 로그를 활성화하여 실제로 어떤 쿼리가 전송되는지 확인하는 것이 가장 좋은 방법입니다. 또한, 페치 조인(Fetch Join
)을 명시적으로 사용해 모든 연관된 엔티티를 미리 불러올 수도 있습니다.
페치 조인과 관련된 예시나 다른 사용자들이 겪었던 유사한 문제를 다룬 질문들 역시 확인해 볼 수 있습니다:
이 질문 링크들을 참고하시면 페치 조인과 일반 조인의 차이를 이해하는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 유사한 질문들의 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.