Persistence Context (영속성 컨텍스트)

jyKim·2023년 4월 5일
0

JPA

목록 보기
4/7

영속성 컨텍스트란?

  • JPA를 이해하기 위해 가장 중요한 용어
  • "엔티티를 영구 저장하는 환경"
  • EntityManager.persist(entity) -> 영속성 컨텍스트를 통해 엔티티를 영속화 시킨다는 의미.
    -> 엔티티를 영속성 컨텍스트에 저장
  • 영속성 컨텍스트는 논리적 개념이기에 눈에 보이지 않는다 -> 엔티티 매니저를 통해 영속성 컨텍스트에 접근

엔티티 생명주기

  1. 비영속(new / transient)
    • 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
  2. 영속(managed)
    • 영속성 컨텍스트에 의해 관리되는 상태
  3. 준영속(detached)
    • 영속성 컨텍스트에 저장되었다가 분리된 상태
  4. 삭제(removed)
    • 엔티티가 삭제된 상태

영속성 컨텍스트의 이점

  1. 1차 캐시 사용
    • 객체 조회 시 DB 조회 이전에 1차 캐시를 먼저 탐색
    • 1차 캐시에 데이터가 존재하는 경우 DB 조회 없이 1차캐시에 존재하는 객체 반환
    • 1차 캐시에 없는 경우 DB에서 조회하여 1차 캐시에 저장
  2. 동일성(identity) 보장
    • ID가 동일한 객체는 영속성 컨텍스트에서 같은 객체를 참조한다.
  3. 트랜잭션을 지원하는 쓰기 지연
    • 커밋하는 시점에 SQL이 실행된다.
  4. 변경 감지(Dirty Checking)
    • 객체의 데이터 변경 시 영속성 컨텍스트의 스냅샷과 비교하여 update 쿼리 실행 후 커밋한다.
    • 별도의 em.persist() 같은 함수 호출 불필요
  5. 지연 로딩(Lazy Loading)
    • 객체가 사용되는 시점에 불러오는 것
  6. 플러시(flush)
    • 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것
    • 쓰기 지연 SQL 저장소에 등록된 쿼리를 DB로 전송 -> 영속성 컨텍스트를 비우는 것은 아님
profile
백엔드애옹

0개의 댓글