영속성 컨텍스트와 엔티티

2021. 1. 17. 19:59JPA/JPA

영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경
  • 논리적인 개념이라 눈에 보이지 않는다.
  • 엔티티 매니저를 통해 접근 가능하다.
  • 1차 캐시와 쓰기 지연 SQL 저장소가 있다.

 

역할

  • 1차 캐시 -> 키, 벨류로 엔티티의 키와 엔티티를 저장해두고 한 트랜젝션 안에서만 캐시로 사용.
  • 동일성(identity) 보장 -> 한 트랜젝션 안에서 영속 상태인 엔티티에 대해서는 동일한 엔티티를 보장해준다.
  • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) -> JDBC batch와 같은 기능으로 flush()가 호출되기 전에는 쓰기 지연 SQL 저장소에 SQL이 저장되어 있다가 flush()가 호출되면 저장된 SQL이 DB로 전송된다. 이 기능은 옵션으로 버퍼 사이즈를 설정할 수 있다.
  • 변경 감지(Dirty Checking) -> 엔티티가 영속 상태가 되면 1차 캐시에 스냅샷(최초 데이터 정보)을 저장해두고 후에 flush()가 호출되면 1차 캐시에서 엔티티 정보와 스냅샷을 비교하여 변경된 상태가 있는지 확인한다. 변경이 이뤄졌다면, 쓰기지연 SQL 저장소에 UPDATE SQL문을 만들고 DB로 전송한다.
  • 지연 로딩(Lazy Loading)

 

엔티티

  • 데이터베이스의 하나의 테이블에 대응되는 자바의 CLASS.
  • @Entity를 Class에 부여하면 영속성 컨텍스트에 의해 관리된다.
  • EntityManagerFactory는 EntityManager를 생성할 수 있고, 어플리케이션에 단 한개만 존재해야한다.
  • EntityManager를 통해 영속성 컨텍스트에 접근할 수 있고, DB 커넥션 풀의 커넥션을 할당 받아 DB와의 연결 작업을 수행해준다.

 

엔티티 생명주기

  • 비영속 - 엔티티가 생성됐지만(New) 영속성 컨텍스트에 한번도 등록된적이 없는 상태.
  • 영속 - 엔티티가 영속성 컨텍스트에 등록된 상태
  • 준영속 - 엔티티가 영속성 컨텍스트에 등록되었다가 등록 해제된 상태.
  • 삭제 - 삭제 쿼리가 날라가 엔티티가 삭제된 상태.