ORM (Object-Relational-Mapping)
JDBC, Hibernate, JPA, SpringDataJpa
JPA (Entity, PersistenceContext, EntityManager)
Entity of JPA
PersistenceContext of JPA
애플리케이션 내 변수로 데이터를 저장하고 관리할 때 애플리케이션이 종료되면 데이터는 모두 휘발('영속성'이 없다) / 이를 영속성 컨텍스트에 두어 '영속성'을 부여할 수 있다.
(아직 DB에 저장 된 것은 아니지만 휘발 되지 않는 직전의 상태랄까)
JPA는 Entity가 영속성 컨텍스트에 포함되어 있는지 여부에 따라 영속성을 부여할 지 말지를 결정
다음과 같은 역할들을 수행
Entity 상태 추적 : (Transient(new), Managed, Detached, Removed등)을 통해 트랜잭션 종료 시 어떤 Query를 날릴 지 결정
(트랜잭션이 끝나는 시점에 Managed, Removed 상태의 Entity들의 변경사항이 DB에 반영)
캐싱(Cahcing) : 영속성 컨텍스트 내 Entity를 Map형태로 임시 저장하여 동일한 Entity 조회 시 DB까지 가지 않고 해당Entity를 조회 가능하도록 함
지연로딩(Lazy Loading) 및 즉시로딩(Eager Loading) : 지연 로딩은 프록시 객체를 활용하여 연관된 Entity가 실제 필요한(프로퍼티가 호출된) 시점에 DB에서 로드할 수 있도록 함
트랜잭션(Transaction)을 통한 쓰기지연 : Entity를 수정한다고 바로 변경하지 않고 쓰기지연 저장소에 Query를 저장 해 두다가 최종적으로 트랜잭션이 종료되는 시점에 flush & commit
Dirty Checking : Entity의 변경 사항을 추적하여 어떤 쿼리를 보내야하는 지 판단하는 과정(Managed 상태에서만 수행 됨)
EntityManager of JPA