Cache Strategy
Cache Strategy(캐시 전략) 는 캐시를 효과적으로 활용하여 시스템 성능을 최적화하고 데이터 일관성을 유지하기 위한 방법론이다.
캐싱은 데이터 접근 속도를 높이고, 데이터베이스 부하를 줄이며, 사용자 경험을 향상시키는 데 중요한 역할을 한다. 캐시 전략은 데이터의 특성과 접근 패턴에 따라 적절히 선택해야 한다.
캐싱 전략은 애플리케이션의 성능 최적화와 사용자 경험 개선에 핵심적인 역할을 한다. Cache Aside, Read Through, Write Through 등 다양한 전략은 각각의 장단점과 적합한 사용 사례를 가지고 있으므로, 애플리케이션의 특성과 요구사항에 맞는 최적의 전략을 선택하는 것이 중요하다. 또한, 지속적인 모니터링과 최적화를 통해 효율적인 캐싱 시스템을 유지해야 한다.
캐싱 전략의 필요성
캐싱은 데이터를 임시로 저장하여 반복적인 데이터 요청 시 빠르게 응답할 수 있도록 설계된 메커니즘이다. 하지만 캐싱이 제대로 설계되지 않으면 다음과 같은 문제가 발생할 수 있다:
- Stale Data(오래된 데이터): 원본 데이터가 변경되었지만 캐시에 반영되지 않아 잘못된 데이터를 반환.
- Cache Miss: 캐시에 데이터가 없어서 데이터베이스를 반복적으로 조회하는 상황.
- 자원 낭비: 불필요한 데이터를 캐시에 저장하거나, 자주 사용되지 않는 데이터를 관리하는 데 리소스를 낭비.
이를 해결하기 위해 적절한 캐싱 전략이 필요하다.
주요 캐싱 전략
읽기 중심(Read-heavy) 캐싱 전략
Cache-Aside (Lazy Loading)
- 동작 방식:
- 애플리케이션이 먼저 캐시를 조회.
- Cache Hit: 캐시에 데이터가 있으면 반환.
- Cache Miss: 캐시에 데이터가 없으면 데이터베이스에서 조회 후, 데이터를 반환하고 캐시에 저장.
- 특징:
- 가장 일반적으로 사용되는 전략.
- 캐시는 필요한 데이터만 저장하여 효율적.
- 캐시 장애 시에도 DB에서 데이터를 가져올 수 있어 탄력적.
- 단점:
- 첫 요청 시 Cache Miss로 인해 지연 발생.
- DB 업데이트 시 캐시를 동기화하지 않으면 오래된 데이터가 반환될 수 있음.
- 사용 사례:
- 전자상거래 사이트의 상품 정보 조회.
Read-Through
- 동작 방식:
- 애플리케이션이 캐시를 조회.
- Cache Hit: 캐시에 데이터가 있으면 반환.
- Cache Miss: 캐시가 DB에서 데이터를 가져와 저장 후 반환.
- 특징:
- Cache Aside와 유사하지만, DB 조회 및 캐시 갱신 작업을 캐시 시스템이 처리.
- 동기화 작업이 자동화되어 간단함.
- 단점:
- 초기 요청 시 Cache Miss로 인해 지연 발생.
- 캐시에 의존도가 높아 장애 시 전체 시스템에 영향을 줄 수 있음.
- 사용 사례:
- 읽기 작업이 많은 대규모 시스템.
Refresh-Ahead
- 동작 방식:
- TTL(Time-To-Live)이 만료되기 전에 자주 사용되는 데이터를 미리 갱신.
- 특징:
- Cache Miss를 최소화하여 성능을 향상.
- 자주 사용되는 데이터 예측이 중요.
- 단점:
- 잘못된 예측으로 인해 불필요한 리소스 낭비 가능.
- 사용 사례:
- 실시간 날씨 정보나 주식 가격처럼 자주 갱신되는 데이터.
쓰기 중심(Write-heavy) 캐싱 전략
Write-Around
- 동작 방식:
- 쓰기 작업 시 DB에만 데이터를 저장하고, 읽기 요청 시 Cache Miss가 발생하면 데이터를 DB에서 가져와 캐시에 저장.
- 특징:
- 쓰기 작업에서 캐시를 건드리지 않아 단순함.
- 자주 읽히지 않는 데이터는 캐시에 저장되지 않음으로써 리소스 절약 가능.
- 단점:
- 첫 읽기 요청 시 Cache Miss로 인한 지연 발생.
- 사용 사례:
- 로그 데이터나 이벤트 기록처럼 쓰기가 많고 읽기가 적은 경우.
Write-Through
- 동작 방식:
- 쓰기 작업 시 데이터를 DB와 캐시에 동시에 저장.
- 특징:
- 항상 최신 상태의 데이터를 유지하며, 읽기 성능 향상에 유리.
- 단점:
- 쓰기 작업 속도가 느려질 수 있음(캐시와 DB 동기화 비용).
- 사용 사례:
- 사용자 프로필 정보처럼 읽기와 쓰기가 모두 중요한 경우.
Write-Back (Write Behind)
- 동작 방식:
- 쓰기 작업 시 데이터를 먼저 캐시에 저장하고, 일정 시간 후 또는 특정 조건에서 DB에 반영(비동기).
- 특징:
- 쓰기 성능이 매우 빠름(캐시에만 기록).
- 여러 쓰기를 묶어 한 번에 DB에 반영하여 부하 감소 가능.
- 단점:
- 동기화 이전에 장애가 발생하면 데이터 유실 가능성 존재.
- 사용 사례:
- 실시간 로그 처리 또는 대량 쓰기가 필요한 환경.
시간 기반(Time-based) 전략
TTL(Time-To-Live)
각 항목에 유효 기간을 설정하여 일정 시간이 지나면 자동으로 무효화한다.
간단하고 효과적이나, 잘못된 TTL 설정은 성능 저하를 초래할 수 있다.
공간 기반(Space-based) 전략
LRU (Least Recently Used)
가장 오래 사용되지 않은 데이터를 제거하여 공간을 확보한다.
자주 사용되는 데이터를 우선적으로 유지한다.
LFU (Least Frequently Used)
가장 적게 참조된 데이터를 제거한다.
주요 고려사항
데이터의 특성 분석:
- 자주 변경되는 데이터인가?
- 읽기와 쓰기의 비율은 어떠한가?
시스템 요구사항 분석:
- 고성능이 필요한지, 일관성이 더 중요한지 판단.
장애 대응 계획:
- Cache Miss나 장애 발생 시 DB로의 부하 증가를 어떻게 처리할 것인지 계획 필요.