왜 캐싱이 필요한가
매 요청마다 DB를 조회하면 부하가 커집니다. 자주 조회되지만 변경은 드문 데이터를 Redis 같은 인메모리 스토어에 저장해두면 응답 속도를 크게 높이고 DB 부하를 줄일 수 있습니다.
Cache-Aside (Lazy Loading)
가장 널리 쓰이는 패턴입니다. 애플리케이션이 먼저 캐시를 확인하고, 없으면(cache miss) DB에서 조회한 뒤 캐시에 저장합니다.
value = redis.get(key)
if value is None:
value = db.query(key)
redis.set(key, value, ex=300) # 5분 TTL
return value
Write-Through
DB에 쓸 때마다 캐시도 즉시 함께 갱신합니다. 캐시와 DB가 항상 동기화되지만, 쓰기 지연이 늘어납니다.
Write-Behind (Write-Back)
애플리케이션은 캐시에만 쓰고, 캐시가 비동기로 DB에 반영합니다. 쓰기 성능은 가장 빠르지만 캐시 장애 시 데이터 유실 위험이 있습니다.
TTL 기반 만료
모든 캐시 키에는 만료 시간(TTL)을 설정하는 것이 안전합니다. TTL이 없으면 오래된(stale) 데이터가 영구적으로 남을 수 있습니다.
선택 기준
읽기 위주 워크로드에는 Cache-Aside, 데이터 일관성이 중요하면 Write-Through, 쓰기 처리량이 중요하면 Write-Behind를 검토하는 것이 일반적입니다.