[JPA] 프록시(Proxy)

1

JPA

목록 보기
11/16
post-thumbnail

프록시(Proxy)란 ?

"프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다." 라고 정의 되어있는데 JPA에서 뜻하는 프록시도 비슷한 느낌으로 사용된다.

JPA에서는 즉시 로딩과 지연 로딩을 지원한다. 하지만 지연 로딩을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라고 한다.


프록시의 특징

프록시 클래스는 실제 클래스를 상속 받아서 만들어진다. 따라서 생긴 모양은 같다. 따라서 사용자의 입장에서는 진짜 부모 객체인지 상속 받은 프록시 객체인지 모르고 사용한다.

프록시 객체는 실제 객체에 대한 참조를 보관한다. 그리고 프록시 객체의 메서드를 호출하면 프록시 객체는 실제 객체의 메서드를 호출한다.


프록시 객체의 초기화

프록시 객체는 .get~() 처럼 실제로 사용될 때 데이터베이스를 조회해서 실제 엔티티 객체를 생성하는데 이 행동을 프록시 객체의 초기화라고 한다.

프록시의 특징

프록시의 특징은 다음과 같다.

  • 프록시 객체는 처음 사용할 때 한 번만 초기화된다.

  • 프록시 객체를 초기화한다고 프록시 객체가 실제 엔티티로 바뀌는 것이 아니다.

  • 프록시 객체는 원본 엔티티를 상속받은 객체이므로 타입 체크 시에 주의해서 사용해야 한다.

  • 영속성 컨텍스트에 찾는 엔티티가 이미 있으면 데이터베이스를 조회할 필요없이 em.getReference( )를 호출해도 프록시가 아닌 실제 엔티티를 반환한다.

  • 초기화는 영속성 컨텍스트의 도움을 받아야 가능하다.


마치며 ...

오늘은 프록시에 대해서 간단하게 알아보았다. 다음글에서는 즉시 로딩과 지연 로딩에 대해서 알아보자

0개의 댓글