안녕하세요~ 잭코딩입니다!
이번에는 JPA 영속성 컨텍스트에 대해 글을 써보려고 합니다!
우캠 3주차에서 JPA 관련 미션을 수행하기 전에 학습한 내용을 정리해보려고 합니다
먼저 영속성 컨텍스트가 무엇인지 살펴볼까요?
영속성 컨텍스트(PersistenceContext) ?
"엔티티를 영구 저장하는 환경"이라는 뜻으로
영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어입니다
PersistenceContext는 논리적인 개념으로 눈에 보이지 않고, EntityManager를 통해서 접근할 수 있습니다
엔티티의 생명주기
각 상태를 그림과 설명을 통해 살펴볼까요?
먼저 전체 엔티티의 생명주기는 아래와 같습니다
비영속, 영속, 준영속, 삭제 상태를 각각 코드와 그림을 통해 설명드리겠습니다
비영속 (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)
다음 포스팅에서 코드와 그림을 통해 이점들을 설명하겠습니다
'Spring > JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 이점 (0) | 2020.12.20 |
---|
댓글