본문 바로가기
Spring/JPA

[JPA] 영속성 컨텍스트?

by 잭피 2020. 12. 20.

안녕하세요~ 잭코딩입니다!

이번에는 JPA 영속성 컨텍스트에 대해 글을 써보려고 합니다!

우캠 3주차에서 JPA 관련 미션을 수행하기 전에 학습한 내용을 정리해보려고 합니다

먼저 영속성 컨텍스트가 무엇인지 살펴볼까요?


영속성 컨텍스트(PersistenceContext) ?

"엔티티를 영구 저장하는 환경"이라는 뜻으로

영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어입니다

 

PersistenceContext는 논리적인 개념으로 눈에 보이지 않고, EntityManager를 통해서 접근할 수 있습니다

 

EntityManager를 통해 접근하는 PersistenceContext 

 

엔티티의 생명주기 

각 상태를 그림과 설명을 통해 살펴볼까요?

먼저 전체 엔티티의 생명주기는 아래와 같습니다 

엔티티 생명주기

비영속, 영속, 준영속, 삭제 상태를 각각 코드와 그림을 통해 설명드리겠습니다

 

비영속 (new/transient)

영속성 컨텍스트와 전혀 관계가 없는 새로운 상태를 의미합니다

단순히 객체를 생성한 상태를 의미합니다

Station station = new Station("사당역");
station.setLine("four");

 

비영속 상태

객체는 생성되었지만, 아직 EntityManager에서 관리되고 있지 않습니다

바로 이런 상태를 비영속 상태라고 합니다

 

영속 (managed)

Station station = new Station("사당역");
station.setLine("four");

EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();

// 이 시점부터 영속
em.persist(station);

em.persist()를 통해 객체를 저장하는 시점부터 영속성 컨텍스트에 관리되는 상태가 됩니다

즉, 영속 상태입니다

영속 상태

 

준영속 (detached)

영속성 컨텍스트에 저장되었다가 분리된 상태를 의미합니다

Station station = new Station("사당역");
station.setLine("four");

EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();

// 이 시점부터 영속
em.persist(station);

// 이 시점부터 준영속
em.detach(station);

영속 -> 준영속

준영속 상태의 객체는 더 이상 영속성 컨텍스트가 관리하지 않습니다

 

삭제 (removed)

삭제된 상태를 의미합니다

Station station = new Station("사당역");
station.setLine("four");

EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();

// 이 시점부터 영속
em.persist(station);

// 이 시점부터 삭제된 상태
em.remove(station);

 

영속 -> 삭제

 

영속성 컨텍스트의 이점

영속성 컨텍스트를 사용하면 무엇이 좋을까요?

 

1. 1차 캐시

2. 동일성(identity) 보장

3. 트랜잭션을 지원하는 쓰기 연산 

4. 변경 감지(Dirty Checking)

 

다음 포스팅에서 코드와 그림을 통해 이점들을 설명하겠습니다

 

jackjeong.tistory.com/116

 

[JPA] 영속성 컨텍스트의 이점

안녕하세요~ 잭코딩입니다! 이번에는 JPA 영속성 컨텍스트의 이점 5가지에 대해 글을 써보려고 합니다! 지난 시간에는 영속성 컨텍스트가 무엇인지 살펴보았습니다 jackjeong.tistory.com/115 [JPA] 영속

jackjeong.tistory.com

 

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

[JPA] 영속성 컨텍스트 이점  (0) 2020.12.20

댓글