[JPA]proxy객체와 호출시기

RisingJade의 개발기록·2022년 2월 17일
1
post-thumbnail

프록시란?

JPA 구현체들은 객체들 처음부터 데이터베이스에서 꺼내서 조회하는 것이 아니다. 이렇게 하면 실제 사용 할때 너무 많은 쓸모 없는 접근이 발생 할 수 있다.

따라서, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 이와 관련 된 기술이 프록시 인데, 이 프록시를 통해서 즉시로딩 ( EAGER ) 과 지연로딩 ( LAZY ) 을 할 수 있다.

"JPA 표준 명세는 지연 로딩 구현방법을 JPA 구현체에 위임했다. 하이버네이트는 지연 로딩을 지원하기 위해 프록시를 사용하는 방법과 바이트코드를 수정하는 두 가지 방법을 제공하는데 바이트코드를 수정하는 방법은 복잡하다."

  • 프록시 객체는 entity를 참조하며, repository.findById(id)를 불렀을때 혹은 EntityManager.find()을 불렀을 때 해당 Entity를 기반으로 확장되어 만들어 진다. 실제로 Entity를 만드는 타이밍은 XXX.getName()과 같은 호출로 실제 데이터가 필요해 질때 Entity가 생성된다.

  • tip: 엔티티를 프록시로 조회할 때 식별자 ( PK ) 값을 파라미터로 전달하는데 프록시 객체는 이 식별자 값을 보관한다. 프록시 객체는 식별자 값을 가지고 있으므로 만약 식별자 값을 조회하는 getId() 를 호출해도 프록시를 초기화 하지 않는다.

참고: https://derekpark.tistory.com/92

profile
언제나 감사하며 살자!

0개의 댓글