You will be fine

<JPA> 영속성 컨텍스트

by BFine
반응형

inf.run/YoCS

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

JPA를 공부하면 항상 까먹는게 영속성 컨테이너에 대한 부분이다. 그래서 좀 정리하면 좋을 것 같아서 위의

김영한님의 JPA기본강의 내용과 내가 이해한 부분들을 정리해서 잊어버릴때마다 봐야겠다.

 

가. 동작

 a. 구성

  -  요청이 들어오면 EntityManagerFactory에서 EntityManager를 생성한다.

  -  EntityManager는 DB에 DBCP를 활용해 접근하며 영속성 컨텍스트를 내부에 가지고 있다. 

 

나. 영속성 컨텍스트 

 a. 무엇인가

  -  영속성 컨테이너는 Entity를 영구적으로 저장하는 환경(공간)이다.

  -  영속성 컨테이너는 최초 구동시 persistence.xml을 로딩한다.

  -  그림처럼 em(EntityManager).persist(Object)를 사용하여 Entity를 영속화 할수 있다.

 b. 1차 캐시 

  -  Entity는 영속화되어 1차캐시에 저장되며 Commit or Flush 할경우에 DB에 SQL로 입력된다. 

  -  하나의 트랙잭션에만 캐시하기 때문에 일반적인 캐시 역할을 하긴 어렵다. 

 

다. 특성

 a. 4가지 상태

  -  New(비영속), Managed(영속), Detached(분리), Remove(제거)

  -  Detached 상태는 한번 Manage 상태였다가 분리된 상태이다.

 

 b. 변경감지(더티 체크)

  -  영속화된 Entity의 상태가 변화하면 실제데이터도 변경해주는것을 의미한다. 

  -  영속성 컨테이너는 Entity의 스냅샷을 가지고 있기 때문에 Entity가 변경되면 1차캐시에서

       스냅샷과 비교를 통해 변경(Update)를 영속성 컨테이너 내부에 저장한다.

  -  그러므로 영속화된 Entity의 동일성을 보장한다. equal하다

 

 c. Flush

  -  영속성 컨테이너에 저장된 내용(Insert, Update)을 DB에 반영하는 부분이다. 

  -  Commit 하지않고 Update, Insert, delete 등 쿼리만 날려둔 것이다. 

  -  주의할점은 영속화된 Entity가 지워지는 것은 아니다.

 

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기