ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 캐시 무효화
    카테고리 없음 2025. 5. 26. 11:20

    1. 캐시 무효화란?

    캐시는 보통 DB나 외부 API보다 빠른 조회를 위해 저장된 데이터인데,
    원본 데이터가 바뀌었을 때 이 캐시도 함께 바꿔줘야 일관성이 유지돼.
    그런데 이걸 어떻게, 언제, 무엇을 무효화할지 정하는 것이 바로 캐시 무효화야.


    2. 캐시 무효화 전략

    대표적인 전략은 3가지:

    1. Write-through

    • 데이터가 변경될 때 DB에 먼저 쓰고, 동시에 캐시도 갱신.
    • 캐시와 DB의 일관성이 좋지만, 쓰기 속도가 느려질 수 있음.

    2. Write-behind (Write-back)

    • 변경은 캐시에 먼저 적용하고, 나중에 비동기로 DB에 반영.
    • 속도는 빠르지만, 데이터 유실 가능성 존재 (예: 시스템 장애 시).

    3. Cache-aside (Lazy-loading)

    • 읽을 때 캐시에 없으면 DB에서 읽고 캐시에 저장.
    • 쓰기/수정은 DB에만 반영하고, 캐시는 삭제(invalidate) 해서 다음 요청 때 갱신.
    • 실무에서 가장 흔히 쓰이는 방식.

    3. 캐시 무효화 방법

    • 수동 삭제: 데이터를 수정/삭제하는 시점에 Redis.del(key) 같은 식으로 캐시 삭제.
    • 만료 시간 (TTL): 일정 시간 지나면 자동 삭제. 단점은 일관성 보장이 안 됨.
    • 버전 키: 데이터 변경 시 key_v1 → key_v2처럼 key 자체를 바꿔치기. 과거 데이터가 남아있을 수 있음.
    • 메시지 큐 활용: DB 변경 이벤트를 메시지 큐(Kafka 등)로 전달받아, 해당 키를 가진 캐시 무효화 (비동기 무효화 방식).

    4. 캐시 무효화 어려운 이유

    • 정확한 키 식별이 어렵다 (ex. 게시판 리스트 캐시 vs 특정 게시글 캐시).
    • 동시성 문제: 캐시 삭제 직후 누군가가 또 읽어오는 경우 등.
    • 지나친 무효화는 오히려 성능 저하를 불러올 수 있음.
Designed by Tistory.