본문 바로가기
Spring Framwork

JPA 영속성 컨텍스트

by orioncsy 2023. 3. 31.

JPA 영속성 컨텍스트

영속성 컨텍스트

개념

  • 엔티티를 영구적으로 저장하는 환경
  • 애플리케이션과 데이터베이스 사이에 객체를 보관하는 가상의 DB 역할을 제공
  • 엔티티 매니저를 통해 저장 및 조회

엔티티 생명 주기

  • 비영속
    • 객체는 생성되었지만 영속성 컨텍스트와 관련 없는 경우
  • 영속
    • 영속성 컨텍스트에 저장되어 관리되는 상태
  • 준영속
    • 영속성 컨텍스트에 저장되었다 더 이상 관리되지 않는 상태
    • detach()를 통해 준영속으로 만들 수 있고, clear()나 close()를 통해 컨텐츠를 비우거나 종료해도 준영속으로 속한다.
  • 삭제
    • 영속성 컨텍스트와 데이터베이스에서 삭제
    • remove()를 통해 구현

영속성 컨텍스트 특징

1차 캐시

  • 영속성 컨텍스트 내에 엔티티를 저장하는 공간
  • 키는 식별자, value는 인스턴스
  • 객체를 추가할 때 1차 캐시에 저장이 되고 조회할 때도 1차 캐시를 먼저 조회하며, 1차 캐시에 존재하지 않는 경우 DB에서 조회하고 1차 캐시에 저장

동일성 보장

  • 영속성 컨텍스트 내에 있는 엔티티는 값이 같을 뿐만 아니라 주소값도 같은 동일성을 보장한다.

트랜잭션을 지원하는 쓰기 지연

  • sql문을 사용했을 때 바로 db에 적용하는 것이 아니라 쓰기 지연 저장소에 sql문을 저장하고 commit될 때 한 번에 적용된다.

변경 감지

  • 엔티티를 수정하였을 때 엔티티를 지우는 것이 아니라 변경 내용을 DB에 동기화시킨다.
  • flush를 통해 작동
  • 트랜잭션을 커밋하면 엔티티 매니저 내부에서 flush 작동
  • 기존 엔티티를 상태인 스냅샷과 엔티티를 비교하여 변경된 엔티티를 찾는다.
  • 변경 사항이 있다면 수정 sql 문을 작성해서 쓰기 지연 저장소에 저장
  • 쓰기 지연 저장소에 있는 sql문을 실행하고 커밋된다.

지연 로딩

  • 트랜잭션이 실행될 때 연관 관계가 매핑되어 있는 부분은 필요할 때 query문을 날려서 처리하도록 작동

Reference

https://velog.io/@neptunes032/JPA-영속성-컨텍스트란

'Spring Framwork' 카테고리의 다른 글

Dirty Checking  (0) 2023.05.07
Transaction Propagation  (0) 2023.04.01
CORS Solution  (0) 2023.03.29
Bean Life Cycle  (0) 2023.03.27
Bean Scope  (0) 2023.03.19