DevBoi

[JPA] 영속성 컨텍스트란? 본문

Develop/[JPA]

[JPA] 영속성 컨텍스트란?

HiSmith 2022. 3. 17. 20:49
반응형

영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻이다.

애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다.

엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

 

-특징

엔티티 매니저를 생성할때 하나 만들어진다.

엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다.

 

-이점

  • 1차 캐시
    영속성 컨텍스트에는 1차 캐시가 존재한다. 엔티티를 영속성 컨택스트에 저장하는 순간 1차캐시에 객체가
    key,value값으로 저장된다. 엔티티 매니저가 값 을 조회할때 엔티티가 존재하는 경우 DB조회를 하지 않고, 바로 리턴해준다.

  • 동일성 보장
    영속성 컨택스트에서 꺼내온 객체는 동일성이 보장된다.
    같은 엔티티를 두번 조회하는 경우 두개의 엔티티는 동일 엔티티이다.
    1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 단에서 제공한다.

  • 트랜잭션을 지원하는 쓰기 지연
    트랜잭션 내부에서 persist가 일어날때 엔티티는 1차캐시에 저장이되고 쓰기 지연 SQL저장소라는 곳에 insert 쿼리들을 생성해서 쌓아놓는다.트랜잭션이 commit되거나 flush되는 경우, 저장소에 저장되어있는 SQL들을 DB에 보내게 된다.

  • 변경 감지
    JPA에서는 엔티티를 업데이트할때 update(),persist() 와 같은 메소드로 영속성 컨텍스트에 알려주지 않아도 된다.
    이것이 가능한건 변경감지 기능을 지원해주기 때문이다.
    엔티티 매니저가 엔티티를 1차캐시에 저장할때 스냅샷도 같이 저장한다. 트랜잭션이 커밋하는 시점에서 엔티티와 스냅샷을 비교해서
    변경사항이 있으면 Update SQL을 알아서 생성해서 쓰기지연 저장소에 SQL을 저장한다.

  • 지연 로딩
    처음에 객체를 가져올때, 프록시 객체를 가져오고, 해당 엔티티의 값을 사용할때 프록시 객체는
    영속성 컨텍스트에게 타겟 객체에 대한 값을 요구, 해당 값을 DB에서 영속성 컨텍스트가 가져오는 역할을 해준다.
    따라서, 즉시 엔티티의 값을 가져오는 것이 아닌, 실제 엔티티의 값이 필요할때 엔티티를 조회할 수 있는 이점이 있다.

 

*추가 지식

EntityMangerFactory는 DB당 딱 한대만 생성이 되어야하고,

고객요청이 올때 마다 즉 쓰레드가 생성될때마다 EntityManger를 생성하여, 이 매니저가 DB connection pool을 사용하여 DB에 접근 할수 있도록 해야한다.

 

 

 

반응형

'Develop > [JPA]' 카테고리의 다른 글

[JPA] N+1 문제란  (0) 2022.03.18
[JPA] JPA 동작과정 (조회,저장, 수정)  (0) 2022.03.17
[JPA] 엔티티 생명 주기  (0) 2022.03.17
[JPA] JPA 관련 기초 개념 정리  (0) 2022.03.17
[JPA] Bulk 연산  (0) 2022.03.11