영속성 컨텍스트(Persistence Context) 는 JPA를 이해하는 데 가장 중요한 용어로, 엔티티를 영구 저장하는 환경이라는 뜻이다.
Persistence Context
영속성 컨텍스트에 생명 주기는 트랜잭션과 동일하다.
엔티티 생명 주기
비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
영속 : 영속성 컨텍스트에 저장된 상태
준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제 : 삭제된 상태
영속성 컨텍스트가 엔티티를 관리하면 다음과 같은 이점들이 있다.
1차 캐시
영속성 컨텍스트는 DB에 데이터를 조회하기 전 내부에 있는 1차 캐시에 데이터가 있는지 확인하고, 없을 때 실제 DB를 조회한다.
1차 캐시에 데이터가 있다면 쿼리를 수행하지 않고, 1차 캐시에서 가져오기 때문에 약간의 성능상 이점이 있다.
동일성 보장
영속성 컨텍스트는 1차 캐시에 있는 같은 엔티티를 반환하기 때문에 엔티티의 동일성을 보장한다.
쓰기 지연
트랜잭션을 커밋하기 전까지 쿼리를 쓰기 지연 SQL 저장소에 모아두다가 커밋하는 시점에 한 번에 플러시한다.
변경 감지
JPA는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 스냅샷을 저장한다.
플러시 시점에 스냅샷과 엔티티를 비교해서 변경된 엔티티가 있으면 업데이트 쿼리를 수행해준다.
변경 감지는 영속 상태의 엔티티만 적용된다.
지연 로딩
연관된 엔티티를 처음 조회할 때, 원본 엔티티를 상속받은 프록시 객체로 불러와서 실제 사용할 때 쿼리를 날릴 수 있게 해준다.
Last updated 3 months ago