살구잼의 여정
article thumbnail

프록시 (Proxy)

요약 : 지연로딩을 위해 사용되는 대리 객체

프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다.

프록시는 실제 객체에 대한 대리자나 대리 객체 역할을 수행하며, 클라이언트가 실제 객체에 직접 접근하는 것 대신에 프록시를 통해 접근할 수 있도록 한다.

프록시 클래스는 실제 클래스를 상속 받아 만들어지므로 실제 클래스와 겉모양이 같다.

프록시 객체는 실제 객체에 대한 참조(target)을 보관한다. 프록시 객체의 메소드를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다.

 

프록시객체의 특징

처음 사용할 때 한 번만 초기화된다.

프록시객체를 초기화한다고 프록시객체가 실제 엔티티로 바뀌는 것은 아니다. 프록시객체가 초기화되면 프록시객체를 통해서 실제엔티티에접근할 수있다.

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

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

초기화는 영속성컨텍스트의 도움을 받아야 가능하다. 따라서 영속성 컨텍스트의 도움을 받을 수 없는 준영속상태의 프록시를 초기화하면 문제가발생한다. 하이버네이트는 org.hibernate.LazyInitializationException 예외를발생시킨다.

 

즉시 로딩과 지연 로딩

즉시로딩(Lazy) : 엔티티를 조회할때 연관된 엔티티도 함께 조회한다. 프록시를 실제 사용할때 초기화하면서 데이터베이스를 조회한다.

지연로딩(Eager) : 연관된 엔티티를 실제 사용할때 조회한다. 하이버네이트는 가능하면 SQL 조인을 사용해서 한 번에 조회한다.

 

 

영속성 전이 : CASCADE

특정 엔티티를 영속상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들기 위한 기능.

(부모엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다)

 

고아 객체(Orphan) 제거

JPA에서 제공하는 기능으로, 부모 엔티티와 연관 관계가 끊어진(참조가 제거된) 자식 엔티티를 자동으로 삭제하는 기능

 

 

 

이해 잘 안감....나중에 다시 공부해봐야겠음

 

 

 

'🖤 Book Study > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

10장. 객체지향 쿼리 언어  (0) 2023.05.30
9장. 값 타입  (0) 2023.05.23
7장. 고급 매핑  (0) 2023.05.09
6장. 다양한 연관관계 매핑  (2) 2023.05.02
profile

살구잼의 여정

@드림살구잼

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!