Persistence Context (영속성 컨텍스트)
영속성 컨텍스트란?
- JPA를 이해하기 위해 가장 중요한 용어
- "엔티티를 영구 저장하는 환경"
- EntityManager.persist(entity) -> 영속성 컨텍스트를 통해 엔티티를 영속화 시킨다는 의미.
-> 엔티티를 영속성 컨텍스트에 저장
- 영속성 컨텍스트는 논리적 개념이기에 눈에 보이지 않는다 -> 엔티티 매니저를 통해 영속성 컨텍스트에 접근
엔티티 생명주기
- 비영속(new / transient)
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
- 영속(managed)
- 준영속(detached)
- 삭제(removed)
영속성 컨텍스트의 이점
- 1차 캐시 사용
- 객체 조회 시 DB 조회 이전에 1차 캐시를 먼저 탐색
- 1차 캐시에 데이터가 존재하는 경우 DB 조회 없이 1차캐시에 존재하는 객체 반환
- 1차 캐시에 없는 경우 DB에서 조회하여 1차 캐시에 저장
- 동일성(identity) 보장
- ID가 동일한 객체는 영속성 컨텍스트에서 같은 객체를 참조한다.
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지(Dirty Checking)
- 객체의 데이터 변경 시 영속성 컨텍스트의 스냅샷과 비교하여 update 쿼리 실행 후 커밋한다.
- 별도의 em.persist() 같은 함수 호출 불필요
- 지연 로딩(Lazy Loading)
- 플러시(flush)
- 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것
- 쓰기 지연 SQL 저장소에 등록된 쿼리를 DB로 전송 -> 영속성 컨텍스트를 비우는 것은 아님