캐시(Cache) 는 컴퓨터 시스템에서 데이터 접근 속도를 높이기 위해 사용하는 임시 저장 공간이다.
CPU와 메모리 사이, 혹은 디스크와 메모리 사이처럼 느린 계층과 빠른 계층 사이에 위치하며, 자주 사용하는 데이터를 저장해 재사용 시 빠른 응답을 가능하게 만든다.
CPU의 연산 속도는 점점 빨라지는 반면, 메모리(특히 DRAM) 접근 속도는 상대적으로 느리다.
이 속도 차이(Latency Gap) 를 줄이기 위해, CPU와 메모리 사이에 고속의 캐시 메모리를 둔다.
핵심 목적: “자주 쓰는 데이터를 가까운 곳에 저장해서 더 빠르게 가져오자!”
캐시는 여러 레벨로 나뉘며, 일반적으로 다음과 같은 구조를 가진다:
| 계층 | 위치 | 크기 | 속도 | 비용 |
|---|---|---|---|---|
| L1 Cache | CPU 내부 | 수십 KB | 매우 빠름 | 높음 |
| L2 Cache | CPU 내부/외부 | 수백 KB~MB | 빠름 | 중간 |
| L3 Cache | CPU 공유 | 수 MB | 느림 | 낮음 |
| RAM | 메인 메모리 | 수 GB | 더 느림 | 더 낮음 |
| Disk | 보조 기억장치 | 수 TB | 매우 느림 | 매우 낮음 |
L1 → L2 → L3 → RAM → 디스크 순서로 접근 속도는 느려지고, 용량은 커진다.
캐시는 지역성(Locality) 개념에 기반하여 동작한다:
예: 배열을 순차적으로 접근하면 다음 인덱스도 곧 사용할 가능성이 높음 → 미리 가져다 놓자!
| 용어 | 설명 |
|---|---|
| Cache Hit | 원하는 데이터가 캐시에 있어서 빠르게 접근 가능한 경우 |
| Cache Miss | 캐시에 원하는 데이터가 없어 메모리 또는 디스크에서 다시 가져와야 하는 경우 |
캐시의 성능은 Hit Ratio(적중률) 에 따라 결정되며, 이는 다음과 같이 계산된다:
Hit Ratio = 캐시 히트 수 / 전체 접근 수
높은 적중률을 유지하는 것이 캐시 설계의 핵심이다.
캐시 용량은 제한적이므로, 새로운 데이터를 넣기 위해 기존 데이터를 제거해야 할 때 사용되는 정책
| 알고리즘 | 설명 |
|---|---|
| FIFO | 먼저 들어온 데이터를 먼저 제거 |
| LRU | 가장 오래 사용되지 않은 데이터를 제거 |
| LFU | 가장 적게 사용된 데이터를 제거 |
| Random | 랜덤하게 하나를 선택하여 제거 |
LRU(Least Recently Used) 가 가장 널리 사용됨
| 분야 | 캐시 종류 | 예시 |
|---|---|---|
| 브라우저 | 웹 캐시 | 이미지, JS, CSS 캐시 |
| 파일 시스템 | 디스크 버퍼 캐시 | read() 이후 자주 읽는 파일 페이지 캐시 |
| DBMS | 쿼리 캐시, 인덱스 캐시 | MySQL InnoDB Buffer Pool 등 |
| 네트워크 | DNS 캐시 | google.com → IP 매핑 캐시 |