본문 바로가기

Programming/과거포스팅

[JPA] 엔티티 매니저 팩토리와 엔티티 매니저(EntityManagerFactory and EntityManager)


엔티티 매니저 팩토리와 엔티티 매니저

(EntityManagerFactory and EntityManager)


엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저를 만드는 역할을 하는데 앞의 포스팅에서 설명했지만 이것을 생성하는 비용은 아주 크다고 한다. 그렇기 때문에 애플리케이션 전체에서 공유하도록 설계되어 있다. 

엔티티매니저팩토리는 여러 스레드가 접근해도 안전하지만 엔티티매너지는 동시성 문제가 발생할 수 있으므로 스레드간에 절대 공유하면 안된다.


엔티티 매니저 팩토리를 이용해서 엔티티 매니저를 만드는데 이 때 생성된 엔티티 매니저는 생성되었다고 무조건 데이터베이스 커넥션을 사용하는 것이 아니다. 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaTest");
EntityManager em = emf.createEntityManager(); 
EntityTransaction tx = em.getTransaction();

앞의 코드를 보면 엔티티매니저를 통해서 엔티티트랜잭션을 생성한다. 이 트랜잭션이 시작될 때 엔티티매니저는 데이터베이스 커넥션을 획득한다.


그리고 JPA구현체(하이버네이트 등)들은  엔티티매니저팩토리를 생성할 때 커넥션 풀도 만든다.