JPA

JPA의 영속성 기본 개념 & 엔티티 매니저

비뀨_ 2022. 6. 23. 01:33

영속성 ( Persistence )


영속성이란 사전의 단어대로 영원히 존재하는 속성이다.

보통 데이터베이스(DB)를 접해봤다면 한번 쯤은 들어봤을 말이다.

 

JPA에서는 영속성 컨텍스트라는 개념이 중요하다.

앞에서 영속성의 의의는 말했으니 컨텍스트만 알면 영속성 컨텍스트가 무슨 역할을 하는지 알 수 있다.

컨텍스트(Context)는 사전적으로는 문맥의 뜻이지만, IT 쪽에서는 '환경 정보, 환경' 정도의 뜻이 있다.

 

합쳐서 말하면 영속성 컨텍스트( Persistence Context )는 영구적으로 저장하는 환경이다.

 

JPA에서  영속성 컨텍스트는 엔티티 매니저를 하나 생성할 때 생성 된다.

 

엔티티 매니저 팩토리 ? 매니저


간단하게 엔티티 매니저를 설명하자면 공장에 고용된 Entity를 관리하는 사람이다.

 

믿기 어려워도 EntityManagerFactory(공장) 과 EntityManager (매니저)이다.

JPA는 ORM인데 DB를 객체기반으로 연결해 주는데, 기존의 RDBMS (관계형 데이터베이스) 에서의 테이블이 되는 객체를 JPA에서 Entity라고 한다.

 

그럼 다시 단어을 분해해보면

  • EntityManagerFactory : EntityManager를 고용하는( 만들어내는 ) 공장
  • EntityManager : 엔티티를 관리하는 관리자.

엔티티를 관리한다고 했는데 어떤걸 관리하는 것이라고 하는걸까??

 

EntityManager는 Entity를 저장(Create),조회(Read), 수정(Update), 삭제(Delete)  등을 한다.

RDBMS에서 DB가 하는 CRUD의 역할을 할 수 있다. 한마디로 가상의 DB의 일을 하는 애라고 생각하면 될 것 같다. 

 

  • 공장을 짓는데 ( EntityManagerFactory 를 생성하는데)에는 비용이 엄청 많이 들지만, 튼튼하고 여러 사람이 드나들 수 있다.
    • 쓰레드가 동시에 접근이 가능하고 공유가 된다.
  • 사람을 쓰는건 공장짓는 것보다 싸지만, 창고에서 물건 나르는 동시에 식당에서 밥을 먹을 수 없는 것처럼 EntityManager는 비용이 적게 들지만 한 곳에서만 쓸 수 있다.
    • 쓰레드가 동시에 접근이 불가하다.

 

JPA의 구현체들은 EntityManagerFactory를 생성할 때 Connection Pool 이란 걸 만드는데 EntityManager가 실제로 일할 때 Connection Pool에서 Connection을 가져다 쓴다.