영속성 컨텍스트란 일종의 메모리 저장소이며, 엔티티 타입과 식별자를 키로 사용하는 객체의 집합을 의미
엔티티 매니저(EntityManager)는 커밋 시점에 영속성 컨텍스트에서 관리하고 있던 영속 객체의 변경 내역을 추적하여 데이터베이스에 반영
엔티티 매니저를 생성할 때 하나의 영속성 컨텍스트가 생성
엔티티 매니저는 동일한 식별자를 갖는 엔티티를 2번 조회하게 되면
엔티티 매니저는 데이터베이스에 엑세스하기 위해 사용되는 객체
엔티티 매니저를 통해 데이터베이스에 데이터를 조회, 등록, 수정, 삭제 작업을 수행
즉, 영속성 컨텍스트는 엔티티 객체와 데이터베이스 사이의 매개체 역할을 하며, 엔티티 객체의 상태 변화를 추적하고, 이를 데이터베이스에 적용하는 일련의 작업을 처리합니다. 이를 통해 개발자는 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.
EntityManagerFactory와 BeanFactory를 서로 관계가 있나?
EntityManagerFactory와 BeanFactory는 서로 관계가 없는 것은 아니지만, 다른 역할을 가진 개념입니다.
EntityManagerFactory는 JPA를 사용할 때 영속성 컨텍스트를 생성하고 관리하는 객체입니다. EntityManagerFactory는 데이터베이스 연결 정보와 JPA 설정 정보를 사용하여 EntityManager를 생성하며, EntityManager는 영속성 컨텍스트를 제공합니다. EntityManagerFactory는 애플리케이션에서 단 하나만 존재하며, EntityManager를 생성하는데 사용됩니다.
반면, BeanFactory는 스프링 컨테이너에서 빈 객체를 생성하고 관리하는 객체입니다. 스프링 컨테이너는 빈 객체를 생성하고 필요한 시점에 빈을 주입하여 사용합니다. BeanFactory는 애플리케이션에서 여러 개 존재할 수 있으며, 빈 객체를 생성하고 관리하는데 사용됩니다.
EntityManagerFactory는 일반적으로 스프링에서 빈으로 등록되어 관리되며, 스프링 컨테이너는 EntityManagerFactory를 생성하고 관리합니다. 따라서 EntityManagerFactory는 BeanFactory의 일종이라고 할 수 있습니다.
하지만 EntityManagerFactory와 BeanFactory는 서로 다른 역할을 가지고 있으며, 상호작용하는 방식도 다릅니다. EntityManagerFactory는 영속성 컨텍스트를 생성하고 관리하는데 사용되며, BeanFactory는 스프링 빈을 생성하고 관리하는데 사용됩니다.
Container > Factory