본문 바로가기

spring/JPA

EntityManager와 EntityManagerFactory에 대해서

JPA를 공부하다보면 EntityMananger를 알게되는데 이것이 무엇을 하는지 잘 모르고 사용을 했었다. 이번에 한번 역할을 알아보고 어떤 기능을 하는지 알아보자.

EntityManager 의 역할?

엔티티를 관리하는 사람이라는 요놈을 이해화기 전에 엔티티가 무엇인지 알아야한다. 엔티티는 데이터 베이스와 연관이 깊은 용어이다.
엔티티는 유의미한 하나의 데이터 집합이라고 생각하면 된다. 예를 들어서 학생의 정보가 필요하면 학생의 정보를 담은 학생 엔티티를 조회하면 되고 수업의 정보가 필요하면 수업과 관련된 데이터를 담은 수업 엔티티를 조회하면되는 것이다.
애플리케이션에서 이런 데이터를 관리할 때, 객체 형태로 생성해서 관리하고 있으며 이들을 관리하는 객체가 EntityManager인 것이다.

역할은 무엇일까?

  1. 데이터 베이스에서 데이터를 가져오려면 일단 통신이 가능해야한다. 그래야 데이터를 가져올 수 있으니까!
    그래서 EntityManager는 이 연결을 관리해준다. Connection을 관리하면서 애플리케이션에서 데이터를 조회/수정/삭제/생성하도록 도와주는 것!
  2. 애플리케이션에서 관리하는 엔티티를 데이터 베이스에 저장시키고 변경시키고 삭제시키는 기능을 제공해야하는데 이런 기능을 수행해준다.
    이런 쿼리를 실행시키기 위해서는 트랜잭션이 필요한데 엔티티 메니저는 트랜잭션을 만들고 종료하는 기능도 제공하고 있으며 데이터 베이스의 데이터를 조작하는 역할을 수행하고 있다.
  3. 조회된 엔티티를 관리하는 역할을 수행한다. 조회된 엔티티의 변경사항이 있으면 변경 사항은 데이터 베이스에 반영되어야하지만 조회된 엔티티에도 동일하게 반영되어야한다. 이러한 매커니즘을 구현하기 위해서 조회된 엔티티의 상태를 저장하는 문맥(Context)가 필요한데 이것은 PersistenceContext이다.

영속성 컨텍스트 (PersistenceContext)

영속성은 데이터 베이스의 상태와 애플리케이션의 엔티티의 상태가 동일한 상태를 보장하는 속성이다. 그래서 영속성을 가진 엔티티를 수정하면 수정된 정보가 데이터 베이스에 반영되는 마법 같은 기능을 제공해주는데....
상태의 변화를 감지하기 위해서는 영속성을 가진 객체들이 무엇인지? 어떤 내용이 바뀌었는지에 대한 정보가 필요하다. 이런 정보를 담고 있는 문맥으로서 역할을 하는 것이 영속성 컨텍스트이다.

영속성을 제공하는 엔티티는 데이터 베이스의 상태와 동일함을 보장하기 특성 때문에 1차 캐시로 영속성 컨텍스트를 사용하여 애플리케이션의 성능을 높이는 방식을 제공한다.

EntityManagerFactory 의 역할?

EntityManager를 만들어주는 공장의 역할을 수행한다. 이 공장은 데이터 베이스 소스 마다 하나가 필요하기 때문에 스레드마다 생성되는 객체는 아니다.
스레드에서 EntityManager가 필요하면 EntityManagerFactory는 개인 매니저(EntityManager)를 배당해준다.
빠른 배당을 위해서 Connection Pool 에 미리 커넥션을 생성해서 관리하고 있는데 이 커넥션 풀에서 커넥션을 가져와서 매니저를 생성해주는 역할을 수행하는 것이 바로 EntityMangaerFactory이다.

'spring > JPA' 카테고리의 다른 글

[JPA] 영속성 컨테이너 관련 의문점.  (0) 2023.02.26