Develope/DataBase

[JPA] 영속성 컨텍스트

고로이 2021. 8. 12. 22:51
반응형

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

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

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

www.inflearn.com

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330

 

자바 ORM 표준 JPA 프로그래밍 - 교보문고

스프링 데이터 예제 프로젝트로 배우는 전자정부 표준 데이터베이스 프레임 | ★ 이 책에서 다루는 내용 ★■ JPA 기초 이론과 핵심 원리■ JPA로 도메인 모델을 설계하는 과정을 예제 중심으로

www.kyobobook.co.kr


 

 

** JPA 에서 가장 중요한 부분 : jpa 동작 원리

 

1. 영속성 엔티티란?

  • '엔티티를 영구 저장하는 환경'이라는 뜻
  • EntityManager.persist(entity)
  • 영속성 컨텍스트는 논리적 개념으로 눈에 보이지 않는다.
  • Entity 매니저를 통해 접근

 

cf) 엔티티 생명 주기

  • 비영속 (new/transient)
    • 영속 컨텍스트에 속하지 않는, 객체를 생성만 한 상태
  • 영속 (managed)
    • persist 함수를 통해 엔티티 매니저가 영속 컨텍스트로 관리
    • 커밋하는 시점에 디비와 연동됨
  • 준영속 (detach) : 영속성 컨텍스트에서 삭제
  • 삭제 (removed) : 디비에서 삭제?

 

App과 DB사이의 중간계층임

 

2. 영속성 컨텍스트의 사용 이점 

  • 1차 캐시 => 큰 성능상승은 없음
    • 캐시에서 우선 조회하고 없으면 디비에서 조회
    • 디비에서 조회 후 캐시에 저장 
  • 동일성(identity) 보장
    • 캐시에서 가져오는거라 같은 엔티티 (Swallow Copy?)
    • 트랜잭션 격리 수준을 DB가 아닌 애플리케이션 단위에서 가져옴
    • == 는 true
  • 트랙잭션을 지원하는 쓰기 지연 => 이점이 크진 않음
    • persist하면 쓰기지연 저장소에 저장하고 insertSQL 작성
    • 커밋 시점에 flush됨
    • 쓰기지연 : 버퍼링을 모아서 write
  • 변경 감지 ( dirty checking)
    • set하면 persist/update하지 않아도 됌. 커밋시점에 엔티티 반영
    • set을 두번해도 update 쿼리는 한번만 실행
    • 1차 캐시의 스냅샷(최조 읽어온 시점의 값)과 비교함
  • 지연 로딩

 

** FLUSH : 영속성 컨텍스트의 변경내용을 디비에 반영

  • 영속성 컨텍스트를 비우는게 아니라 반영하는 것
  • 순서
    • 변경 감지
    • 수정된 엔티티들을 지연 sql 저장소에 증록
    • 쿼리를 db로 전송
  • 호출방법
    • 직접호출 : em.flush
    • 자동호출 : commit , jpql 쿼리 실행(캐싱디비를 쓰지 않고 디비에 직접 접근하기 떄문에 초기화)
  • 옵션
    • AUTO
    • COMMIT : 관계없는 테이블을 조회하거나 할 댸(사실상 별다른 이점 없음) 
반응형