영속성 컨텍스트

꽃봉우리·2024년 7월 1일

영속성 컨텍스트란?

영속성 컨텍스트(Persistence Context)는 엔티티 매니저(Entity Manager)에 의해 관리되는 엔티티 객체들의 집합이다. 엔티티 매니저는 특정 영속성 컨텍스트를 대표하며, 해당 컨텍스트 내에서 엔티티 객체의 상태를 추적하고 관리한다.

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

엔티티의 생명주기 관리: 엔티티 객체의 상태를 관리합니다. 엔티티는 크게 네 가지 상태를 가집니다.

  • 비영속(New): 영속성 컨텍스트와 전혀 연관되지 않은 상태.

  • 영속(Managed): 영속성 컨텍스트에 의해 관리되는 상태.

  • 준영속(Detached): 영속성 컨텍스트에서 분리된 상태.

  • 삭제(Removed): 삭제 요청을 받아 데이터베이스에서 삭제될 상태.

  • 변경 감지(Dirty Checking): 영속성 컨텍스트는 관리하는 엔티티 객체의 변경 사항을 추적하여, 트랜잭션이 커밋될 때 자동으로 데이터베이스에 반영함.

캐싱: 영속성 컨텍스트는 엔티티 객체를 1차 캐시(Primary Cache)로 유지하여 동일 트랜잭션 내에서의 데이터 접근 성능을 향상시킨다.

동일성 보장: 동일 영속성 컨텍스트 내에서는 동일한 엔티티에 대해 항상 동일한 인스턴스를 반환합니다. 이를 통해 엔티티 객체 간의 동일성을 보장한다.

영속성 컨텍스트의 생명주기

영속성 컨텍스트의 생명주기는 트랜잭션의 생명주기와 밀접한 관련이 있다. 트랜잭션이 시작되면 영속성 컨텍스트가 활성화되고, 트랜잭션이 종료되면 영속성 컨텍스트도 종료된다. 이는 트랜잭션 범위 내에서 엔티티 객체의 상태를 일관되게 유지하는 데 도움이 된다.

주요 메서드
영속성 컨텍스트를 관리하는 엔티티 매니저의 주요 메서드로는 다음과 같은 것들이 있다.

  • persist(Object entity): 엔티티를 영속성 컨텍스트에 추가한다.

  • merge(Object entity): 준영속 상태의 엔티티를 영속성 컨텍스트로 다시 가져와 변경된 내용을 반영한다.

  • remove(Object entity): 엔티티를 영속성 컨텍스트에서 제거하고, 데이터베이스에서 삭제한다.

  • find(Class entityClass, Object primaryKey): 엔티티의 기본 키를 사용하여 데이터베이스에서 엔티티를 조회하고 영속성 컨텍스트에 추가한다.

  • detach(Object entity): 엔티티를 영속성 컨텍스트에서 분리하여 준영속 상태로 만든다.

  • clear(): 영속성 컨텍스트를 초기화하여 모든 엔티티를 준영속 상태로 만든다.

  • flush(): 영속성 컨텍스트의 변경 사항을 데이터베이스에 반영한다.

결론

JPA의 영속성 컨텍스트는 엔티티 객체의 상태를 효율적으로 관리하고, 데이터베이스와의 상호작용을 단순화하는 데 중요한 역할을 한다. 이를 통해 애플리케이션 개발자는 비즈니스 로직에 집중할 수 있으며, 데이터 일관성과 성능 최적화를 달성할 수 있다.

0개의 댓글