[Spring] 영속성 컨텍스트(Persistence Context)

WOOK JONG KIM·2022년 10월 26일
0
post-thumbnail
post-custom-banner

애플리케이션과 DB 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 보관하는 기능 수행

엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업 수행
-> 엔티티가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터 해당 객체를 영속 객체라고 함

생명 주기

세션 단위의 생명 주기를 가짐

데이터베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고 세션이 사라지면 영속성 컨텍스트도 없어짐

엔티티 매니저는 이러한 일련의 과정속에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용

엔티티 객체는 영속성 컨텍스트에서 다음과 같은 4가지 상태로 구분

  1. 비영속(New) : 영속성 컨텍스트에 추가되지 않은 엔티티 객체 상태

  2. 영속(Managed) : 영속성 컨텍스트 의해 엔티티 객체가 관리 되는 상태

  3. 준영속(Detached) : 영속성 컨텍스트 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태

  4. 삭제(Removed) : 데이터 베이스에서 레코드를 삭제 하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태

엔티티 매니저

말 그대로 엔티티를 관리하는 객체 -> DB에 접근해서 CRUD 작업 수행

Spring Data JPA 사용 시에는 리포지토리를 사용해서 DB에 접근하는데, 내부 구현체인 SimpleJpaRepository가 리포지토리에서 엔티티 매니저를 사용하는 것 볼 수 있다

// SimpleJpaRepository의 EntityManager 주입 코드
public SimpleJpaRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entity Manage){
	Assert.notNull(entityInformation, "JpaEntityInfomation must not be null");
	Assert.notNull(entityManager, "EntityManager must not be null!");
    
    this.entityInformation = entityInformation;
    this.em = entityManager;
    this.provider = PersistenceProvider.fromEntityManager(entityManager)
}

엔티티 매니저는 엔티티 매니저 팩토리(EntityManagerFactory)에서 만듬

엔티티 매니저 팩토리란 DB에 대응하는 객체
-> 스프링 부트에는 자동 설정 기능이 있어 application.properties에 작성한 최소한 설정만으로 동작하지만 하이버네이트에서는 persistence.xml이라는 설정 파일을 구성하고 사용해야 함

profile
Journey for Backend Developer
post-custom-banner

0개의 댓글