EntityManager Factory와 EntityManager

데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다. 엔티티 매니저가 필요할 때마다 엔티티 매니저 팩토리에서 생성하면 된다. 웹 애플리케이션을 개발한다고 하면 엔티티 매니저 팩토리를 통해 고객의 요청이 올 때마다 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터베이스 커넥션 풀을 통해 DB에 접근한다.

엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 따라서 엔티티를 저장하는 가상의 데이터베이스라고 생각하면 된다. 엔티티 매니저는 데이터베이스 연결이 필요한 시점까지 커넥션을 얻지 않고 보통 트랜잭션을 시작할 때 획득한다.

엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간에 공유할 수 있지만, 엔티티 매니저는 동시성 문제가 발생하므로 절대 공유하면 안된다.

영속성 컨텍스트

JPA의 내부 구조가 어떻게 동작하는지 이해하려면 영속성 컨텍스트를 이해해야 한다. 영속성 컨텍스트란 엔티티를 영구 저장하는 환경으로, 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않지만 엔티티 매니저를 통해 접근하고 관리할 수 있다.

엔티티의 생명주기

엔티티에는 4가지 상태가 존재한다.

Untitled

영속성 컨텍스트 2