[스프링] 캐시 만료 전략

캐싱은 성능을 향상시키고, 시스템의 응답 속도를 개선하는 데에 유용합니다. 스프링에서는 캐싱을 지원하기 위해 @Cacheable 어노테이션을 제공합니다. 하지만 캐시는 만료될 수 있기 때문에 적절한 캐시 만료 전략을 선택하는 것이 중요합니다.

캐시 만료 전략

1. 시간 기반 만료

가장 일반적인 캐시 만료 전략 중 하나는 시간 기반 만료입니다. 이 전략은 캐시된 데이터가 일정 시간이 지나면 만료된 것으로 간주합니다. 스프링에서는 @Cacheable 어노테이션의 ttl 속성을 사용하여 캐시할 시간을 설정할 수 있습니다.

예를 들어, 다음과 같이 60초 동안 캐시를 유지하도록 설정할 수 있습니다.

@Cacheable(value = "myCache", key = "#id", ttl = 60)
public String getData(Long id) {
    // ...
}

2. 개별 항목 만료

특정 데이터가 변경될 때 해당 데이터만 캐시에서 제거하는 개별 항목 만료 전략도 있습니다. 이 경우 캐시된 데이터의 변경 시점을 기준으로 만료 여부를 결정합니다. 스프링에서는 @CacheEvict 어노테이션을 사용하여 특정 메서드가 호출될 때 캐시에서 항목을 제거할 수 있습니다.

@CacheEvict(value = "myCache", key = "#id")
public void updateData(Long id, String newData) {
    // ...
}

3. 외부 이벤트 기반 만료

어떤 데이터가 외부 이벤트에 영향을 받아 캐시에서 만료되어야 하는 경우, 외부 이벤트 기반 만료 전략을 사용할 수 있습니다. 이 경우 외부 이벤트를 감지하고 해당 이벤트에 연결된 캐시를 만료시키는 로직을 구현해야 합니다.

결론

캐싱은 성능 향상을 위한 중요한 전략이지만, 올바른 캐시 만료 전략을 선택하는 것이 중요합니다. 각 전략은 상황에 따라 적합한데, 시간 기반 만료와 개별 항목 만료는 일반적으로 많이 사용되는 전략이며, 외부 이벤트 기반 만료는 특정 상황에 적합한 전략입니다.

참고 문헌: