영속성 컨텍스트란
영속성 컨텍스트(Persistence Context) 는 JPA(Java Persistence API)에서 엔티티를 관리하는 환경을 말한다. 영속성 컨텍스트는 엔티티를 관리하고, 엔티티와 데이터베이스 간의 상태 변화를 추적한다. 영속성 컨텍스트는 엔티티 매니저(Entity Manager)에 의해 관리된다.
영속성 컨텍스트의 주요 기능
엔티티 관리:
- EntityManager가 엔티티를 관리한다.
- 영속성 컨텍스트가 엔티티의 초기 상태를 저장한다.
트랜잭션 연계:
- 영속성 컨텍스트는 트랜잭션과 생명 주기를 같이 한다.
- 트랜잭션이 커밋되면, 영속성 컨텍스트가 관리하는 엔티티의 변경 사항이 데이터베이스에 반영된다.
변경 감지(Dirty Checking):
- 영속성 컨텍스트는 엔티티의 변경 사항을 추적한다.
- 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다.
- 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다.
영속성 컨텍스트의 동작 방식
엔티티 관리:
- 엔티티가 영속성 컨텍스트에 포함되면, 영속 상태로 전환된다.
- 영속 상태의 엔티티는 변경 사항이 자동으로 데이터베이스에 반영된다.
엔티티 조회:
- 엔티티를 조회하면, 영속성 컨텍스트는 캐시에서 엔티티를 찾는다.
- 캐시에 엔티티가 없으면, 데이터베이스에서 엔티티를 조회하고 캐시에 저장한다.
엔티티 변경:
- 엔티티의 상태를 변경하면, 영속성 컨텍스트는 변경 사항을 추적한다.
- 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다.
- 이를 Dirty Checking이라고 한다.
영속성 컨텍스트의 장점
- 성능: 캐시를 제공하여 동일한 엔티티를 여러 번 조회할 때, 데이터베이스를 다시 조회하지 않고 캐시된 엔티티를 반환한다.
- 일관성: 변경 사항이 자동으로 데이터베이스에 반영되므로, 데이터 일관성을 유지할 수 있다.
- 편의성: 개발자가 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다.