강의

멘토링

로드맵

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

신나는 라이언님의 프로필 이미지
신나는 라이언

작성한 질문수

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

5-4. JPA 와 N+1 문제 - 대표적인 사례

@EntityGraph와 fetch join 질문드립니다!

작성

·

10

·

수정됨

0

5-4 강의에서 질문 있습니다!

@EntityGraph 설명해주실 때 Fetch Join의 한계점이 동일하게 적용된다고 하셨는데, 찾아보니까 항상 조인을 강제하지 않는다는 점에서도 그렇고 그에 따라 페이징이 가능하다는 점에서도 그렇고 차이가 있는거 같아서 혼란이 와서 질문드립니다.

fetch join과는 다르게 보는게 맞지 않을까요..?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 신나는 라이언님.

@EntityGraph와 fetch join에 대한 질문을 주셨네요. 이 두 가지는 JPA에서 연관된 엔티티를 로딩하는 데 주로 사용되는 기능입니다. 각각의 사용 사례와 제한사항이 있기 때문에 이를 정확히 이해하는 것이 중요합니다.

@EntityGraph와 Fetch Join의 차이점 및 한계점:

  1. Fetch Join:

    • 모든 연관된 엔티티를 한 번의 쿼리로 불러오는 장점이 있습니다. 그러나 관련된 엔티티가 많으면 결과적으로 많은 데이터를 메모리에 로드하게 되어 성능에 영향을 미칠 수 있습니다.
    • JPA에서 페이징 기능 사용 시, Fetch Join은 결과적인 데이터양과 기준이 되는 데이터양의 불일치로 인해 제대로 작동하지 않을 수 있습니다.
  2. @EntityGraph:

    • 페치 전략을 명시적으로 설정하여 연관된 엔티티를 로드하도록 합니다.
    • 엔티티 그래프 사용의 장점 중 하나는 페이징이 가능하다는 것입니다. 이는 엔티티 그래프가 내부적으로 두 개의 쿼리를 사용하기 때문입니다. 첫 번째는 기본 엔티티에 대한 쿼리, 두 번째는 연관 엔티티에 대한 것 입니다.
    • 그러나 페치 전략이 복잡하고, 올바르게 설정되지 않으면 성능에 문제를 야기할 수 있다는 점은 Fetch Join과 비슷한 한계점입니다.

이를 이해하신 후, 각 방법이 적절히 사용되는 사례를 기억하고 있다면 어디에 적용할지를 판단할 때 도움이 됩니다.

자세한 설명과 기존의 토론을 살펴보고 도움이 될 수 있는 링크를 찾았습니다:

링크를 통해 실무에서의 사용 예시와 적용 방법에 대한 추가적인 이해를 얻길 바랍니다.

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

신나는 라이언님의 프로필 이미지
신나는 라이언

작성한 질문수

질문하기