Phase 2레슨 7

Cache

Cache Aside, Write Through, TTL, Eviction, Stampede, Invalidation

💡ELI5·

Cache를 책상에 비유하면

Client → Cache (Redis) ─hit─→ return
                    └miss→ DB → return + Cache SET
💡 비유Cache = 책상 위 (빠르지만 공간 작음), DB = 창고 (느리지만 공간 큼). 자주 쓰는 물건은 책상 위에 올려두고, 가끔 쓰는 물건은 창고에 둔다. 책상이 꽉 차면 덜 쓰는 물건부터 창고로 돌려보낸다(Eviction).
🔬Deep Dive·

Cache Write 전략 비교

패턴쓰기 흐름일관성쓰기 지연적용
Cache Aside읽기 시 miss → DB → cache 적재. 쓰기는 DB만 갱신 후 cache 삭제낮음 (stale 가능)낮음읽기 많고 쓰기 적은 일반 웹
Write Through쓰기 시 Cache와 DB를 동시에 갱신높음높음 (DB 동기 대기)쓰기 일관성 중요
Write Back쓰기 시 Cache만 갱신, 비동기로 DB에 나중에 반영낮음 (장애 시 유실)매우 낮음쓰기 폭발, 로그 수집
Write Around쓰기 시 DB만 갱신, cache는 건드리지 않음낮음낮음한 번 쓰고 안 읽는 데이터
Cache Aside (읽기):
Client → Cache? ─hit─→ return
            └miss→ DB → return + Cache SET

Write Through (쓰기):
Client → Cache SET → DB WRITE → return (둘 다 동기)

Write Back (쓰기):
Client → Cache SET → return (즉시)
         └async→ DB WRITE (나중에 batch)
🔬Deep Dive·

Cache Stampede & Thundering Herd

인기 있는 key의 TTL이 만료되는 순간, 수많은 요청이 동시에 Cache Miss가 되어 DB로 몰려드는 현상. DB가 순간적으로 과부하로 죽을 수 있다.

방지 패턴: (1) 분산 락으로 첫 miss만 DB 조회, (2) XFetch 확률적 사전 갱신, (3) Stale-While-Revalidate, (4) TTL에 지터(jitter) 추가
🔬Deep Dive·

Redis 장애 시 DB 부하 — Cache의 함정

Cache가 잘 동작할 때 DB는 평온하다. 하지만 Redis가 장애로 내려가면, 그동안 Cache가 막아주던 트래픽이 전부 DB로 쏟아진다. 이를 cache failure cascade라 한다.

정상:  Client → Redis(hit 95%) → DB(5%)
장애:  Client → Redis(x) → DB(100%) → 과부하 → DB 다운 → 전체 장애
방어:  Redis Cluster/Replica + DB 앞 Rate Limit + Circuit Breaker
💻Code·

Redis 기본 명령

# 문자열 (캐시 + TTL)
SET user:1001 '{"name":"kim","age":30}' EX 300
GET user:1001
TTL user:1001

# 해시 (객체 저장)
HSET profile:1001 name kim age 30 city seoul
HGETALL profile:1001

# 정렬된 집합 (리더보드)
ZADD ranking 950 alice 870 bob 1100 carol
ZREVRANGE ranking 0 2 WITHSCORES

# 카운터 (원자적 증가)
INCR page:home:views
INCRBY likes:post:42 5
⚖️Trade-off·

Cache의 Trade-off

이점대가
읽기 지연 수십~수백 배 감소일관성 문제: stale data 발생
DB 부하 감소Stampede/Thundering Herd 위험
Redis 자료구조로 기능 확장Redis 장애 = DB cascade 위험
Cache Aside는 구현 단순운영 복잡성: TTL, eviction, 무효화

❓ 체크포인트 질문

  1. 1.Cache Aside와 Write Through의 가장 큰 차이는?
  2. 2.Cache Stampede를 방지하는 세 가지 패턴은?
  3. 3.LRU와 LFU eviction의 차이와 각각 유리한 상황은?
  4. 4.Redis가 장애 났을 때 시스템 전체가 죽는 원인과 대비책은?
  5. 5.Cache Invalidation이 '컴퓨터 과학에서 가장 어려운 두 가지' 중 하나인 이유는?