말 그대로 Entity Manager를 생성하는 객체이다.
생성 비용이 크기떄문에 애플리케이션 시작시 한번 생성되고, 종료될떄 닫힌다.

요청이 들어올때마다 EntityManagerFactory는 요청 1개당 EntityManager를 1:1로 붙여준다.
또한 EntityManager는 Connection pool의 Connection과 1:1로 붙여진다.
만약, DB 연결이 필요하지 않다면 필요한 시점(ex. 트랜잭션)에 Connection을 얻는다.
EntityManager 생성
EntityManager는 데이터베이스와 상호작용 하며 엔티티를 관리한다.
EntityManagerFactory은 싱글톤 객체이다.
하나의 EntityManagerFactory 인스턴스는 애플리케이션 전체에서 공유되기 때문이다.
생성 비용이 높음
Connection Pool초기화, 캐시설정 등등...
Thread-safe
요청 하나(Thread)당 1개의 EntityManager를 붙여준다. 그러므로 여러 스레드가 동시에 접근해도 안전하다. 엔티티 매니저가 여러 스레드가 동시에 접근하면, 문제가 발생하므로 조심해야 된다.
생명주기
EntityManagerFactory는 애플리케이션 전체에서 공유된다.
6.Connection Pool 관리
EntityManagerFactory가 생성될떄 DB 설정 정보(persistence.xml, application.properties 등)을 기반으로 DB Connection Pool도 초기화 한다.
2차 캐시 관리
2차 캐시는 애플리케이션 전역에서 데이터베이스 요청을 줄이기 위해 사용된다.
구현체에 따라 동작
EntityManagerFactory는 JPA 표준 인터페이스로, 특정 구현체(Hibernate, EclipseLink 등)에 따라 구현체가 다를 수 있다.