엔티티 매니저 팩토리(EntityManagerFactory)란?
엔티티 매니저를 생성할 수 있는 기능을 제공하는 팩토리 클래스이다.
thread-safe하기 때문에 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간 공유해서 재사용한다.
thread-safe한 기능을 요청 스코프마다 생성하기에는 비용(시간, 메모리) 부담이 크므로 application 스코프와 동일하게 싱글톤으로 생성해서 관리하는 것이 효율적이다.
따라서 데이터베이스를 사용하는 애플리케이션 당 한 개의 EntityManagerFactory를 생성한다.
엔티티 매니저(EntityManager)란?
엔티티 매니저는 엔티티를 저장하는 메모리 상의 데이터베이스를 관리하는 인스턴스이다.
엔티티를 저장하고, 수정, 삭제, 조회하는 등의 엔티티와 관련된 모든 일을 한다.
엔티티 매니저는 thread-safe하지 않기 때문에 동시성 문제가 발생할 수 있다.
따라서 스레드 간 공유를 하지 않고, web의 경우 일반적으로 request scope와 일치시킨다.
영속성 컨텍스트(PersistenceContext)란?
엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
영속성 컨텍스트는 엔티티를 key-value 방식으로 저장하는 저장소이다.
영속성 컨텍스트는 엔티티 매니저를 생성할 때 같이 하나 만들어진다. 그리고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 또 관리할 수 있다.
영속성 컨텍스트는 엔티티 매니저가 엔티티 객체를 저장하는 공간으로 엔티티 객체를 보관하고 관리한다.
엔티티 매니저가 생성될 때 하나의 영속성 컨텍스트가 만들어진다.
<엔티티의 생명주기>
비영속(관리x), 영속(관리O), 준영속(관리x(but, 언제든지 관리O)), 삭제 상태(em.remove())
'TIL' 카테고리의 다른 글
[24.08.27] Mac MariaDB 설치 및 외부 연결 (0) | 2024.08.28 |
---|---|
[24.08.26] Spring 간략한 구조 (0) | 2024.08.26 |
[24.08.19] SpringMybatis 내용 몇가지 간단 정리 (0) | 2024.08.19 |
[24.08.15] Servlet에서 궁금한점 몇가지 정리 (0) | 2024.08.15 |
[24.08.15] java, spring Annotation 정리 (0) | 2024.08.15 |