JPA 프록시 객체

박미소·2024년 1월 14일
0

코틀린

목록 보기
25/44

프록시는 엔티티를 필요할 때만 꺼내쓸 수 있도록 하는 가짜 객체이다.

사용자는 객체를 그대로 써도 된다. Proxy 내 target이라는 필드가 있는데, 실제 데이터가 필요하면 이 target을 통해 id, name등 원래 entity의 속성값을 조회한다.

프록시는 DB와 엔티티를 연결한다. 프록시 객체는 실제 값이 필요할 때 DB에 값을 요청하게 된다.

프록시 객체는 사용할 때 한번만 초기화 되는데 이후에는 영속성 엔티티에 있는 값을 계속 가져다 쓰게 된다.

프록시 객체를 초기화하면, 프록시 객체를 통해서 엔티티 접근이 가능하게 된다. 이말이 프록시 객체가 엔티티로 변하는 것이 아니라 실제 엔티티에 계속 접근할 수 있도록 연결되는 것이다. 프록시는 유지되고 프록시 내부의 target에만 값이 채워진다.

=> 프록시 객체와 실제 엔티티 객체는 다르다.




프록시는 엔티티의 값이 필요할 때 초기화가 되며, 이 초기화는 영속성 컨텍스트를 통해서만 이루어진다. 영속성 컨텍스트에서 객체가 분리(detach)되거나 영속성 컨텍스트 자체가 close가 되어버리면 문
제가 발생한다.






영속성 컨텍스트만을 이용해 프록시 초기화 가능




준영속 상태일때 프록시 초기화 오류


하이버네이트에서는 LazyInitializationException 예외가 발생하는데 원인이 프록시이며 영속성 컨텍스트에 해당 객체가 영속 객체로 관리가 되지 않거나 영속성 컨텍스트 자체가 문제가 있을 것이라는 추측을 할 수 있어야 한다.


+ 지연로딩

회원을 조회하는데 team 을 굳이 조회하지 않아도 된다면 team에는 프록시 객체를 넣어둔다. 진짜 필요한 시점에 데이터베이스를 조회해 프록시를 초기화한다.

0개의 댓글