ABAP DUMP ERROR 24시

JPA Proxy가 뭐야? 왜 사용해? 본문

[WEB]Back-end/JPA

JPA Proxy가 뭐야? 왜 사용해?

이운형 2022. 1. 13. 17:38
반응형

# 인프런 김영한의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 개인적으로 정리한 글입니다.

 

정리


1. Proxy가 뭐야?

=> Entity의 틀을 갖고 있지만 내용이 없는 중간 단계의 역할을 하는 것. = 비서역할

 

2. Proxy 왜 사용해?

=> 성능을 최적화 하기 위해서 사용한다.

 

3. Proxy 어떻게 최적화해?

=> Lazy loading 과 proxy의 사용으로 해결한다, 다음 chapter

 

 

살펴보기


 

1. Proxy가 뭐야?

 

1. 클라이언트가 Member의 Name을 찾아달라고 한다. //거래처 직원이 결제서류를 들고 찾아왔다, 사장님께 전달해달라고한다.

 

2. 프록시는 Member 라는 엔티티와 겉은 같지만 속이빈 Proxy 객체를 생성한다. //비서가 요청사항을 접수한다.

Member_Proxy //비서
Member target(변수들 있는곳) // 결제 서류
getName()// 사장님께 전달해주세요.

 

3. 영속성 컨텍스트에 초기화 요청을 한다. //관련 부서에게 결제 서류 내용을 검수 요청을 한다.

=>  Proxy에 값을 넣기위해 영속성 컨텍스트한테 부탁하는 과정. 

 

4. 영속성 컨텍스트는 Proxy의 명령을 받아 DB를 조회한다. // 관련 부서는 검토를 진행한다.

 

5. 실제 Entity가 생성이 된다. // 사장님이 최종 서류를 받고 비서에게 계약하라고 말한다. 

 

6. Proxy에 들어간 target을 통해  Member의 Name이 반환이 된다. // 비서는 거래처 직원에게 계약한다고 전한다.

 

 

 

2.Proxy 왜 사용해?

 

예시)

Member 엔티티를 조회 할때 team 클래스도 함께 조회를 해야할까요?

정답은 No! 상황에 따라 달라. 필요할때도 필요 없을 때도 있다.

// 일부 회원 점수만 필요한데 부서 전체 내용까지 가져올 필요가 있을까? == 상황에 따라 다르지!

 

일반 적인  Code 에서 

public class Member extends BaseEntity {

    @Id@GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")
    private Long id;
    
    @OneToMany
    @JoinColumn(name = "team_id")
    private Team team;

 

Member 안에 Team 이 있는 경우  Member 객체를 불러오면 team의 내용까지 inner join해서 가져오게 된다!

만약에 team 정보가 필요한 경우라면 가져다 쓰면 되지만 필요하지 않을 경우에는 가져올 필요가 없지!

낭비 == 성능 하락 == 최적화의 필요.

 

 

반응형
Comments