개발자 되어버리기
Springboot 캐시 핸들링 하기(한번에 지우기) 본문
반복적인 파라미터에 응답을 해줄 경우가 있다거나 조회가 빈번히 일어나는 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);
}
위와같이 여러개의 캐시를 한번에 지울수도 있습니다.