본문 바로가기

BE/JPA

[JPA] 영속성 컨텍스트 ( 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지 )

 

 

 

 

 

영속성 컨텍스트

영속성 컨텍스트란 엔티티를 영구 저장하는 환경으로써, 애플리케이션과 데이터베이스 사이에서 엔티티를 관리하는 논리적인 영역이다.

이를 통해 1차 캐시, 동일성 보장, 트랙잭션 지원, 쓰기 지연, 변경 감지, 지연 로딩 등 다양한 기능을 제공하며 영속성 컨텍스트는 한 트랜잭션 단위 ( 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위 - 논리적 단위 ) 에서만 존재했다가 한 트랜잭션이 종료되면 영속성 컨텍스트도 삭제된다.

 


 

비영속

Member member = new Member();

객체만 생성한 상태로써 아직 영속성 컨텍스트에 저장하지 않은 상태 - 비영속 ( new / trasient )

 

 

 

 

 

영속

em.persist(member);

엔티티 매니저의 persist() 메소드를 사용해 member 객체를 영속성 컨텍스트에 저장한 상태 ( 영속성 컨텍스트에 의해 member 객체가 관리되는 상태 )

 

 

 

 

 

준영속

// 특정 엔티티만 준영속 상태로 전환한다.
em.detach(member);
// 영속성 컨텍스트를 완전히 초기화한다.
em.clear();
// 영속성 컨텍스트를 종료한다.
em.close();

JPA 에서 준영속 상태란 이전에 영속 상태에 있던 엔티티 객체가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태를 나타낸다.

준영속 상태의 엔티티는 JPA 가 더 이상 추적하거나 관리하지 않는다.

 

 

 

 

 

삭제

em.remove(member);

엔티티 인스턴스를 영속성 컨텍스트에서 제거하며 데이터베이스에서 삭제한다.

 


728x90

 

 

 

 

 

1차 캐시

  • 영속성 컨텍스트 내부에 캐시를 가지고 있다.
  • 엔티티를 영구 저장하는 환경으로 트랜잭션 단위의 메모리 공간이다.
  • 조회 시, 1차 캐시를 통해 엔티티를 빠르게 찾을 수 있다.
  • 데이터베이스에 접근하지 않고도 엔티티의 동일성을 보장한다.

 

동일성 보장

  • 1차 캐시를 통해 같은 엔티티를 조회하면 동일한 참조값을 반환한다.
  • Java 컬렉션처럼 동일한 주소의 값을 가져오는 것과 유사하다.

 

쓰기 지연

  • 엔티티 매니저의 persist 호출 시 데이터베이스에 저장되지 않고 1차 캐시에 저장된다.
  • 트랜잭션 커밋 시점에 쿼리가 발생하여 최적화가 가능하다.

 

변경 감지

  • 엔티티의 변경 사항을 감지하여 자동으로 UPDATE 쿼리를 생성한다.
  • 1차 캐시의 스냅샷과 비교하여 변경 여부를 확인한다.
728x90

'BE > JPA' 카테고리의 다른 글

[JPA] 매핑 어노테이션 종류  (0) 2024.05.20
[JPA] 프로젝트 세팅, JPA insert, JPA select, JPA update  (0) 2024.05.11
[JPA] H2 Databas 설치, IntelliJ 설치  (1) 2024.05.09
[JPA] JPA 란?  (0) 2024.05.09