JPA에서 영속성 컨텍스트(Persistence Context)는 엔티티를 관리하는 환경을 의미합니다. 영속성 컨텍스트는 엔티티 매니저(EntityManager)에 의해 관리되며, 엔티티 매니저는 엔티티의 생명 주기를 관리하고 데이터베이스 작업을 수행하는 데 사용됩니다. 영속성 컨텍스트는 다음과 같은 특징을 갖습니다:
영속성 컨텍스트는 엔티티의 1차 캐시 역할을 합니다. 이를 통해 동일한 엔티티에 대한 중복 쿼리를 방지하고, 엔티티를 효율적으로 관리할 수 있습니다.
예를 들어, 동일한 트랜잭션 내에서 동일한 엔티티를 여러 번 조회하면, 데이터베이스를 다시 조회하지 않고 1차 캐시에서 엔티티를 반환합니다.
엔티티는 영속성 컨텍스트 내에서 관리되며, 생명 주기에 따라 상태가 변합니다. JPA에서는 엔티티 상태를 크게 네 가지로 나눕니다:
비영속(Transient): 엔티티가 새로 생성되었지만 아직 영속성 컨텍스트에 저장되지 않은 상태.
영속(Managed):
엔티티가 영속성 컨텍스트에 저장되어 관리되고 있는 상태.
준영속(Detached):
엔티티가 한때 영속성 컨텍스트에 저장되었지만 현재는 분리된 상태.
삭제(Removed):
엔티티가 영속성 컨텍스트에서 삭제된 상태.
영속성 컨텍스트는 관리 중인 엔티티의 변경 사항을 추적합니다. 트랜잭션이 커밋될 때, 변경된 엔티티는 자동으로 데이터베이스에 반영됩니다.
변경 감지를 통해 개발자는 엔티티 상태를 명시적으로 업데이트할 필요 없이 편리하게 데이터 변경을 처리할 수 있습니다.
Product product = new Product();
product.setName("Laptop");
product.setPrice(1200.00);
em.persist(product);
em.getTransaction().commit();
EntityManager는 JPA의 핵심 인터페이스로, 영속성 컨텍스트를 관리하고 엔티티의 생명 주기를 제어하는 데 사용됩니다. 주로 엔티티의 생성, 조회, 업데이트, 삭제 작업을 수행합니다.
Entity Transaction:
트랜잭션은 일련의 데이터베이스 작업을 하나의 단위로 묶어 관리합니다. JPA에서는 EntityManager를 통해 트랜잭션을 시작하고 커밋 또는 롤백할 수 있습니다.
Cascade:
JPA에서 연관된 엔티티 간의 작업을 전이(Cascade) 시킬 수 있습니다. 예를 들어, 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되도록 설정할 수 있습니다.
Fetch Type:
엔티티의 연관 필드를 가져오는 방식으로, 즉시 로딩(EAGER)과 지연 로딩(LAZY)이 있습니다. 즉시 로딩은 연관된 엔티티를 즉시 가져오는 반면, 지연 로딩은 실제로 사용할 때 가져옵니다.