영속성 관리 - 영속성 컨텍스트2

최연재·2022년 7월 5일
0

JPA

목록 보기
2/11
  • 영속성 컨텍스트(애플리케이션과 DB사이에 무언가가 있는 것)의 5가지 이점
    • 1차 캐쉬
    • 동일성(identity)보장
    • 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
    • 변경 감지(Dirty Checking)
    • 지연 로딩(Lazy Loading)

1. 1차 캐시

  • 조회를 할 때, 1차 캐시 먼저 확인
  • 있으면 바로 가져오고(쿼리가 안 날라감), 없으면 DB에서 1차 캐시에 저장하고 가져오기(쿼리가 날라감)
  • 트랜잭션 단위로 영속 컨텍스트가 존재해서 딱히 이득은 없다고 함

2. 동일성(identity) 보장

  • '==' 비교를 보장
  • 마치 자바 컬렉션에서 똑같은 레퍼런스를 꺼낸 경우, 똑같다고 해주는 것과 같음(위의 1차 캐쉬가 있기 때문에 가능한 것)

3. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)

  • 엔티티를 1차캐시에 넣고, '쓰기 지연 SQL 저장소'에 JPA가 분석한 insert sql이 저장(아직까지 DB에 넣지 않은 상태)
  • transaction.commit();을 하는 시점에 '쓰기 지연 SQL 저장소'에 있던 것이 flush가 되면서 날라감.

4. 변경 감지(Dirty Checking)

  • EntityManager.persis(member);를 안하고 값만 바꿔도 update쿼리가 날라감
  • 스냅샷(값을 읽어온 시점에 스냅샷을 저장)을 이용하여, 엔티티와 스냅샷을 비교하여 비교된 것에 대해 update쿼리를 '쓰기 지연 SQL 저장소'에 저장하기 때문에 가능한 것

5. 지연 로딩(Lazy Loading)

이 글은 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 정리한 내용입니다.

profile
가보자고

0개의 댓글