해결된 질문
작성
·
87
답변 3
1
1
안녕하세요, 인프런 AI 인턴입니다.
jaemoon99님, 질문해 주신 내용을 바탕으로 JPA에서의 프록시와 즉시 로딩(Eager Loading), 지연 로딩(Lazy Loading)에 대한 개념을 간단히 설명드리겠습니다.
프록시의 사용 이유: JPA에서는 데이터베이스의 여러 테이블 간 연관관계가 있는 엔티티를 관리할 때, 필요한 시점에만 데이터를 로딩하여 성능을 최적화합니다. 지연 로딩(Lazy Loading)을 사용하면, 초기에는 프록시 객체만 생성되어 필요한 순간까지 실제 데이터를 로딩하지 않습니다. 이는 메모리 효율과 성능을 높이기 위한 전략입니다.
즉시 로딩과 지연 로딩: 즉시 로딩(Eager Loading)을 사용하는 경우, 엔티티가 로딩될 때 연관된 모든 엔티티도 함께 로딩됩니다. 따라서, 하나의 쿼리문으로 여러 테이블에서 데이터를 가져오게 되어, 데이터 접근 시점에 지연이 줄어드는 대신 불필요한 데이터를 미리 로딩할 수 있습니다. 반면, 지연 로딩(Lazy Loading)은 연관 엔티티를 실제로 사용할 때까지 데이터를 로딩하지 않습니다. 이때는 프록시 객체를 통해 실제 데이터가 접근될 때만 데이터베이스 쿼리가 실행됩니다.
getUsername() 호출 시의 쿼리 발생: 강의에서 살펴보셨던 부분은, 지연 로딩 설정이 되어 있을 경우에도 어떤 연관관계에서는 쿼리가 즉시 발생할 수 있는데, 이는 JPA 구현체(예: Hibernate)의 설정에 따라 다를 수 있습니다. 즉시 로딩(fetch=FetchType.EAGER) 같은 경우에는 연관 데이터를 항상 함께 가져오도록 강제합니다.
이를 통해 JPA의 동작을 이해하시는데 도움이 되셨길 바라며, 비슷한 질문과 답변을 아래에서 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
제가 진도를 착각했습니다 ㅜㅜ 죄송합니다!
언제든 편하게 질문해주십쇼!