[스프링] JPA와 영속성 컨텍스트
영속성 컨텍스트란?
JPA(Java Persistence API)에서 영속성 컨텍스트는 엔티티(Entity)들을 관리하는 환경을 의미합니다. 영속성 컨텍스트는 엔티티의 생명주기를 관리하고, 데이터베이스와 상호작용하는데 사용됩니다.
영속성 컨텍스트의 장점
- 1차 캐시(First Level Cache): 영속성 컨텍스트는 엔티티를 저장하는 캐시를 제공하여 빠른 데이터 액세스를 가능켑 만들어줍니다.
- 트랜잭션을 지원하는 쓰기 지연(Write-behind): 영속성 컨텍스트는 트랜잭션 시작 시점부터 커밋 시점까지의 변경 사항을 추적하여 한꺼번에 데이터베이스에 반영합니다.
- 변경 감지(Dirty Checking): 영속성 컨텍스트는 엔티티의 변경 사항을 감지하여 자동으로 수정 쿼리를 생성하여 데이터베이스에 반영합니다.
JPA와의 관계
JPA는 영속성 컨텍스트를 관리하는 역할을 합니다. JPA의 EntityManager 인터페이스를 통해 영속성 컨텍스트에 접근하고, 엔티티의 상태를 관리할 수 있습니다.
영속성 컨텍스트의 생명주기
영속성 컨텍스트는 다음과 같은 생명주기를 갖습니다:
- 비영속 상태: 영속성 컨텍스트와 전혀 관계가 없는 상태입니다.
- 영속 상태: 영속성 컨텍스트에 엔티티가 저장되어 있는 상태입니다.
- 준영속 상태: 영속성 컨텍스트에서 분리된 상태입니다.
- 삭제 상태: 엔티티가 삭제된 상태입니다.
영속성 컨텍스트의 트랜잭션 처리
영속성 컨텍스트는 트랜잭션과 밀접한 관계가 있습니다. 트랜잭션을 시작하고 종료할 때, 영속성 컨텍스트는 영속성 컨텍스트 내의 엔티티 상태를 싱크화하여 데이터베이스와의 일관성을 유지합니다.
영속성 컨텍스트는 JPA의 중요한 기능 중 하나이며, JPA를 사용하면서 영속성 컨텍스트를 잘 이해하고 활용하는 것이 중요합니다.
더 많은 정보는 Hibernate documentation에서 확인할 수 있습니다.