블로그/System Design
System Design미드2026-04-19

캐싱 전략(Cache-Aside vs Write-Through)의 차이는 무엇인가요?

한 줄 답변

캐싱 전략은 읽기/쓰기 비중에 따라 선택하며, 보통 읽기 위주에는 Cache-Aside를, 데이터 일관성이 중요하다면 Write-Through를 사용하여 DB 부하를 줄이고 응답 속도를 향상시킵니다.

핵심 개념 정리

캐싱(Caching)은 데이터베이스나 원격 서버에 접근하는 비용을 줄이기 위해 상대적으로 빠른 저장소(주로 메모리)에 데이터를 임시로 저장하는 기술입니다. 현대적인 대규모 시스템에서 캐시는 단순한 속도 향상을 넘어 시스템 전체의 가용성을 확보하는 핵심 계층으로 동작합니다. 특히 트래픽이 몰리는 서비스에서 DB의 병목 현상을 해결하기 위한 필수 요소입니다.

가장 널리 쓰이는 Cache-Aside(Lazy Loading)는 애플리케이션이 먼저 캐시를 확인하고, 데이터가 없으면 DB에서 가져와 캐시에 저장하는 방식입니다. 초기 조회 시에는 지연(Latency)이 발생하지만, 캐시에 데이터가 쌓이면 읽기 성능이 비약적으로 향상됩니다. 주로 Redis나 Memcached를 사용할 때 표준처럼 여겨지는 전략이며, 캐시와 DB가 분리되어 있어 캐시 장애 시에도 서비스가 계속 유지될 수 있는 높은 가용성을 제공합니다.

반면 쓰기 전략인 Write-Through는 데이터가 업데이트될 때 캐시와 DB에 동시에 기록합니다. 이를 통해 캐시와 DB의 데이터 일관성을 항상 유지할 수 있는 장점이 있지만, 매 쓰기 작업마다 두 번의 저장 과정이 발생하여 전체적인 쓰기 성능이 저하될 수 있다는 단점이 있습니다. 주로 데이터 유실을 최소화해야 하고 최신 데이터 조회가 잦은 시스템에서 사용됩니다.

성능 최적화가 극단적으로 필요한 경우에는 Write-Back(Write-Behind)을 고려합니다. 이는 캐시에만 먼저 쓰고 나중에 배치로 DB에 반영하는 방식으로, 쓰기 처리량이 매우 높은 서비스(예: 게임 서버의 실시간 로그나 조회수 카운팅)에서 유효합니다. 하지만 서버 장애 시 메모리에만 있던 데이터가 유실될 위험이 존재하므로, 데이터의 중요도에 따라 신중하게 설계해야 합니다.

비교 정리

항목Cache-AsideWrite-Through
동작 방식캐시 체크 후 없으면 DB 조회 및 캐싱 (Lazy)캐시와 DB를 동시에 업데이트하여 일관성 유지 (Eager)
읽기 성능Cache Miss 시 지연 발생, 이후 매우 빠름항상 캐시에 최신 데이터가 있어 일정하게 빠름
쓰기 성능DB에만 기록하므로 쓰기 자체는 빠름캐시와 DB 두 번 쓰므로 상대적으로 느림
일관성 보장캐시 만료 전까지 DB와 차이 발생 가능성 높음두 저장소가 항상 동일한 상태 유지 (정합성 높음)

면접에서 이렇게 답하세요

단순히 정의를 나열하기보다 '상황별 선택 기준'을 제시하는 것이 중요합니다. 예를 들어 '읽기 비중이 90% 이상인 서비스에서는 Cache-Aside가 유리하며, 캐시 스탬피드(Stampede) 현상을 막기 위해 TTL 분산과 Mutex를 도입했다'는 식의 실무 경험을 덧붙이면 면접관에게 신뢰를 줄 수 있습니다. 특히 데이터 정합성 문제에 대해 어떤 Trade-off를 선택했는지 논리적으로 설명하는 것이 차별화 포인트입니다.

자주 묻는 추가 질문

Q. 캐시 스탬피드(Cache Stampede) 현상은 어떻게 방지하나요?

동시 다발적인 캐시 만료 시 DB 부하를 막기 위해 지터(Jitter)를 적용해 TTL을 분산시키거나, 갱신 시 분산 락을 사용하여 한 번만 DB에 접근하게 합니다.

Q. Write-Back 방식의 데이터 유실 위험은 어떻게 보완할까요?

메모리 내 큐에 데이터를 쌓을 때 영속성 옵션을 강화하거나, 유실되어도 서비스에 치명적이지 않은 비핵심 로그 데이터 등에 한정적으로 적용하여 리스크를 관리합니다.

Q. 캐시 메모리가 부족해지면 어떤 기준으로 데이터가 삭제되나요?

주로 LRU(Least Recently Used)나 LFU(Least Frequently Used) 알고리즘을 사용합니다. 중요한 데이터가 삭제되지 않도록 캐시 크기 산정과 Eviction Policy 설정을 사전에 검토해야 합니다.

커뮤니티 하이라이트

실무에서는 Cache-Aside가 국룰이지만, 정합성이 극도로 중요한 금융권 프로젝트에서는 Write-Through와 메시지 큐를 조합해서 썼던 기억이 나네요.

@backend_master_kim34

면접에서 Redis를 쓴다고 하면 무조건 '데이터 유실 시나리오' 질문이 나옵니다. 캐시 전략과 함께 복구 방식(AOF/RDB)도 세트로 준비하세요.

@dev_architect_j22

42명의 개발자가 이 질문에 참여했습니다

관련 면접 질문

앱에서 직접 답변해보세요

매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.

무료로 시작하기