Spring ‐ 캐시(Cache) 추상화 - woojin-playground/Backend-PlayGround GitHub Wiki
📚 캐시의 사용
- 캐시는 서버 부담을 줄이고 성능을 높이기 위해 사용되는 기술이다.
- 어떤 요청을 처리하는데 계산이 복잡하거나 혹은 DB에서 조회되는데 오랜 시간이 걸리는 경우 결과를 저장해두고 가져옴으로써 빠르게 처리할 수 있다.
- 캐시는 값을 저장해두고 불러오기 때문에 데이터의 변동성이 적은 경우에 용이하다.
- 만약 매번 다른 결과를 돌려줘야 하는 상황에 캐시를 적용하게 되면 캐시 업데이트도 해줘야 하고 잘못하면 데이터의 일관성이 낮아지게 되는 문제가 발생할 수 있다.
📚 Spring Cache 추상화
- 스프링은 AOP 방식으로 편리하게 메서드에 캐시 서비스를 적용할 수 있는 기능을 제공한다.
- 캐시 서비스는 트랜잭션과 마찬가지로 AOP를 이용해 메서드 실행 과정에 적용된다.
- 이를 통해 캐시 관련 로직을 핵심 비즈니스 로직과 분리할 수 있고 스프링 캐시 구현 기술에 종속되지 않도록 추상화된 서비스를 제공해 환경이 바뀌거나 적용할 캐시 기술을 변경하더라도 애플리케이션 코드에 영향을 주지 않는다.
📚 Spring Cache 어노테이션 사용법(@Cacheable, @CachePut, @CacheEvict)
- Spring에서
@Cacheable과 같은 어노테이션을 사용하려면 별도의 선언이 필요하다.
- 이 때,
@EnableCaching 어노테이션을 추가해야한다.
@EnableCaching
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 세부 구현 ....
}
}
캐시를 저장/조회하기 위한 @Cacheable
- 클래스나 인터페이스에서 캐시를 지정할 순 있지만 상당히 드물고, 보통 메서드 단위로 적용한다.
- 캐시를 적용할 메서드에
@Cacheable 어노테이션을 붙여주면 캐시에 데이터가 없을 경우에는 기존 로직(DB 조회나 등등)을 실행한 후에 캐시에 데이터를 추가하고, 만약 캐시에 데이터가 있다면 캐시의 데이터를 반환하게 된다.
@Cacheable(cacheManager = "cacheManager", cacheNames = MARKET_TOP_NET_TRADE_VALUE, keyGenerator = "marketCacheKeyGenerator")
public Aclass getAclass() {
// 세부 구현
}