영속성 컨텍스트
영속성 컨텍스트란 엔티티를 영구 저장하는 환경으로써, 애플리케이션과 데이터베이스 사이에서 엔티티를 관리하는 논리적인 영역이다.
이를 통해 1차 캐시, 동일성 보장, 트랙잭션 지원, 쓰기 지연, 변경 감지, 지연 로딩 등 다양한 기능을 제공하며 영속성 컨텍스트는 한 트랜잭션 단위 ( 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위 - 논리적 단위 ) 에서만 존재했다가 한 트랜잭션이 종료되면 영속성 컨텍스트도 삭제된다.
비영속
Member member = new Member();
객체만 생성한 상태로써 아직 영속성 컨텍스트에 저장하지 않은 상태 - 비영속 ( new / trasient )
영속
em.persist(member);
엔티티 매니저의 persist() 메소드를 사용해 member 객체를 영속성 컨텍스트에 저장한 상태 ( 영속성 컨텍스트에 의해 member 객체가 관리되는 상태 )
준영속
// 특정 엔티티만 준영속 상태로 전환한다.
em.detach(member);
// 영속성 컨텍스트를 완전히 초기화한다.
em.clear();
// 영속성 컨텍스트를 종료한다.
em.close();
JPA 에서 준영속 상태란 이전에 영속 상태에 있던 엔티티 객체가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태를 나타낸다.
준영속 상태의 엔티티는 JPA 가 더 이상 추적하거나 관리하지 않는다.
삭제
em.remove(member);
엔티티 인스턴스를 영속성 컨텍스트에서 제거하며 데이터베이스에서 삭제한다.
1차 캐시
- 영속성 컨텍스트 내부에 캐시를 가지고 있다.
- 엔티티를 영구 저장하는 환경으로 트랜잭션 단위의 메모리 공간이다.
- 조회 시, 1차 캐시를 통해 엔티티를 빠르게 찾을 수 있다.
- 데이터베이스에 접근하지 않고도 엔티티의 동일성을 보장한다.
동일성 보장
- 1차 캐시를 통해 같은 엔티티를 조회하면 동일한 참조값을 반환한다.
- Java 컬렉션처럼 동일한 주소의 값을 가져오는 것과 유사하다.
쓰기 지연
- 엔티티 매니저의 persist 호출 시 데이터베이스에 저장되지 않고 1차 캐시에 저장된다.
- 트랜잭션 커밋 시점에 쿼리가 발생하여 최적화가 가능하다.
변경 감지
- 엔티티의 변경 사항을 감지하여 자동으로 UPDATE 쿼리를 생성한다.
- 1차 캐시의 스냅샷과 비교하여 변경 여부를 확인한다.
728x90
'BE > JPA' 카테고리의 다른 글
[JPA] 매핑 어노테이션 종류 (0) | 2024.05.20 |
---|---|
[JPA] 프로젝트 세팅, JPA insert, JPA select, JPA update (0) | 2024.05.11 |
[JPA] H2 Databas 설치, IntelliJ 설치 (1) | 2024.05.09 |
[JPA] JPA 란? (0) | 2024.05.09 |