카테고리 없음
Springboot 캐시 핸들링 하기(한번에 지우기)
구백군
2021. 1. 4. 12:04
반복적인 파라미터에 응답을 해줄 경우가 있다거나 조회가 빈번히 일어나는 API의 경우에는
캐싱 기능을 이용하면 정말 좋습니다.
40ms 걸리던 것도 (혹은 1초 이상이더라도) 10ms 이내로 응답을 반환할 수 있기에 DB 커넥션을 불필요하게 사용하지 않고 리소스를 덜 잡아 먹으며 동일한 응답을 할 수 있습니다.
해당 포스트에서는 게시글을 조회하거나 저장할 때를 예시로 하여 포스팅을 하도록 하겠습니다.
우선 캐싱 설정을 해주어야 합니다.
build.gradle에 해당 라이브러리를 추가해줍니다.
implementation 'org.springframework.boot:spring-boot-starter-cache'
캐시 설정 bean을 주입해줍니다.
@Configuration
@EnableCaching
public class CachingConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(
new ConcurrentMapCache("cache1"),
new ConcurrentMapCache("cache2")
));
return cacheManager;
}
}
이후에는 게시글을 조회하는 함수를 추가하는데 추가적으로 캐시저장 코드도 추가해줍니다.
@Caching(cacheable = {
@Cacheable("cache1"),
@Cacheable("cache2")
})
public Object getPost(String name){
// 디비 조회하는 코드
return 디비조회한 결과값;
}
굳이 두개를 써주지 않아도 되지만 한번에 여러개의 캐시도 설정 가능하다는 것을 보여드리고 싶었습니다.
게시글은 크게 여러 목록을 조회하는 게시글과
게시글을 하나 클릭했을 때 상세한 게시글 데이터를 불러옵니다.
만약에 페이징 처리에 대한 캐시와
단일 게시글 조회에 대한 캐시를 따로 관리한다면
게시글 테이블에 변화가 일어났을 경우에는 캐시를 지워주어야 합니다.
@Caching(evict = {
@CacheEvict(value="cache1", allEntries = true, cacheManager = "cacheManager"),
@CacheEvict(value="cache2", allEntries = true, cacheManager = "cacheManager")
})
public void savePost(Object object
repository.save(object);
}
위와같이 여러개의 캐시를 한번에 지울수도 있습니다.