티스토리 뷰

 

앞선 글에서 캐시를 삭제하는 부분이 빠졌었다.

 

사실, 서버 입장에서는 캐시를 만드는 것 보다 캐시를 삭제하는게 더 중요하다.

 

캐시를 삭제하지않고 계속 쌓게되면 100% 확률로 서버는 언젠가 죽기 때문이다.

 

이를 방지하기 위해 캐시를 꼭 삭제해야한다.

 

캐시 삭제 전략

일단 캐시의 삭제 전략은 크게 세가지가 있다.

(더 있으면 알려주세요..)

 

1. ID별로 만든 캐시를 하나씩 수동 삭제하기

2. 특정시간 마다 통으로 캐시 비우기

3. TTL(Time-to-Live)을 설정해 ID별 캐시가 살아있는 시간 설정

 

안정적으로 설계를 잘한다면 1번만으로 사용이 가능하겠지만, 예외 발생시 캐시를 삭제 안하고 넘어가는 경우가 분명 발생할 것이다.

 

때문에, 사용하지 않는 캐시를 주기적으로 삭제하는 2번 전략도 필요하다.

 

3번 TTL을 이용한 방법은 캐시를 사용후 확정적으로 삭제는 해주겠지만, 딜레이가 생기면 데이터에 접근이 불가하다는 단점이 있다. 

 

1. ID 별로 삭제하기

가장 일반적인 방법이 아닐까 싶다.

 

아래와 같이 매서드를 만든 후

public void clearCache(String id) {
    Cache cache = cacheManager.getCache("myCache");
    if (cache != null) {
        cache.evict(id);
    }
}

이렇게 사용하면 된다.

String message = "hello";
String id = cacheService.saveCache(message);
String cacheMessage = cacheService.getCache(id);
cacheService.clearCache(id);
// 이후에 아래와 같이 접근 시 null값 출력
String cacheMessage2 = cacheService.getCache(id);

 

2. 특정 시간마다 통으로 비우기

스케쥴러를 이용한 방법이다.

@Scheduled(fixedDelay = 1800000)
public void evictCache() {
    Cache cache = cacheManager.getCache("myCache");
    if (cache != null) {
        cache.clear();
    }
}

30분마다 캐시를 비우게 설정했다. 

 

추가적으로 해줘야할게 @Scheduled을 사용하기 위해서는 @EnableScheduling 어노테이션을 어딘가엔 붙여줘야한다.

 

가장 쉬운 방법은 그냥 프로젝트가 시작되는 Application 클래스에 붙이면된다.

 

3. TTL(Time-to-Live) 을 사용하기

이건 내가 사용한 org.springframework.cache.Cache 라이브러리에서 제공하지 않는 기능이다.

 

간단한 캐시 구현이여서 제외된 기능인 것 같은데, ehCache 에서는 제공하는 기능이다.

 

ehCache TTL 설정이라고 하면 쥬르륵 나오니 입맛에 맞는 설정 방법을 찾아가자.

 

참고로 xml을 따로 빼서 만들거나, 코드단에서 @Configuration 통해서 설정할 수 있다.

 

Redis에서도 쉽게 설정이 가능하니, 아예 인프라를 따로 설정하는 것도 방법이다.

 

마치며

필자는 수동 삭제와 스케쥴러를 함께 사용했다. TTL은 레디스로 넘어가면 캐시에 관한 내용을 새로 작성해볼 듯하다.

 

서버를 죽이고 싶지 않다면, 꼭 빼먹지 말고 설정하자.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함