-
캐싱 - 슬라이딩 윈도우 기법DB 2024. 6. 2. 15:58
슬라이딩 윈도우 기법(Sliding Window Technique)을 캐싱 전략에서 사용하면 캐시 키의 만료 시간을 분산시켜 대량의 캐시 키가 동시에 만료되는 상황을 방지하는 전략입니다. 이를 통해 한꺼번에 많은 요청이 DB로 몰리는 것을 피하고, 시스템의 부하를 줄일 수 있습니다. 슬라이딩 윈도우 기법은 캐시의 TTL(Time-To-Live)을 연장하는 방식으로 구현됩니다.
### 슬라이딩 윈도우 기법의 동작 방식
1. **초기 캐싱 및 TTL 설정**:
- 캐시 키를 처음 설정할 때 기본 TTL을 부여합니다.
- 예를 들어, 특정 데이터의 캐시 TTL을 1시간(3600초)로 설정합니다.
2. **데이터 접근 시 TTL 연장**:
- 클라이언트가 캐시된 데이터에 접근할 때마다 해당 키의 TTL을 연장합니다.
- 이를 통해 캐시 키가 자주 접근되는 경우 만료 시간이 계속 연장되어 만료 시점을 분산시킬 수 있습니다.
### 구현 예시
다음은 Spring Boot와 Redis를 사용하여 슬라이딩 윈도우 기법을 구현하는 예시입니다.
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class CacheService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private static final long BASE_TTL = 3600; // 1 hour in seconds
public String getValue(String key) {
String value = redisTemplate.opsForValue().get(key);
if (value == null) {
// 캐시 미스 발생 시 DB에서 데이터 조회 및 캐시 갱신
value = fetchValueFromDB(key);
redisTemplate.opsForValue().set(key, value, BASE_TTL, TimeUnit.SECONDS);
} else {
// 캐시 히트 발생 시 TTL 연장
redisTemplate.expire(key, BASE_TTL, TimeUnit.SECONDS);
}
return value;
}
private String fetchValueFromDB(String key) {
// DB에서 데이터를 조회하는 로직 (예시)
// 실제 구현에서는 DB 접근 로직을 작성합니다.
return "FetchedValueFromDB";
}
}
```
### 동작 예시
1. **초기 캐싱**:
- 클라이언트가 데이터에 처음 접근하여 캐시가 없는 경우, `fetchValueFromDB` 메서드를 호출하여 DB에서 데이터를 가져옵니다.
- 가져온 데이터는 Redis에 캐시되며, 기본 TTL(1시간)이 설정됩니다.
2. **데이터 접근 시 TTL 연장**:
- 클라이언트가 캐시에 저장된 데이터에 접근할 때마다 `getValue` 메서드가 호출됩니다.
- 데이터가 캐시에 있는 경우(`value != null`), TTL이 연장됩니다.
- 예를 들어, 데이터에 30분 후 다시 접근하면 TTL이 1시간으로 연장됩니다.
### 장점
- **만료 시점 분산**: 데이터에 자주 접근할수록 TTL이 계속 연장되므로, 특정 시점에 대량의 키가 동시에 만료되는 것을 방지할 수 있습니다.
- **부하 분산**: 캐시 갱신이 분산되어 DB에 몰리는 부하를 줄일 수 있습니다.
### 단점 및 주의사항
- **빈번한 접근이 필요한 경우**: TTL 연장은 데이터 접근 시마다 수행되므로, 접근이 매우 빈번한 경우에는 성능에 영향을 줄 수 있습니다.
- **메모리 관리**: 캐시된 데이터가 자주 접근되어 TTL이 연장되면 메모리 사용량이 증가할 수 있으므로, 적절한 메모리 관리가 필요합니다.
### 결론
슬라이딩 윈도우 기법은 TTL 연장을 통해 캐시 키의 만료 시점을 분산시키는 유효한 방법입니다. 이를 통해 시스템의 부하를 분산하고 안정성을 높일 수 있지만, 적용 시 성능 테스트와 메모리 관리를 신중히 고려해야 합니다.'DB' 카테고리의 다른 글
MySQL Workbench의 VISUAL EXPLAIN (0) 2024.06.25 실행계획, MySQL HINT (0) 2024.06.21 인덱스 (0) 2024.04.02 인덱스 B-Tree (0) 2024.03.26 격리수준 (0) 2024.03.26