JPA에서 사용되는 개념으로, 엔티티 객체의 상태를 관리하는 환경을 말한다.
엔티티 매니저를 통해 제공되며, 트랜잭션 당 하나의 영속성 컨텍스트가 관리된다.
애플리케이션과 데이터베이스 사이에 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다.
영속성 컨텍스트는 엔티티의 상태를 추적하고 관리한다.
새로 생성된 상태
new 키워드를 통해 엔티티 객체가 생성되었지만 아직 영속성 컨텍스트에 저장되지 않은 상태
데이터베이스에 아직 저장되지 않은 상태로, 식별자가 할당되지 않은 상태이다.
영속 상태
엔티티가 영속성 컨텍스트에 의해 관리되는 상태
영속 상태의 엔티티는 1차 캐시에 저장되어 동일성을 보장하고 트랜잭션 범위 내에서 관리된다.
준영속 상태
영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태
트랜잭션이 종료되거나 datach() 메서드를 사용하여 명시적으로 분리될 수 있다.
준영속 상태의 엔티티는 영속성 컨텍스트에서 관리되지 않으므로, 업데이트와 같은 변경이 자동으로 DB에 반영되지 않는다.
삭제된 상태
영속 상태의 엔티티가 삭제되어 데이터베이스에서 제거될 것임을 나타내는 상태
영속성 컨텍스트는 1차 캐시를 가지고 있다.
1차 캐시는 데이터베이스에서 로드한 엔티티를 메모리에 저장하는 공간으로, 식별자를 기준으로 캐싱한다.
이를 통해 동일한 엔티티에 대한 반복적인 조회에서 성능 향상을 이끌어낸다.
JPA에서는 일반적으로 트랜잭션 당 하나의 영속성 컨텍스트가 생성된다.
엔티티의 변경을 감지하여 트랜잭션 커밋 시에 변경된 엔티티만을 데이터베이스에 반영한다.
영속성 컨텍스트는 트랜잭션 내에서 엔티티의 변경 사항을 쓰기 지연 저장소에 쌓아두고 트랜잭션이 커밋될 때 한 번에 데이터베이스에 반영한다.