* Entity Manager란?
Entity Manager는 내부적으로 영속성 컨텍스트를 유지하며, 현재 관리 중인 엔티티 객체들을 캐싱하고 관리한다.
* Entity Manager 생성 과정
1. 엔티티 매니저 팩토리 생성
JPA를 시작하기 위해 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
엔티티 매니저 팩토리를 생성할 때, JPA 구현체에 따라서 데이터베이스 커넥션 풀도 생성할 수 있으므로 비용이 크다. 따라서 엔티티 매니지 팩토리는 애플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용해야 한다.
2. 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다. 이 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 CRUD 할 수 있다. 한편, 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안된다.
3. 종료
em.close();
emf.close();
사용이 끝난 엔티티 매니저와 엔티티 매니저 팩토리는 종료해야 한다.
* 엔티티 매니저가 스레드 간에 공유하거나 재사용하면 안되는 이유?
여러 스레드가 동일한 EntityManager 인스턴스를 공유하면, 각 스레드에서 수행된 변경 사항이 다른 스레드의 영속성 컨텍스트에도 영향을 미칠 수 있다. 즉 트랜잭션 중 하나가 커밋되면서 다른 트랜잭션에서 원하는 결과가 나올 위험이 있다는 것이다. 따라서 thread-safe 하지 않으므로 동시성 문제가 발생할 수 있다.
'Java > JPA' 카테고리의 다른 글
[JPA] JPA 기초 및 개념 (0) | 2025.02.11 |
---|