JPA(Java Persistence API)의 핵심 개념 중 하나인 영속성 컨텍스트에 대해 알아보겠습니다. 영속성 컨텍스트는 JPA를 사용한 애플리케이션 개발에서 매우 중요한 역할을 하기 때문에, 그 원리와 특징을 잘 이해하는 것이 필요합니다.
영속성 컨텍스트는 간단히 말해 엔티티(Entity)를 관리하는 일종의 캐시(Cache)입니다. 이를 통해 엔티티를 데이터베이스와 매핑하며, 변경된 사항을 추적 및 동기화합니다.
공식적인 정의로는 "엔티티를 영구 저장소(Database)에 보관하는 환경"을 의미합니다. 다시 말해, 데이터베이스의 데이터를 자바 객체로 관리하는 가상의 데이터베이스라고 생각할 수 있습니다.
엔티티는 영속성 컨텍스트 내에서 다음과 같은 네 가지 상태를 가집니다.
Member member = new Member();
member.setName("John Doe");
엔티티 매니저를 통해 영속성 컨텍스트에 저장된 상태를 의미합니다.
이 상태에 들어가면 영속성 컨텍스트에서 해당 엔티티를 관리합니다.
예시:
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
Member member = new Member();
member.setName("John Doe");
em.persist(member);
em.getTransaction().commit();
Member member = em.find(Member.class, 1L);
em.detach(member); // 영속성 컨텍스트에서 분리
Member member = em.find(Member.class, 1L);
em.remove(member); // 영속성 컨텍스트에서 제거
Member member1 = em.find(Member.class, 1L);
Member member2 = em.find(Member.class, 1L);
// member1과 member2는 같은 객체를 가리킴
Member member = em.find(Member.class, 1L);
member.setName("Jane Doe"); // 변경 감지
em.getTransaction().commit(); // 변경사항이 데이터베이스에 반영됨
JPA에서 영속성 컨텍스트는 데이터베이스와 자바 객체 사이를 매끄럽게 연결해주는 핵심 역할을 합니다. 이를 통해 효율적인 데이터 관리와 변경 추적이 가능해지며, 개발자의 생산성을 높여줍니다.