JPA
영속성 컨텍스트 이점을 아라보자
winwin-k9
2024. 2. 3. 15:45
영속성 컨텍스트를 사용하는 이점
1차캐시
영속성컨텍스트에는 1차캐시가 존재한다.
조회할 때 em.find시도를 하게되면 영속성 컨텍스트에서 DB가 아닌 1차 캐시를 확인한다.
이때 값이 존재하지 않는다면 DB를 조회하고 → 가져온 값을 캐시에 저장하게 된다.
- 이후 값을 불러올 때면 캐시만 조회하면 된다.
동일성 보장
1차 캐시로 반복 가능한 읽기(REPEATABLE READ) 등급의 트랜잭션 격리 수준을 D가 아닌 어플리케이션 차원에서 제공
- 즉 == 비교가 가능해진다.
쓰기지연
커밋하지 전 까지 모든 SQL문을 보내지 않고 저장하고 있다가 Commit시에 DB에 쿼리를 날린다.
- 이때 쿼리는 쓰기지연 SQL저장소에 저장되어 쌓고있다.
즉, 버퍼의 기능을 하므로 JPA를 사용하면서 성능저하를 발생시키지 않는다.
변경감지
update의 코드 없이 값이 변경이 가능하다.
트랜잭션이 commit되는 시점에서 flush가 내부적으로 호출된다.
이때 엔티티와 스냅샷을 비교하는데
- 스냅샷은 값을 최초로 읽어온 시점을 말한다.
이 스냅샷과의 비교로 값이 변경이 되면 해당 쿼리를 쓰기지연 SQL저장소에 저장되고 DB에 반영된다.
728x90