콘텐츠로 이동

캐시의 모든 것 1편: 캐시란 무엇이고, 왜 쓰는가#

캐시의 기본 개념부터 동작 원리까지 정리한다.


들어가며#

논문을 쓰는데 자료가 필요할 때마다 도서관에 간다고 생각해보자. 비효율적이다. 그래서 자주 보는 책은 책상 위에 둔다. 여기서 책상이 캐시고, 도서관이 메인 메모리(혹은 디스크)다.

원리는 어디에나 적용된다: - 냉장고 = 캐시, 마트 = 원본 저장소. 자주 먹는 식재료는 냉장고에 넣어둔다. - 스마트폰의 최근 앱 목록 = 캐시. 완전히 종료하지 않은 앱은 빠르게 다시 열린다. - 웹 브라우저의 페이지 캐시 = 캐시. 이전에 방문한 사이트는 더 빠르게 로드된다.

핵심은 간단하다: 자주 쓰는 데이터를 가까이 두면 빠르다.


1. 캐시의 정의#

캐시(Cache)란, 향후 요청을 더 빠르게 처리하기 위해 데이터의 사본을 더 빠른 저장소에 보관하는 하드웨어 또는 소프트웨어 구성 요소다.

핵심 키워드는 사본(copy)과 더 빠른 저장소다.

캐시에 저장된 데이터는 원본이 아니라 복사본이다. 원본은 여전히 느린 저장소에 있고, 캐시는 그 사본을 빠른 곳에 두어 접근 속도를 높인다.

참고로 "캐시(cache)"라는 단어는 프랑스어 cacher에서 왔는데, 숨기다라는 뜻이다. 실제로 캐시는 사용자에게 투명하게(transparently) 동작한다. 웹 브라우저가 이미지를 캐시에서 불러올 때, 사용자는 그 사실을 의식하지 못한다. 그냥 "빠르다"고 느낄 뿐이다.


2. 간략한 역사#

캐시의 역사는 1960년대로 거슬러 올라간다.

1963년 — 캠브리지 대학의 Atlas 2(Titan) 컴퓨터에서 초기 캐시 개념이 적용되었다.

1965년 — Maurice Wilkes가 slave memory라는 이름으로 캐시 개념을 제안한 논문을 발표한다. 지금 우리가 아는 캐시의 학술적 시작점이다.

1968년IBM System/360 Model 85에서 상용 컴퓨터 최초로 캐시 메모리를 탑재한다. "cache"라는 용어가 널리 퍼진 계기가 되었다.

1976년 — IBM 801 CPU에서 최초로 명령어 캐시(I-cache)와 데이터 캐시(D-cache)를 분리한다. 현대 CPU에서도 사용되는 Split L1 캐시의 시작이다.

현재 — L1/L2/L3 다단계 캐시 구조는 표준이 되었고, 1달러 미만의 마이크로컨트롤러에도 캐시가 탑재된다.


3. 왜 캐시가 필요한가#

캐시가 존재하는 이유를 이해하려면 두 가지 핵심 개념을 알아야 한다: 메모리 계층 구조지역성 원리.

3-1. 메모리 계층 구조 (Memory Hierarchy)#

컴퓨터의 저장 장치는 계층적으로 구성된다. 위로 갈수록 빠르고 작고 비싸며, 아래로 갈수록 느리고 크고 저렴하다.

계층 속도 용량
레지스터 ~1ns 수 KB
L1 캐시 1~4 cycle 32~64KB
L2 캐시 3~10ns 256KB~1MB
L3 캐시 10~30ns 4~64MB
메인 메모리 50~100ns 8~64GB
SSD ~100μs 256GB~4TB
HDD ~10ms 1~20TB

이것은 물리적 한계 때문이다. 빠른 메모리는 물리적으로 CPU에 가까이 있어야 하고, 가까이 있으려면 크기가 작아야 한다. SRAM(캐시에 사용)은 DRAM(메인 메모리)보다 훨씬 빠르지만, 같은 용량을 만드는 데 수십 배의 비용과 면적이 필요하다.

수치로 체감하기#

L1 캐시 접근(~1ns)과 HDD 접근(~10ms)의 속도 차이를 인간 시간 척도로 변환하면:

저장소 접근 시간 인간 척도 비유
L1 캐시 ~1ns 1초
L2 캐시 ~5ns 5초
L3 캐시 ~20ns 20초
메인 메모리 ~100ns 1분 40초
SSD ~100μs 약 1일
HDD ~10ms 약 4개월

L1 캐시에서 데이터를 가져오는 게 1초라면, HDD에서 가져오는 건 4개월이다. 이 속도 차이가 캐시의 존재 이유다.

3-2. 지역성 원리 (Principle of Locality)#

캐시가 효과적인 이유는 프로그램이 데이터에 접근하는 패턴에 규칙성이 있기 때문이다. 이것을 지역성 원리라고 한다.

시간적 지역성 (Temporal Locality)#

최근에 접근한 데이터는 가까운 미래에 다시 접근할 가능성이 높다.

# 예: 반복문의 변수
total = 0
for i in range(1000):
    total += data[i]  # 'total' 변수에 1000번 반복 접근

total 변수는 루프가 돌 때마다 접근된다. 한 번 캐시에 올려두면 999번은 캐시에서 빠르게 읽을 수 있다.

공간적 지역성 (Spatial Locality)#

최근에 접근한 데이터 근처의 데이터도 곧 접근할 가능성이 높다.

# 예: 배열 순차 접근
for i in range(1000):
    process(data[i])  # data[0], data[1], data[2]... 순서대로 접근

data[0]을 읽을 때 캐시는 data[0]만 가져오는 게 아니라, 인접한 data[1], data[2]... 등도 함께 가져온다(캐시 라인 단위). 그래서 data[1]에 접근할 때는 이미 캐시에 있어 빠르게 읽을 수 있다.


4. 캐시의 기본 동작#

4-1. Cache Hit와 Cache Miss#

캐시의 동작은 단 두 가지 경우로 나뉜다:

Cache Hit(캐시 적중): 요청한 데이터가 캐시에 있음 → 빠르게 반환

Cache Miss(캐시 미스): 요청한 데이터가 캐시에 없음 → 느린 저장소에서 가져옴

캐시 미스는 다시 세 가지로 분류된다:

종류 원인 설명
Cold Miss (Compulsory) 처음 접근 한 번도 캐시에 올라온 적 없는 데이터
Capacity Miss 용량 부족 캐시가 꽉 차서 오래된 데이터가 밀려남
Conflict Miss 매핑 충돌 다른 데이터가 같은 캐시 위치를 사용

4-2. 히트율과 성능 — AMAT#

캐시 성능을 측정하는 가장 중요한 지표는 히트율(Hit Rate)이다.

히트율 = 캐시 히트 수 / 전체 접근 수

캐시의 성능 효과를 정량화하는 공식:

AMAT = Hit Time + (Miss Rate × Miss Penalty)

Hit Time = 1ns, Miss Penalty = 100ns라고 가정하면:

히트율 Miss Rate AMAT 체감 속도
90% 10% 11ns 기본
95% 5% 6ns 1.8배 빠름
99% 1% 2ns 5.5배 빠름

히트율이 90%에서 99%로, 겨우 9% 올랐을 뿐인데 성능은 5배 이상 차이가 난다.

Memory Wall 문제#

CPU의 연산 속도는 매년 빠르게 발전해왔지만, 메모리(DRAM)의 접근 속도는 상대적으로 느리게 발전해왔다. 이 격차를 Memory Wall(메모리 벽)이라 부른다.

CPU가 아무리 빨라도, 데이터를 기다리느라 놀고 있다면 의미가 없다. 캐시는 이 격차를 메우는 핵심 기술이다.


정리#

  1. 캐시란 자주 쓰는 데이터의 사본을 빠른 저장소에 보관하는 것
  2. 메모리 계층 구조에서 속도와 용량은 트레이드오프 관계
  3. 지역성 원리 덕분에 작은 캐시로도 높은 히트율 달성 가능
  4. 히트율 몇 %의 차이가 성능에 극적인 영향을 미침

다음 편 예고#

2편: CPU부터 CDN까지 — 캐시가 쓰이는 모든 곳에서는 CPU L1/L2/L3 캐시의 구조와 매핑 방식, 디스크 캐시, 웹 브라우저 캐시, CDN, Redis/Memcached 등 각 계층별 캐시를 다룬다.


참고문헌#

  1. Hennessy, J. L. & Patterson, D. A. (2017). Computer Architecture: A Quantitative Approach, 6th Edition. Morgan Kaufmann.
  2. Bryant, R. E. & O'Hallaron, D. R. (2015). Computer Systems: A Programmer's Perspective, 3rd Edition. Pearson.
  3. Wilkes, M. V. (1965). "Slave Memories and Dynamic Storage Allocation." IEEE Transactions on Electronic Computers, EC-14(2).
  4. Denning, P. J. (2005). "The Locality Principle." Communications of the ACM, 48(7).
  5. Wulf, W. A. & McKee, S. A. (1995). "Hitting the Memory Wall." ACM SIGARCH Computer Architecture News, 23(1).