백엔드/Spring

[Spring] 영속성 컨텍스트 (Persistence Context)

kwang2134 2024. 9. 8. 16:38
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. 트랜잭션 실행 중 엔티티 요청
    2. 1차 캐시에 요청 받은 엔티티 검색
    3. 1차 캐시에 엔티티가 존재할 경우 반환
    4. 존재하지 않을 경우 데이터베이스에 요청
    5. 데이터베이스에서 반환 받은 엔티티는 1차 캐시에 저장됨
    6. 트랜잭션이 종료되기 전 동일한 엔티티 요청은 1차 캐시에서 바로 반환
    7. 트랜잭션이 끝나면 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