📌 캐시에 대한 자세한 개념들은 아래 포스팅을 참고해주세요.
<[JPA] 캐싱(Caching)과 영속성(persistence)>
캐시는 트랜잭션과 마찬가지로 AOP를 이용하여,
캐시 관련 로직을 핵심 비즈니스 로직으로부터 분리할 뿐만 아니라, 메서드에 손쉽게 캐시 기능을 적용할 수 있습니다.
또, Spring은 캐시 구현 기술에 종속되지 않도록 추상화된 서비스를 제공하고 있기 때문에 환경이 바뀌거나 적용할 캐시 기술을 변경해도 애플리케이션 코드에 영향을 주지 않습니다.
build.gradle
에 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-cache'
Application 범위에 @EnableCaching
애너테이션 추가
메서드에 @Cacheable
/@CachePut
/@CacheEvict
애너테이션을 붙여 캐시 사용
@Cacheable
➜ 캐시를 저장/조회를 위함
@CachePut
➜ 캐시 저장 만을 위함
@CacheEvict
➜ 캐시 제거를 위함
@Cache
의 속성인 usage의 값으로 CacheConcurrencyStrategy
를 설정해서 캐시의 동시성 전략을 설정할 수 있음!!
READ_ONLY
➜ 읽기 전용으로 사용 (update 하려고 하면 exception을 던짐)
➜ 간단하고 성능이 좋음
➜ 항상 변하지 않는 데이터를 대상으로 사용하는게 좋음
NONSTRICT_READ_WRITE
➜ 객체 동시 수정 등에 대한 고려를 전혀 하지 않고 캐싱
➜ 이 방식은 하나의 객체가 동시에 수정될 가능성이 거의 없는 경우에 사용
READ_WRITE
➜ 엄격한 읽기/쓰기로 두 개 이상의 스레드에서 동시 수정할 가능성에 대해서 고려하고 만들어야 함