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

데이터 베이스를 하나만 생성하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다.(하나만 생성해서 내부에서 공유)

// 공장 만들기, 비용이 많이 든다.EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook")

위 코드를 호출하면 persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 생성한다.

필요할 때마다 엔티티 매니저 팩토리에서 엔티티 매니저생성하면 된다.

//공장에서 엔티티 매니저 생성, 비용이 거의 안든다.EntityManager em = emf.createEntityManager()

엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간에 공유해도 되지만,

엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드간에 절대 공유하면 안된다.

하나의 EntityManagerFactory에서 다수의 EntityManager를 생성했다.

엔티티 매니저는 데이터베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다.

하이버네이트를 포함한 JPA 구현체들은 EntityManagerFactory를 생성할 때 커넥션풀도 만든다.