2차 캐시
vs 1차 캐시
- 1차 캐시는 영속성 컨텍스트를 통해 이루어진다.
- 1차 캐시는 하나의 트랜잭션이 시작하고 종료할 때 까지만 유효하다.
- OSIV(Open Session In View)를 이용하면 클라이언트의 요청이 들어오고 해당 요청이 끝날때 까지 1차 캐시를 유효하게하지만 애플리케이션 관점에서 DB에 대한 접근 횟수를 줄이기에는 역부족이다.
2차 캐시에 대하여
- 애플리케이션 레벨에서 공유되므로
공유 캐시(shared cache)
라 부르기도 한다. - 애플리케이션 종료시 까지 캐시가 유지된다.
- 1차 캐시에 원하는 Entity가 없을 때 2차 캐시를 뒤지고, 이 때에도 없다면 DB를 조회헤 2차 캐시에 해당 Entity를 저장한다. 그리고 해당 Entity에 대한 복사본을 1차 캐시로 반환해준다. 이는 여러 곳에서 같은 객체를 동시에 수정하는 문제를 방지해준다.
Persistenct Unit
범위의 캐시이다.- 데이터베이스 기본키를 기준으로 캐시하지만, 영속성 컨텍스트가 다르면 객체의 동일성(a==b)을 보장하지 않는다.
설정방법
@Cacheable @Entity public class Member { @Id @GeneratedValue private Long id; ... }
와 같이
@Cacheable
어노테이션을 사용해준다.<persistencce-unit name="2ndCache"> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> </persistencce-unit>
와 같이
persistence.xml
에shared-cache-mode
를 설정함으로써 persistence unit 단위 캐시를 적용해준다.
'Backend > SpringBoot-JPA' 카테고리의 다른 글
@RestController 어노테이션 (0) | 2021.04.29 |
---|---|
Optimistic/Pessimistic Lock (1) | 2021.04.19 |
@Transactional (0) | 2021.03.21 |