영속성 컨텍스트

Yennie·2024년 5월 12일

JPA

목록 보기
14/19

영속성 컨텍스트란?

  • 엔티티를 영구 저장하는 환경을 의미한다. 어플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할로, 서버 사이드와 데이터베이스 사이에 엔티티를 저장하는 논리적인 영역이라고 할 수 있다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
  • 영속성 컨텍스트는 엔티티 매니저(session)을 생성할 때 하나 만들어진다. 그리고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 및 관리가 가능하다.


https://ultrakain.gitbooks.io/jpa/content/chapter3/chapter3.4.html

엔티티의 생명주기

  • 비영속: 영속성 컨텍스트와 관계가 없는 상태
    • 엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태를 의미
  • 영속: 영속성 컨텍스트에 저장된 상태
    • 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태를 말하며 영속성 컨텍스트에 의해 관리된다는 뜻으로, 영속 상태는 식별자 값이 반드시 있어야 함
  • 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태
    • 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 더 이상 관리하지 않으면 준영속 상태가 된다.
      • 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩을 포함한 영속성 컨텍스트가 제공하는 어떠한 기능도 동작하지 않는다.
      • 식별자 값을 가지고 있다.
  • 삭제: 삭제된 상태
    • 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.

flush

JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터 베이스에 반영하는데 이를 flush라고 한다. 영속성 컨텍스트의 엔티티의 변경 내용을 데이터베이스에 동기화하는 것
1. 변경 감지가 동작해서 스냅샷과 비교, 수정된 엔티티를 찾는다
2. 수정된 엔티티에 대해 수정쿼리를 만들고 sql 저장소에 등록한다.
3. 쓰기 지연 sql 저장소의 쿼리를 데이터베이스에 저장한다.

플러시 방법
1. em.flush()
2. 트랜잭션 커밋 시 자동 호출
3. JQPL 쿼리 실행 시 자동 호출

참고
https://incheol-jung.gitbook.io/docs/q-and-a/spring/persistence-context
https://velog.io/@neptunes032/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%9E%80

profile
PM | Aspiring SWE | linkedin.com/in/emilyyeeun

0개의 댓글