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 프로그래밍 / 김영한 지음 / 에이콘출판주식회사 출판