JPA에서 가장 기초가 되는 개념은 Entity와 영속성 컨텍스트(Persistence Context)이다.

이 두가지의 개념을 확실하게 잡고 시작해야 JPA의 생명주기를 이해하는 것이 쉬워진다.

 

JPA는 Mybatis와 같은 ORM(Object Relationcal Mapping)으로 핵심 개념은 객체와 RDBS를 연결해준다는 것이다

mybatis의 경우 sqlsession과 mapper를 주로 이용하여 작업이 이루어진다면

JPA는 영속성 컨텍스트를 통해 Entity를 어떻게 매핑시키냐는 것이 쟁점이다.

 

먼저 mybatis만을 이용해온 유저라면 엔티티(Entity)라는 개념이 낯설것이다.(나도 그랬다.)

mybatis에서는 주로 dto나 vo를 이용할 뿐이었지 엔티티라는 것을 따로 만들어 데이터베이스와 매핑할 객체를 따로 운용하지 않았기 때문이다.

 

 

Entity

엔티티는 쉽게 말해 DB의 TABLE에 대응하는 클래스라고 생각하면 편하다.

DB에서 데이터를 받아올 때 단순히 숫자값이 아닌 껍데기가 필요할 때 사용하는 것이다.

mybatis에서 resultType에 직접 어떤 타입으로 받을지 설정했던 것과 비슷하다고 생각한다.

 

EntityManager

mybatis의 sqlsession처럼 이 엔티티들을 관리해주는 것이 EntityManager이다.

EntityManager는 EntityMangerFactory에서 요청시에 생성되고, DB와 커넥션하여 데이터를 처리하게 된다.

그리고 이 EntityManger의 엔티티 운용 공간을 영속성 컨텍스트라고 한다.

 

영속성 컨텍스트(Persistence Context)

엔티티 객체가 관리되는 공간이라고 생각하면 됩니다.

 

영속성 컨텍스트를 이해하기위해선 '영속성'이라는 말과 엔티티의 생명주기에 대해 이해해야 합니다.

비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
영속(managed) 영속성 컨텍스트에 관리되는 상태
준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제(removed) 삭제된 상태

 

'영속'되어있다는 것은 엔티티가 영속성 컨텍스트에 의해 관리가 가능한 상황임을 의미합니다.

 

사진 출처 : https://vladmihalcea.com/a-beginners-guide-to-jpa-hibernate-entity-state-transitions/

 

이 정도가 JPA를 위해 이해해야할 엔티티와 영속성 컨텍스트에 대한 기본 개념인것 같습니다.

엔티티와 영속성 컨텍스트의 각종 특징과 장/단점에 대해서는 추후에 코드와 함께 포스트하겠습니다.

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

@Entity, @Id, @GeneratedValue, @PersistenceContext  (0) 2021.06.15

+ Recent posts