Jun's note

[JPA] 영속성 컨텍스트 개념, 이점 본문

Programming/JPA

[JPA] 영속성 컨텍스트 개념, 이점

junning 2022. 1. 13. 19:36
728x90

JPA에서 가장 중요한 2가지

  • 객체와 관계형 데이터베이스 매핑하기
  • 영속성 컨텍스트

1. 영속성 컨텍스트란?

  • “엔티티를 영구 저장하는 환경”이라는 뜻
  • 엔티티 매니저를 통해서 영속성 컨텍스트에 접근
  • EntityManager.persist(entity);  (-> 이를 통해 영속상태가 됨)
  • JPA 안에 존재

2. 영속성 컨텍스트 이점

  • 1차 캐시
  • 동일성(identity) 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 변경 감지(Dirty Checking)
    • em.update() 는 없음. 대신 set메서드를 통해 값을 수정
    • 스냅샷을 통해 값이 변경 되었는지 감지한다. (스냅샷에는 가장 처음 값이 저장됨)
    • 스냅샷과 값이 다르면, 3번 과정인 update 쿼리를 쓰기 지연 SQL 저장소에 생성한다.
  • 지연 로딩(Lazy Loading)

3. 플러시 (flush)

  • 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 (영속성 컨텍스트의 변경내용을 데이터베이스에 동기화)
  • 쉽게말하면, 쓰기 지연 SQL 저장소가 DB로 쿼리날리는 것이다.
  • 영속성 컨텍스트를 비우지 않는다.
  • 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨
  • 플러시 방법
    • em.flush() - 직접 호출
    • 트랜잭션 커밋 - 플러시 자동 호출
    • JPQL 쿼리 실행 - 플러시 자동 호출

 


참고
강의 : www.inflearn.com/course/ORM-JPA-Basic
서적 : <자바 ORM 표준 JPA프로그래밍> 김영한

 

Comments