영속성 컨텍스트
- ORM - Object Relation Mapper
- 테이블과 자바의 오브젝트를 매핑해주는 프레임워크
Entity
- RDB의 테이블에 해당하는 자바 오브젝트
EntitiyManagerFactory,
- Entity를 관리하는 EntityManager 생성하는 공장
- 스레드에 안전하다.
- 비용이 비싸 하나만 만들어 두고 엔티티를 관리해 줄 수 있는 EntityManager를 생성하는 팩토리성 클래스이다.
EntityManager
- EntityManager는 엔티티를 저장하고, 수정, 삭제 CRUD 등 엔티티와 관련된 모든 일을 처리한다.
- 스레드에 안전하지 않다. 여러 스레드에서 동시에 접근할 경우 동시성 이슈가 발생할 수 있다.
- 엔티티 매니저는 스레드가 시작할 때 커넥션을 획득한다. > 각각 다른 스레드의 요청 스레드 세이프 하지 않기 때문에 팩토리가 각각 요청에 맞는 매니저를 생성한다. > 엔티티 메니저는 디비 커넥션 풀을 관리하는 녀에서 커넥션을 각각 가져와 디비와 연결작업을 한다. > 커넥션들은 디비 커밋이 일어날 때 그때 커넥션을 가져와 사용하는 구조로 되어있다.

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

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

* 비영속(new / transient) * 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(managed)
- 영속성 컨텍스트에 저장된 상태
- 준영속(detached)
* 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(remove)
- 삭제된 상태
Cusotomer 엔티티를 통한 영속성 컨텍스트 이해
- 저장
