cachelocalityperformance

Cache란 무엇인가요?

예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

Cache hit와 miss란?

부가 설명

초기 컴퓨터는 CPU와 메모리 접근 속도 차이가 크지 않았습니다. 그런데 반도체 집적도가 빠르게 높아지면서 CPU 연산 속도는 급격히 빨라진 반면, DRAM의 접근 속도는 그 속도를 따라가지 못했습니다. CPU가 계산을 마쳐도 메모리에서 다음 데이터를 기다리며 사이클을 낭비하는 상황이 생겼고, 이 구조적 격차를 Memory Wall이라고 부릅니다.

해결책으로 CPU와 메모리 사이에 작고 빠른 SRAM 기반의 cache를 두는 방식이 등장했습니다. CPU에 가까울수록 빠르지만 비싸고 용량이 작고, 멀어질수록 느리지만 크고 저렴한 계층 구조가 자연스럽게 자리를 잡았습니다.

같은 원리는 소프트웨어 전반으로 확장됐습니다. DB 조회 결과를 메모리에 올려두는 query cache, 정적 파일을 클라이언트에 보관하는 browser cache, 지역적으로 가까운 서버에서 응답하는 CDN까지, "느린 저장소 앞에 빠른 저장소를 두어 반복 접근 비용을 줄인다"는 아이디어가 계층마다 반복되고 있습니다.

Cache는 성능을 높이기 위한 trade-off입니다. 시간을 줄이기 위해 공간을 더 쓰고, 최신성을 일부 관리해야 합니다.

대표 정책으로는 LRU, TTL, write-through, write-back 등이 있습니다. Cache는 읽기를 빠르게 만들지만 아래와 같은 문제가 따라옵니다.

  • hit/miss: cache miss가 나면 원본까지 다녀와야 하므로 miss가 잦으면 cache 없이 직접 읽는 것보다 오히려 느려질 수 있습니다. warm-up 전이나 eviction이 빈번한 환경에서 두드러집니다.
  • invalidation: 원본 데이터가 바뀌면 cache에 있는 오래된 값(stale data)을 언제, 어떻게 제거할지 결정해야 합니다. 너무 빨리 지우면 성능이 떨어지고, 너무 늦게 지우면 오래된 값을 보여줍니다.
  • consistency: 분산 환경에서 여러 cache 노드가 각자 다른 값을 가질 수 있습니다. 한 노드의 데이터가 갱신되어도 다른 노드에 반영되기까지 시간이 걸려, 그 사이에 요청을 받는 노드에 따라 다른 결과가 나올 수 있습니다.

한 줄 정리

Cache는 느린 저장소나 계산 결과 앞에 더 빠른 저장 공간을 두어 반복 접근을 빠르게 만드는 기법입니다.