Spring/JPA

EntityManagerFactory와 EntityManager

묠니르묘묘 2022. 2. 18. 17:34

엔티티 매니저 팩토리(Entity Manager Factory)는 말 그대로 엔티티 매니저(Entity Manager)를 만드는 공장이다.

이 공장을 만드는 비용은 아주 많이 든다. 그래서 1개만 만들어서 애플리케이션 전체에 공유하여 쓰도록 설계되어 있다.

하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다.

일반적인 웹 애플리케이션

엔티티 매니저 팩토리는 여러 쓰레드가 동시에 접근해도 안전하여 서로 다른 스레드 간 공유해도 문제가 없다.

엔티티 매니저는 여러 쓰레드가 동시 접근하면 동시성 문제가 발생하기에 쓰레드간 공유를 하면 안된다.

 

위 그림은 요청이 생길 때 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하여 동작하게 된다.

엔티티 매니저는 DB 연결이 필요한 시점까지 커넥션(conn)을 얻지 않는다.

그래서 EntityManager1은 얻지않고 EntityManager2만 커넥션을 얻는다.

보통 트랜잭션을 시작할 때 커넥션을 얻는다.

 

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

이것은 J2SE 환경에서 사용하는 방법이다. 

 

 

엔티티 매니저 팩토리와 엔티티 매니저 생성 방법은 다음과 같다.

엔티티 매니저 팩토리는 META-INF/persistence.xml에 있는 정보를 바탕으로 생성한다.

그리고 이 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하여 동작하게 되는 것이다.

 

 


자바 ORM 표준 JPA 프로그래밍 / 김영한 지음 / 에이콘출판주식회사 출판