학습목표
영속성 컨텍스트
- EntityManagerFactory, EntityManager 에 대해 학습합니다.
- 영속성 컨텍스트에 대해 학습합니다.
- 엔티티의 생명주기에 대해 학습합니다.
- 영속성 컨텍스트의 특징에 대해 학습합니다.
- 실습을 통해 영속성 컨텍스트에 대해 이해합니다.
EntityManagerFactory, EntityManager
Entity
RDB의 Table과 매핑되는 객체이다.
EntityManagerFactory
- Entity를 관리하는 EntityManager를 생산하는 공장이다.
- Thread Safe하다.
EntityManager
- EntityManager는 Entity를 저장하고, 수정하고, 삭제하고, 조회하는 (CRUD) 등 Entity와 관련된 모든 일을 처리한다.
- Thread Safe 하지 않다. 여러 Thread에서 동시에 접근할 경우 동시성 이슈가 발생할 수 있다.

영속성 컨텍스트
영속성 컨텍스트
- JPA를 이용하는데 가장 중요한 요소이다.
- 엔티티를 영구 저장하는 환경이라는 뜻이다.
- 엔티티매니저는 엔티티를 영속성 컨텍스트에 보관하고 관리한다.

영속성 컨텍스트의 특징
- 영속성 컨텍스트와 식별자 값
- 영속성 컨텍스트 안에서 관리되는 엔티티는 식별자 값을 반드시 가져야한다.
- key-value로 엔티티를 관리하기 때문이다.
- 영속성 컨텍스트와 데이터 베이스 저장
- JPA는 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 반영한다. (FLUSH)
- 플러시(flush)는 영속성 컨텍스트의 변경 내용을 DB에 동기화하는 작업인데, 이때 등록, 수정, 삭제한 엔티티를 DB에 반영한다.
- 영속성 컨텍스트가 엔티티를 관리함으로 얻는 이점
- 1차 캐시
- 동일성 보장
- 트랙잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
엔티티생명주기

비영속
영속
준영속
삭제
Customer 엔티티를 통한 영속성컨텍스트 이해
저장

조회
1차 캐시를 이용한 조회

DB를 이용한 조회

수정
![[변경감지 - dirty checking]
JPA 는 엔티티를 영속성 컨텍스트에 보관할 때, 최초 상태를 복사해서 저장해 두는데 이것을 스냅샷이라 한다. 그리고 플러시 시점에 스냅샷과 엔티티를 비교해서 변경된 엔티티를 찾는다. 만일 스냅샷과 비교하여 변경된 내용이 있을 경우 update Query를 수행한다. (변경 감지는 영속성 컨텍스트가 관리하는 영속 성태의 엔티티에만 적용이 된다.)](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F5f06e6f3-183a-4d68-8522-d21ff79fc8e5%2FUntitled.png?table=block&id=34a73327-7ffd-492b-a555-187ecc4619c2&cache=v2)
삭제
실습
과제
customer 엔티티를 이용하여 영속성컨텍스트의 엔티티 생명주기를 실습해본다.