영속성 컨텍스트II

HakJun·2022년 10월 5일
1

Spring-JPA

목록 보기
4/7

💻JPA의 영속성 컨텍스트에 관해 공부하였다.

1. 엔티티 조회, 1차 캐시

  • 조회를 하면 jpa는 영속성 컨텍스트에서 1차캐시를 탐색한다. 1차캐시에 멤버엔티티가 있으면 그 값을 조회함, 디비를 거치지 않는다.

  • 없으면 JPA가 DB에서 조회하고, 1차캐시에 저장 이후 반환한다.

  • 실무에선 고객의 비즈니스가 끝나면 영속성, 1차캐시를 지우기 때문에 , 실제로 엄청난 효율이 좋진 않다.

  • 2차캐시 : 애플리케이션 전체가 공유하는 캐시

  • 비즈니스 로직이 굉장히 복잡한 경우에는 도움이 됨

  • EX)조회를 했는데 select 쿼리가 안나감. 1차캐시에서 가져왔다는 증거

  • 마찬가지로 처음 조회할때는 select하지만, 조회한 결과가 1차캐시에 남아있으므로 조회 쿼리가 한번만 실행된 것을 확인할 수 있다.


)

2. 영속 엔티티의 동일성 보장

1. 동일한 값을 find하여 비교했을 때 true값을 반환 하는 것을 확인할 수 있다. (==), 1차캐시가 있기 때문

3. 엔티티등록 트랜잭션을 지원하는 쓰기지연

  • 쓰기지연 sql저장소에 넣었다가 트랜잭션이 커밋되면 그 값들이 데이터베이스 에 flush된다.

4. 엔티티 수정 - 변경감지

  • 변경 시 별도로 PERSIST를 하지 않아도 자동으로 변경된다.
  • JPA는 커밋하는 시점에 내부적으로 FLUSH를 하는데, 이 때 엔티티와 스냅샷을 비교한다. 값을 읽어온 최초 시점을 스냅샷이라고 둔다. 멤버값을 변경했을때, 처음에 가져온 스냅샷과 엔티티를 비교한다. 이때 변경을 감지하면 UPDATE쿼리를 쓰기지연 SQL저장소에 저장하고, COMMIT시 데이터베이스에 FLUSH한다.
profile
백엔드 & 전공 공부

0개의 댓글