캐시 메모리 (Cache Memory)

한눈에 보기

CPU와 주기억장치의 속도 차이를 메우는 캐시 메모리의 원리를 다룬다. 메모리 계층 구조, 시간과 공간 지역성, 매핑 방식 비교, 쓰기 정책과 MESI 캐시 일관성까지 정리한다.

최종 업데이트 2026.09.17

캐시 메모리(Cache Memory)는 중앙처리장치(CPU, Central Processing Unit)와 주기억장치(main memory) 사이의 속도 차이를 메우기 위해 CPU 가까이에 두는 작고 빠른 기억장치다. 캐시 메모리는 프로그램이 최근에 사용한 데이터와 그 주변 데이터를 미리 담아 두어, CPU가 느린 주기억장치까지 가지 않고도 대부분의 요청을 처리하게 만든다. 이 구조가 효과를 내는 근거는 프로그램의 메모리 접근이 시간적으로나 공간적으로 한쪽에 몰리는 지역성(locality)이라는 성질이다.

캐시가 필요한 이유와 메모리 계층 구조

CPU 코어는 1나노초 미만의 주기로 동작하지만 DRAM 기반 주기억장치의 접근 시간은 수십 나노초에 이른다. 캐시가 없다면 CPU는 데이터를 기다리며 수백 사이클을 낭비하게 되는데, 이를 메모리 장벽(memory wall) 문제라고 부른다. 그래서 현대 컴퓨터는 레지스터(register), L1, L2, L3 캐시, 주기억장치, 보조기억장치로 이어지는 메모리 계층 구조(memory hierarchy)를 만들어, 위로 갈수록 빠르지만 작고 아래로 갈수록 느리지만 큰 저장소를 층층이 쌓는다.

일반적으로 L1 캐시는 코어마다 명령어용과 데이터용으로 나뉘어 수십 KB 크기로 존재하고, L2는 코어 전용으로 수백 KB에서 수 MB, L3는 여러 코어가 공유하며 수십 MB에 이른다. 요청한 데이터가 캐시에 있으면 적중(hit), 없으면 실패(miss)라고 하며, 실패하면 아래 계층에서 데이터를 가져오는 동안 지연이 발생한다. 평균 접근 시간은 적중률에 좌우되므로, 캐시 설계의 목표는 결국 적중률을 높이는 것이다.

지역성의 원리

캐시가 작은 용량으로도 높은 적중률을 내는 이유는 지역성의 원리 때문이다. 시간 지역성(temporal locality)은 한 번 접근한 데이터에 곧 다시 접근할 가능성이 높다는 성질로, 반복문의 카운터 변수가 대표적이다. 공간 지역성(spatial locality)은 접근한 주소 근처의 데이터에 이어서 접근할 가능성이 높다는 성질로, 배열을 앞에서부터 순회하는 코드가 대표적이다.

공간 지역성을 활용하기 위해 캐시는 데이터를 1바이트씩이 아니라 캐시 라인(cache line)이라는 단위로 옮긴다. 보통 64바이트인 캐시 라인 하나를 통째로 가져오면, 이후 인접 주소 접근이 모두 적중으로 처리된다. 2차원 배열을 행 우선으로 순회할 때와 열 우선으로 순회할 때 성능이 크게 달라지는 이유가 바로 이 캐시 라인 단위 동작에 있다.

매핑 방식 비교

주기억장치의 블록을 캐시의 어느 자리에 둘지 정하는 규칙을 매핑(mapping)이라고 하며, 세 가지 방식이 있다.

구분직접 매핑(Direct Mapped)완전 연관(Fully Associative)집합 연관(Set Associative)
배치 규칙블록마다 들어갈 자리가 하나로 고정아무 자리에나 배치 가능정해진 집합 안에서 자유롭게 배치
탐색 비용가장 낮음, 한 자리만 확인가장 높음, 전체를 비교집합 내 몇 개만 비교
충돌 실패같은 자리를 다투는 충돌이 잦음충돌 없음충돌이 크게 완화됨
실제 사용단순한 구조에 한정적TLB처럼 작은 구조에 사용현대 CPU 캐시의 표준

집합 연관 방식에서 한 집합에 들어가는 자리의 수를 웨이(way)라고 부르며, 8웨이 집합 연관이면 한 블록이 갈 수 있는 후보 자리가 8개라는 뜻이다. 자리가 꽉 찼을 때 어떤 라인을 내보낼지는 교체 정책이 정하며, 가장 오래 사용하지 않은 것을 내보내는 LRU(Least Recently Used) 계열이 널리 쓰인다.

쓰기 정책과 캐시 일관성

읽기만이 아니라 쓰기도 캐시를 거친다. 쓰기 관통(write-through)은 캐시와 주기억장치에 동시에 쓰는 방식으로 구현이 단순하고 데이터가 항상 일치하지만 쓰기마다 메모리 대역폭을 소모한다. 쓰기 지연(write-back)은 일단 캐시에만 쓰고 수정 표시(dirty bit)를 남긴 뒤, 해당 라인이 교체될 때 한꺼번에 주기억장치에 반영하는 방식으로 성능이 좋아 현대 CPU의 표준이다.

멀티코어 환경에서는 같은 데이터가 여러 코어의 캐시에 복사되므로, 한 코어의 수정이 다른 코어에 보이도록 만드는 캐시 일관성(cache coherence) 프로토콜이 필요하다. 대표적인 MESI 프로토콜은 각 캐시 라인을 Modified, Exclusive, Shared, Invalid 네 상태로 관리하며, 어떤 코어가 라인을 수정하면 다른 코어의 사본을 무효화한다. 서로 다른 코어가 같은 캐시 라인에 놓인 다른 변수를 각각 수정할 때 무효화가 반복되어 성능이 급락하는 거짓 공유(false sharing)는 일관성 프로토콜의 부작용으로 면접에서 자주 언급되는 주제다.

면접에서 이렇게 물어본다

  • 캐시 메모리가 왜 필요한지 메모리 계층 구조와 함께 설명해보시오.
  • 시간 지역성과 공간 지역성을 각각 코드 예시를 들어 설명해보시오.
  • 직접 매핑과 집합 연관 매핑의 차이, 그리고 현대 CPU가 집합 연관을 쓰는 이유를 말해보시오.
  • write-through와 write-back 정책의 장단점을 비교해보시오.
  • 2차원 배열을 행 우선과 열 우선으로 순회할 때 성능 차이가 나는 이유를 캐시 라인 관점에서 설명해보시오.
컴퓨터 구조 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기