영속성 컨텍스트

qkrrnjswo·2023년 7월 21일
0

공부 정리

목록 보기
8/24

영속성 컨텍스트란?

JPA가 엔티티를 영구 저장 하는 환경, 즉 JPA의 내부 동작 원리
app과 DB 사이에서 JPA가 객체(엔티티)를 관리하는 논리적 개념


엔티티의 생명주기

  1. 비영속(new/transient)
    : 영속성 컨텍스트와 전혀 관계가 없는 상태

  2. 영속(managed)
    : 영속성 컨텍스트에서 관리하는 상태

  3. 준영속(detached)
    : 영속성 컨텍스트에 관리되었다가 더 이상 관리 하지 않는 상태

  4. 삭제(removed)
    : 영속성 컨텍스트와 DB에서 삭제된 상태

식별자 값

엔티티를 관리하기 위해서는 서로를 구분할 수 있는 식별자 값이 필요하다.
SQL에서는 식별자를 @id로 지정한 값으로 구분한다.


환경 구성

  1. EntityManagerFactory가 요청이 올 때마다 한개씩 EntityManager를 생성해준다.

  2. EntityManager는 1차 캐시와 쓰기 지연 SQL 저장소를 가지고 있으며, 생성 비용이 거의 없다.

  3. EntityManager는 DB 커넥션 풀의 커넥션을 사용하여 DB를 사용한다. (필요시에만 커넥션을 획득)


EntityManager의 역할

  1. find() 호출 시 먼저 캐시에 정보가 있는지 확인한 뒤에 DB조회

  2. 조회한 값들은 조회한 시점의 데이터(스냅샷)로 캐시에 저장

  3. persist() 호출 시 1차 캐시에 변경될 데이터, 조회 시점의 스냅샷 둘을 저장, 쓰기지연SQL저장소에 SQL문 저장

  4. commit() 호출 시 쓰기 지연 SQL 저장소에서 flush를 통해 SQL문을 DB에 한번에 보냄

  5. flush란 영속 컨텍스트의 변경 내용을 데이터 베이스에 반영하는 것, flush() 호출 시뿐만 아니라 트랜잭션 커밋이나 JPQL 쿼리 실행 시에도 발생 할 수 있다


영속성 컨텍스트의 장점

  1. 캐시의 존재

  2. 동일성 보장
    : 식별자를 이용하여 같은 인스턴스를 반환

  3. 트랜잭션을 지원하는 쓰기 지연

  4. 변경 감지(Dirty Checking) 기능
    : JPA에서 지원하는 변경 감지라는 기능으로 엔티티를 변경할 수 있는 기능 제공


영속성 전이?

연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이기능을 사용
JPA는 cascade 옵션으로 영속성 전이를 제공
cascade는 ALL, PERSIST, REMOVE, MERGE, REFERESH, DETACH 같은 CascadeType이 있음

추가로 볼만한 것: https://colevelup.tistory.com/21

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

소중한 정보 잘 봤습니다!

답글 달기