[JPA] 영속성 컨텍스트

이다혜·2023년 12월 14일
0

Spring

목록 보기
23/27

📌 영속성 컨텍스트(Persistence Context)란?

JPA에서 사용되는 개념으로, 엔티티 객체의 상태를 관리하는 환경을 말한다.
엔티티 매니저를 통해 제공되며, 트랜잭션 당 하나의 영속성 컨텍스트가 관리된다.
애플리케이션과 데이터베이스 사이에 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다.

📍 엔티티의 상태 관리

영속성 컨텍스트는 엔티티의 상태를 추적하고 관리한다.

  • 새로 생성된 상태
    new 키워드를 통해 엔티티 객체가 생성되었지만 아직 영속성 컨텍스트에 저장되지 않은 상태
    데이터베이스에 아직 저장되지 않은 상태로, 식별자가 할당되지 않은 상태이다.

  • 영속 상태
    엔티티가 영속성 컨텍스트에 의해 관리되는 상태
    영속 상태의 엔티티는 1차 캐시에 저장되어 동일성을 보장하고 트랜잭션 범위 내에서 관리된다.

  • 준영속 상태
    영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태
    트랜잭션이 종료되거나 datach() 메서드를 사용하여 명시적으로 분리될 수 있다.
    준영속 상태의 엔티티는 영속성 컨텍스트에서 관리되지 않으므로, 업데이트와 같은 변경이 자동으로 DB에 반영되지 않는다.

  • 삭제된 상태
    영속 상태의 엔티티가 삭제되어 데이터베이스에서 제거될 것임을 나타내는 상태

📍 1차 캐시

영속성 컨텍스트는 1차 캐시를 가지고 있다.
1차 캐시는 데이터베이스에서 로드한 엔티티를 메모리에 저장하는 공간으로, 식별자를 기준으로 캐싱한다.
이를 통해 동일한 엔티티에 대한 반복적인 조회에서 성능 향상을 이끌어낸다.

📍 트랜잭션 당 하나의 영속성 컨텍스트

JPA에서는 일반적으로 트랜잭션 당 하나의 영속성 컨텍스트가 생성된다.

📍 변경 감지 (Dirty Checking)

엔티티의 변경을 감지하여 트랜잭션 커밋 시에 변경된 엔티티만을 데이터베이스에 반영한다.

📍 쓰기 지연

영속성 컨텍스트는 트랜잭션 내에서 엔티티의 변경 사항을 쓰기 지연 저장소에 쌓아두고 트랜잭션이 커밋될 때 한 번에 데이터베이스에 반영한다.

0개의 댓글