C#/TIL(Today I Learned)

2025-04-07 <캐시 철학에 대하여>

프린스 알리 2025. 4. 7.

 

캐시 철학: Temporal vs. Spatial Locality

캐시(Cache)는 컴퓨터 시스템에서 자주 접근되는 데이터를 임시로 저장해두는 저장소로, 성능을 극적으로 향상시킬 수 있는 중요한 개념이다. 캐시의 핵심 철학은 지역성(Locality) 이라는 개념에 기반을 두고 있다. 지역성에는 크게 두 가지 종류가 있으며, 이를 각각 시간 지역성(Temporal Locality)공간 지역성(Spatial Locality) 이라고 한다.

이 글에서는 이 두 가지 지역성의 개념과 그 철학이 어떻게 캐시 설계에 영향을 미치는지를 설명하고자 한다.


1. 시간 지역성 (Temporal Locality)

시간 지역성이란 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 높다는 개념이다.

예를 들어, 루프 내에서 같은 변수를 반복적으로 참조하는 경우가 이에 해당한다.

for (int i = 0; i < 100; i++) {
    sum += arr[i];
}

위 코드에서 sum 변수는 매 반복마다 접근되므로 시간 지역성을 가진다.

캐시 시스템에서는 이러한 시간 지역성을 고려하여, 최근에 접근한 데이터를 캐시에 유지함으로써 추후 재사용 시 빠르게 접근할 수 있도록 한다. Least Recently Used (LRU) 알고리즘 등은 이 시간 지역성 개념에 기반하여 캐시에서 오래된 데이터를 제거한다.


2. 공간 지역성 (Spatial Locality)

공간 지역성이란 한 번 접근된 데이터의 근처에 있는 데이터도 곧 접근될 가능성이 높다는 개념이다.

예를 들어, 배열의 연속된 요소에 접근하는 경우가 이에 해당한다.

for (int i = 0; i < 100; i++) {
    total += arr[i];
}

이 경우 arr[0], arr[1], arr[2], ... 와 같이 순차적으로 메모리 상의 인접한 위치에 접근하므로, 공간 지역성이 높다고 할 수 있다.

이를 고려하여 캐시 메모리는 데이터를 단일 단위가 아닌 블록(block) 단위로 가져온다. 즉, arr[0]을 가져올 때 그 근처의 arr[1], arr[2] 등도 함께 가져오는 방식이다. 이를 프리패칭(prefetching) 또는 캐시 라인(cache line) 개념이라고도 한다.


3. 캐시 설계에 미치는 영향

시간 지역성과 공간 지역성은 캐시 설계에 있어 매우 중요한 지침이 된다.

지역성 종류 캐시 전략 예시
시간 지역성 LRU 기반 캐시 정책, 재사용 우선순위 조정
공간 지역성 캐시 라인 단위 데이터 로딩, 프리패칭

 

이 두 철학을 고려하지 않은 캐시는 불필요한 캐시 미스(cache miss)를 유발하며, 시스템 성능을 오히려 저하시킬 수 있다.


4. 실생활 예시

웹 브라우저에서도 이 철학이 그대로 적용된다. 자주 방문하는 사이트의 리소스(CSS, JS 등)는 캐시에 저장되어 빠르게 로딩되고(시간 지역성), 한 페이지에서 연속적으로 불러오는 이미지들은 함께 미리 로딩되기도 한다(공간 지역성).


마치며

캐시 시스템의 효율성은 단순한 데이터 저장이 아니라, 데이터 접근 패턴의 철학적 이해에 달려 있다. 시간과 공간 지역성을 잘 이해하고 설계에 반영할수록 더 빠르고 효율적인 시스템을 구축할 수 있다.

참고 자료:

 

댓글