프로그램이 종료 된 이후에도 데이터가 사라지지 않는 성질
메모리가 아닌 디스크에 데이터를 영구히 보존하겠다는 의미를 강하게 가짐
JPA는 객체(Entity)와 데이터베이스 테이블(Table)간의 중간자 역할을 하며, 자바 객체를 데이터베이스에 ‘영속’시키는 과정을 관리하기 위한 라이브러리
여러 객체를 관리하기 위한 환경에서 영속성 컨텍스트(Persistence Context) 라는 메모리 영역을 필요
JPA에서의 영속성은 영속성 컨텍스트(Persistence Context) 에 등록한 객체의 추이를 관찰하다 DB에 어떻게 영구히 저장할 것인가를 정하는 과정
상태
영속 (managed) : 영속성 컨텍스트에 등록된 상태
비영속 (new/transient) : 영속성 컨텍스트에 등록되지 않은 상태
준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태, 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없음
삭제 (removed) : 영속성 컨텍스트에서 제외되며 SQL 저장소에 delete문을 저장
반영 (flush) : 현재 영속성 컨텍스트에 상태를 확인하여 SQL 생성 후 데이터베이스에 query를 전송, commit 전이기 때문에 데이터베이스에 실제로 저장되지 않은 상태
데이터베이스 트랜잭션은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위
데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산을 의미
핵심 4대 속성(ACID)
Atomicity (원자성) – 전부 성공 or 전부 실패Consistency (일관성) – 트랜잭션 전/후의 데이터 일관성 유지Isolation (격리성) – 동시에 실행되는 트랜잭션 간 간섭 방지Durability (지속성) – 트랜잭션이 완료된 내용은 반드시 저장@Transactional을 클래스나 메서드에 붙이면, 해당 범위가 트랜잭션이 되도록 보장
적용된 범위에서는 프록시 객체가 생성되어 자동으로 커밋(commit) 또는 롤백(rollback)을 진행
예외 발생 시, rollback을 통해 DB에 결과가 반영되지 않는다
엔티티 객체의 상태를 관리하는 JPA의 1차 캐시
DB와의 연결이 아니라 JPA가 관리하는 메모리 상의 공간이라고 할 수 있다.
주요 기능
Transient (비영속 상태) : 영속성 컨텍스트에 아직 등록되지 않은 객체이다. new 키워드로 생성된 상태로, 아직 DB에 저장되지 않았다.
Persistent (영속 상태) : 영속성 컨텍스트에 의해 관리되는 상태입니다. 즉, DB에 저장되어 있고, JPA가 이 객체의 변경 사항을 추적한다. 객체가 영속성 컨텍스트에 존재하며, 변경된 상태는 자동으로 감지되어 트랜잭션이 끝날 때 DB에 반영함.
Detached (분리 상태) : 영속성 컨텍스트에서 분리된 상태로 객체는 더 이상 영속성 컨텍스트에 의해 관리되지 않는다. 객체가 영속성 컨텍스트에 의해 관리되지 않으므로, 변경된 내용은 DB에 반영되지 않지만 DB에서 다시 조회해 재연결할 수 있다.
Removed (삭제 상태) : 영속성 컨텍스트에서 삭제된 상태로 삭제된 엔티티는 더 이상 DB에서 관리되지 않는다. remove() 메서드를 호출하면, 엔티티는 영속성 컨텍스트에서 제거되고 DB에서도 삭제됨.
참고 :
spring 캠프, 발제/특강 : 영속성과 Transaction 세션,
https://star7sss.tistory.com/823,
https://pixx.tistory.com/262,
챗GTP