인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

GSP님의 프로필 이미지
GSP

작성한 질문수

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

프록시

프록시 사용의 필요성

작성

·

216

0

안녕하세요 !

이번 강의를 들으면서 프록시의 필요성에 대해서 인지를 못하겠는데요 ㅠㅠ 강사님이 작성한 메서드처럼 구분하면 되는거 아닌가요..?

member의 username을 알고 싶다면 printMember메서드를 사용하면 될것이고,

멤버와 팀에 대한 정보를 얻고 싶다면

printMemberAndTeam 메서드와 같이 만들어서 사용하면 될텐데... 어떤게 낭비라는건지 잘 이해가 되지 않습니다 ㅠㅠ

답변 1

5

안녕하세요. 님, 공식 서포터즈 David입니다.
.
강의 내용을 가지고 예를 들어보겠습니다.

Member는 Team과 연관관계를 가집니다.

프록시를 사용하지 않아서 지연로딩을 사용할 수 없다면 Member를 JPA를 통해 조회할 때 연관관계인 Team까지 함께 조회됩니다.

이게 문제가 되는 이유는 Member를 조회해서 어떤 로직을 처리하려는데 Team과 전혀 관련없는 일을 할 때 발생합니다.

나는 Member만 필요한데 연관관계인 Team까지 다 불러와서 메모리에 올라와있는 것입니다.

만약 프록시를 사용하여 지연로딩이 가능해진다면 얘기는 달라집니다.

Member를 조회할 때 연관관계인 Team은 지연로딩으로 처리된다면, Member를 조회하고 Team과 전혀 관련없는 로직을 처리할 때 오로지 Team을 제외한 Member의 상태만으로 로직을 처리하게 됩니다.

이 과정에서 불필요한 Team을 불러오지 않게 되는 것이고 리소스의 낭비를 조금이라도 줄일 수 있게 되는 것이죠.

이러한 지연로딩이라는 기술을 가능케 하는게 프록시이고요.

.
감사합니다.

GSP님의 프로필 이미지
GSP
질문자

프록시를 사용하지 않아서 지연로딩을 사용할 수 없다면 Member를 JPA를 통해 조회할 때 연관관계인 Member까지 함께 조회됩니다.

=>  Member를 JPA를 통해 조회할 때 연관관계인 Team까지 함께 조회한다는 건데 오타이신거 맞으시죠..!?

이런 관계를 지연로딩의 반대 즉시로딩이라고 하는거 맞나요?

네ㅎㅎ 오타가 낫네요~

네, 즉시로딩 맞습니다.

GSP님의 프로필 이미지
GSP

작성한 질문수

질문하기