영속성 컨텍스트란

영속성 컨텍스트(Persistence Context) 는 JPA(Java Persistence API)에서 엔티티를 관리하는 환경을 말한다. 영속성 컨텍스트는 엔티티를 관리하고, 엔티티와 데이터베이스 간의 상태 변화를 추적한다. 영속성 컨텍스트는 엔티티 매니저(Entity Manager)에 의해 관리된다.

영속성 컨텍스트의 주요 기능

  1. 엔티티 관리:

    • EntityManager가 엔티티를 관리한다.
    • 영속성 컨텍스트가 엔티티의 초기 상태를 저장한다.
  2. 트랜잭션 연계:

    • 영속성 컨텍스트는 트랜잭션과 생명 주기를 같이 한다.
    • 트랜잭션이 커밋되면, 영속성 컨텍스트가 관리하는 엔티티의 변경 사항이 데이터베이스에 반영된다.
  3. 변경 감지(Dirty Checking):

    • 영속성 컨텍스트는 엔티티의 변경 사항을 추적한다.
    • 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다.
    • 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다.

영속성 컨텍스트의 동작 방식

  1. 엔티티 관리:

    • 엔티티가 영속성 컨텍스트에 포함되면, 영속 상태로 전환된다.
    • 영속 상태의 엔티티는 변경 사항이 자동으로 데이터베이스에 반영된다.
  2. 엔티티 조회:

    • 엔티티를 조회하면, 영속성 컨텍스트는 캐시에서 엔티티를 찾는다.
    • 캐시에 엔티티가 없으면, 데이터베이스에서 엔티티를 조회하고 캐시에 저장한다.
  3. 엔티티 변경:

    • 엔티티의 상태를 변경하면, 영속성 컨텍스트는 변경 사항을 추적한다.
    • 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다.
    • 이를 Dirty Checking이라고 한다.

영속성 컨텍스트의 장점

  • 성능: 캐시를 제공하여 동일한 엔티티를 여러 번 조회할 때, 데이터베이스를 다시 조회하지 않고 캐시된 엔티티를 반환한다.
  • 일관성: 변경 사항이 자동으로 데이터베이스에 반영되므로, 데이터 일관성을 유지할 수 있다.
  • 편의성: 개발자가 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다.