728x90
반응형
728x90
영속성 컨텍스트(Persistence Context)
- JPA의 엔티티 매니저(EntityManager)가 관리하는 엔티티 객체의 저장소
- 데이터베이스와 애플리케이션의 엔티티 객체 간의 동기화를 담당하고 트랜잭션의 생명 주기 동안 엔티티 객체를 관리
- 자바의 컬렉션에 담는 것과 비슷한 개념
영속성 컨텍스트 상태
- 비영속(Transient)
- 엔티티가 영속성 컨텍스트에 의해 관리되지 않는 상태
- 데이터베이스에 아직 저장되지 않은 상태로 엔티티가 만들어지기만 한 상태
- 영속(Persistent)
- 엔티티가 영속성 컨텍스트에 의해 관리되고 있는 상태
- 데이터베이스와 동기화되고 상태 변경이 감지되어 트랜잭션 커밋 시 데이터베이스에 반영
- 준영속(Detached)
- 엔티티가 영속성 컨텍스트와 분리된 상태
- 데이터베이스와 동기화되지 않으며, 변경 사항이 데이터베이스에 반영되지 않음
- 삭제(Removed)
- 엔티티가 영속성 컨텍스트에서 제거된 상태
- 엔티티가 영속성 컨텍스트에서 제거되며, 트랜잭션이 커밋될 때 데이터베이스에서 삭제
EntityManager와 영속성 컨텍스트
- 엔티티 매니저는 영속성 컨텍스트에 접근하는 인터페이스 역할
- 엔티티 매니저를 통해 영속성 컨텍스트에 엔티티를 저장하고 관리
- 하나의 엔티티 매니저는 하나의 영속성 컨텍스트와 연결
- J2SE 환경에서는 엔티티 매니저와 영속성 컨텍스트가 1:1 관계
- J2EE, 스프링 프레임워크와 같은 컨테이너 환경에서는 엔티티 매니저와 영속성 컨텍스트가 N:1 관계 가능
- 엔티티 매니저 팩토리(EntityManagerFactory)는 여러 엔티티 매니저 인스턴스를 생성 가능
※ J2SE (Java 2 Standard Edition): 자바의 표준 버전으로 Java 애플리케이션을 개발하는 데 필요한 기본적인 기능과 API를 제공(순수 자바)
※ J2EE (Java 2 Enterprise Edition): 자바의 기업용 버전으로 J2SE의 기본 기능을 확장하여 대규모 분산 애플리케이션을 개발하는 데 필요한 추가 기능과 API를 제공
영속성 컨텍스트 기능 - 1차 캐시
- 영속성 컨텍스트 내 1차 캐시를 가짐
- 조회 과정
- 트랜잭션 실행 중 엔티티 요청
- 1차 캐시에 요청 받은 엔티티 검색
- 1차 캐시에 엔티티가 존재할 경우 반환
- 존재하지 않을 경우 데이터베이스에 요청
- 데이터베이스에서 반환 받은 엔티티는 1차 캐시에 저장됨
- 트랜잭션이 종료되기 전 동일한 엔티티 요청은 1차 캐시에서 바로 반환
- 트랜잭션이 끝나면 1차 캐시 제거
- 1차 캐시를 통해 반복 가능한 읽기(REPEATABLE READ) 수준의 격리를 애플리케이션 차원에서 제공
영속성 컨텍스트 기능 - 쓰기 지연
- 트랜잭션이 끝나고 커밋되기 전까지 실제 쿼리가 일어나지 않음
- 트랜잭션 내 영속으로 생기는 쿼리는 쓰기 지연 저장소에 저장이 되고 커밋 호출 시 한 번에 모든 쿼리가 실행
- 배치 처리로 인해 성능 최적화
영속성 컨텍스트 기능 - 변경 감지
- flush() 호출 또는 트랜잭션 커밋 시 영속으로 관리되는 필드의 변경 사항을 감지하여 자동으로 변경된 값을 업데이트
- flush()가 일어나는 경우 기존의 필드 스냅샷과 비교하여 변경된 부분에 대한 update 문을 자동으로 실행
- 자바 컬렉션에 있는 객체의 내부 값을 변경하면 자동으로 컬렉션에 변경된 값이 저장되는 것과 비슷한 개념
자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 | 김영한 - 인프런 (inflearn.com) 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] 연관관계 매핑 (0) | 2024.09.10 |
---|---|
[Spring] JPA 엔티티 매핑 (0) | 2024.09.09 |
[Spring] JPA 개요 (1) | 2024.09.07 |
[Spring] 변경 감지 & 병합 (0) | 2024.09.06 |
[Spring] 스프링 트랜잭션 전파 Propagation (0) | 2024.09.05 |