캐시(Cache): 숨겨야 빨라지는 것들

테크-인문학 사전 8화

by 오토

컴퓨터에 문제가 생겼을 때 사람들이 가장 먼저 건네는 조언은 "껐다 켜봐"입니다. IT계의 만병통치약 1번이죠. 이 방법은 놀라울 정도로 자주 통합니다. 그리고 그것으로도 해결되지 않을 때 만병통치약 2번이 등장합니다. "캐시 삭제해봐." 이것 역시, 묘하게 잘 통합니다.


웹사이트가 깨져 보일 때, 앱이 어제까지 되던 동작을 거부할 때, 로그인이 갑자기 풀릴 때. 우리는 한 번도 들여다본 적 없는 무언가를 지우고, 왜 그것이 문제였는지 모른 채 상황이 나아지는 경험을 합니다. 대관절 캐시가 뭘까요? 지워야 한다는 건 아는데, 그것이 왜 거기 있었는지 묻는 사람은 드뭅니다.


사실 캐시는 골칫거리가 아니라 필요에 의해 존재하는 것입니다. 처음 방문한 웹사이트가 느리게 뜨고, 같은 사이트를 다시 열면 훨씬 빠르게 로딩되는 이유가 캐시예요. 이미지, 폰트, 스크립트 같은 파일을 브라우저가 한 번 받아서 가까운 곳에 보관해두고, 다음에 필요할 때 원본 서버까지 다시 가지 않고 그 사본을 꺼내 쓰는 거죠. 가까이에 숨겨둔 사본으로 속도를 버는 기술, 그것이 캐시의 본래 역할입니다.




은닉과 수집의 기술


18세기 후반, 프랑스계 캐나다인 모피 사냥꾼들은 거점에서 700킬로미터 이상 떨어진 오지에서 활동했습니다. 매번 본거지로 돌아갈 수 없으니, 경로 중간에 땅을 파고 화약, 덫, 비버 가죽, 소금을 묻어두었어요. 이 은닉 장소를 프랑스어 동사 cacher, '숨기다'에서 따와 'cache'라고 불렀습니다. 100킬로미터 거리의 은닉 장소가 800킬로미터 뒤에 있는 본거지를 대신했어요. 캐시는 이렇듯 생존의 기술로 출발했습니다.


Alfred Jacob Miller, 〈Trappers Starting for the Beaver Hunt〉 (c. 1837) © Wikimedia Commons


1805년 6월, 미국의 탐험가 메리웨더 루이스는 탐험 일지에 이 방법을 기록합니다. 프랑스계 고용인들에게 배운 방식으로 마리아스 강 어귀에 여분의 식량과 화약을 묻겠다고 썼죠. 루이스는 프랑스어 철자를 한 번 쓴 뒤로는 줄곧 'cash'라고 음차했어요. 당시 미국 동부 영어에서는 아직 낯선 단어였고, 노아 웹스터의 첫 두 사전에도 실리지 않았습니다. 콜로라도 북부의 'Cache la Poudre' 강은 이 역사를 지명으로 품고 있어요. 1830년대 어느 겨울, 눈보라에 갇힌 사냥꾼들이 짐을 줄이기 위해 강가에 화약을 묻었다는 데서 유래한 이름입니다. 생존을 위해 짐을 줄였던 절박한 행위가 땅의 이름으로 굳어졌습니다.


cacher의 뿌리를 더 거슬러 올라가면 '숨기다'보다 오래된 의미가 나타납니다. 라틴어 cogere, '함께 몰아넣다'가 어원이에요. 흩어진 것들을 한곳에 모으는 행위가 '압축하다'로, 다시 '가두다'를 거쳐 '숨기다'로 이동한 것입니다. 같은 뿌리에서 coagulate, "응고하다"가 나왔습니다. 흩어진 입자가 엉겨 하나의 덩어리가 되는 것. 모으는 행위가 밀도를 높이다 보면 결국 보이지 않게 된다는 직관이, 수집에서 은닉으로의 의미 이동을 이끌었는지도 모릅니다. 가장 깊은 층위에서 cache는 은닉이 아니라 수집의 감각에 뿌리를 두고 있었습니다.




노예 기억장치


1965년, 케임브리지 대학의 컴퓨터 과학자 모리스 윌크스는 짧은 논문을 발표합니다. 제목은 〈Slave Memories and Dynamic Storage Allocation〉. 그의 제안은 이랬습니다. 약 32,000 워드(컴퓨터가 한 번에 처리하는 데이터의 기본 단위) 분량의 빠른 코어 메모리를 약 1,000,000 워드의 느린 코어 메모리에 대한 '슬레이브'로 사용하되, 실질적인 접근 시간이 빠른 쪽에 가까워지도록 설계하자는 것이었어요.


당시 컴퓨터의 근본적인 문제는 속도의 불균형이었습니다. 프로세서는 점점 빨라지는데, 메모리는 그 속도를 따라잡지 못했어요. 프로세서가 데이터를 요청하면 메모리에서 가져오는 데 수십 클록 사이클이 걸렸고, 그 사이에 프로세서는 아무것도 하지 못한 채 기다려야 했습니다. 윌크스의 해법은 중간 계층을 두는 것이었어요. 자주 쓰는 데이터를 프로세서 가까이에 넣어두면, 대부분의 경우 느린 메모리까지 갈 필요가 없어지니까요.


오늘날의 관점에서 '슬레이브 메모리'는 분명 불편한 명명이지만, 그것 때문이 아니더라도 이 이름은 오래 살아남지 못했습니다. 1968년, IBM이 System/360 Model 85를 발표하면서 캐시 메모리를 탑재한 최초의 상용 컴퓨터가 등장해요. IBM은 이것을 '고속 버퍼 스토리지'라고 불렀지만, 학계에서는 점차 'cache'라는 이름이 정착했습니다. 16킬로바이트의 작은 고속 메모리가 메인 메모리의 접근 시간을 3분의 1에서 4분의 1로 줄여주었어요. 경기 침체로 약 30대밖에 팔리지 못한 이 기계는, 그러나 이후 모든 컴퓨터 아키텍처의 기본 원리를 증명한 셈이 되었습니다.


NSA에서 운용된 IBM System/360 Model 85의 콘솔 (1971) © Wikimedia Commons


누가 처음 이 기술에 'cache'라는 이름을 붙였는지는 명확하지 않습니다. 다만 초기 구현에서 캐시가 프로그래머에게 '보이지 않는' 존재였다는 점에서 이 이름이 붙었다는 설명이 있어요. 메인 메모리의 느림을 숨기는 것. 사냥꾼들이 물자를 땅속에 숨겼듯, 엔지니어들은 하드웨어의 약점을 작고 빠른 메모리 뒤에 숨겼습니다. 단, 숨기는 목적은 정반대였어요. 사냥꾼의 캐시는 다른 사람의 눈에 보이지 않기 위해 숨겼고, 컴퓨터의 캐시는 사용자의 눈에 보이지 않기 위해 숨어 있습니다. 전자는 도난을 막기 위한 은닉이고, 후자는 복잡성을 감추기 위한 추상화입니다.




숨김의 계층들


윌크스의 논문 이후 반세기가 지난 오늘, 캐시는 하나가 아니라 계층입니다. 현대 프로세서에는 L1, L2, L3 캐시가 겹겹이 쌓여 있어요. L1은 프로세서 코어에 가장 가까운 곳, 보통 코어당 32-64킬로바이트. 가장 빠르지만 가장 작습니다. L2는 그보다 크고 약간 느리며, L3는 여러 코어가 공유하는 수십 메가바이트의 공간이에요. 프로세서가 데이터를 요청하면 L1부터 순서대로 찾아보고, 없으면 L2, L3, 그래도 없으면 메인 메모리까지 내려갑니다.


캐시 계층 구조를 나타낸 그림 ©educba.com


이 계층 구조는 CPU 내부에만 머물지 않습니다. 도입부에서 이야기한 브라우저 캐시가 이 원리의 일상적 확장이에요. CDN(콘텐츠 전송 네트워크)은 이것을 지구 규모로 확대해서 전 세계 곳곳에 서버를 두고 원본의 사본을 보관하고, DNS 캐시는 도메인 이름과 IP 주소의 매핑을 저장합니다. 애플리케이션 내부에도, 데이터베이스 앞단에도 캐시가 있어요. 기술의 거의 모든 계층에 캐시가 존재한다는 것은, 기술 자체가 하나의 근본적인 문제와 계속 싸우고 있다는 뜻이기도 합니다. 가까운 곳은 비싸고, 먼 곳은 느리다. 사냥꾼들이 직면한 바로 그 문제예요. 본거지에는 모든 물자가 있지만 800킬로미터나 떨어져 있고, 덫을 놓는 현장은 가깝지만 아무것도 없다. 그래서 중간 지점에 묻습니다.




최선의 추측


1966년, IBM의 레슬리 벨라디는 캐시가 가득 찼을 때 어떤 데이터를 쫓아낼 것인가를 연구했습니다. 그가 제안한 이론적 최적 해법은 앞으로 가장 오랫동안 사용되지 않을 데이터를 쫓아내는 것이었어요. 완벽하지만 실행은 불가능합니다. 미래를 알아야 하니까요. 그래서 실제 시스템은 가장 오래 전에 사용된 데이터를 쫓아내는 근사 알고리즘을 씁니다. 과거의 패턴으로 미래를 추측하는 것이죠.


사냥꾼의 캐시에도 비슷한 문제가 있었을 겁니다. 한정된 구덩이에 무엇을 남기고 무엇을 가져갈 것인가. 다음 원정에서 가장 필요할 물건은 무엇인가. 벨라디의 알고리즘이 증명하듯, 최적의 답을 내려면 미래를 알아야 합니다. 사냥꾼이든 하드웨어 설계자든, 할 수 있는 것은 과거의 경험에서 가장 그럴듯한 추측을 만들어내는 것뿐이에요.


캐시의 근본 가정은 이겁니다. 최근에 쓴 것은 곧 다시 쓸 것이다. 한 번 참이었던 것은 당분간 계속 참일 것이다. 쉽게 바뀌지 않으리라는 전제 위에 사본을 저장하는 것. 이 가정이 들어맞을 때 캐시는 마법처럼 작동합니다. 그런데 이 전략은 어딘가 익숙하지 않나요.


© bencodezen.io


인간의 뇌도 같은 방식으로 세상을 처리합니다. 매번 모든 상황을 처음부터 분석하면 너무 느리니까, 과거 경험에서 패턴을 추출하고 빠르게 판단하는 거예요. 낯선 길에서 한 번 물린 개를 피하고, 한 번 상한 음식의 냄새를 기억하고, 한 번 위험했던 상황의 신호를 몸에 새기는 것. 이것은 생존을 위해 뇌가 만든 캐시입니다. 원본을 매번 처리하는 것보다 훨씬 빠르고, 살아남는 데 유리했으니까요. 수십만 년의 진화가 이 전략을 선택한 데는 이유가 있습니다. 심리학에서 말하는 가용성 편향이나 확증 편향 같은 인지적 지름길들도 결국은 뇌가 자주 접한 패턴을 가까이 캐싱해둔 결과라고 볼 수 있어요.


문제는 원본이 바뀌었을 때입니다. 세상은 이미 달라졌는데 캐시에는 옛 사본이 남아 있고, 뇌는 그 오래된 판단을 여전히 진짜라고 믿고 있는 상황. 한때는 정확했던 경험칙과 암묵지가 환경이 바뀐 뒤에도 갱신되지 않는 것. 기술의 세계에서는 이것을 'stale cache'라고 부릅니다. 인간의 세계에서는 편견이라고 부르고요. 하드웨어의 캐시와 인간의 편견은 같은 구조를 공유해요. 둘 다 '쉽게 바뀌지 않을 것'이라는 전제 위에 세워졌고, 둘 다 그 전제가 깨지는 순간 오작동하며, 둘 다 만든 것보다 무효화하는 것이 훨씬 어렵습니다.


개발자들 사이에서 회자되는 오래된 농담이 있지요. 컴퓨터 과학에서 어려운 문제는 딱 두 가지뿐이다, 캐시 무효화와 이름 짓기. 19세기 사냥꾼의 캐시도 같은 문제를 안고 있었어요. 루이스 탐험대가 마리아스 강에 만든 첫 번째 캐시는 땅이 무너지면서 기념품 모피와 대원들의 소지품 상당수가 못쓰게 되었습니다. 숨겨둔 것이 안전하게 보존될 거라는 가정이 틀린 순간이었어요.


캐시는 보이지 않게 설계된 것이기에, 잘 작동할 때는 아무도 그 존재를 의식하지 않습니다. 사이트가 빠르게 열리는 매 순간 캐시가 일하고 있지만, 고마워할 대상으로 떠오르지는 않아요. 편견도 마찬가지입니다. 빠른 판단이 맞아떨어지는 수많은 순간에는 그것이 편견인지조차 알아채지 못합니다. 그러다 어긋나는 순간이 오면, 그제야 이름이 불려요. '캐시 삭제'가 만병통치약이 된 것은 그래서인지도 모릅니다. 보이지 않는 것이 문제의 원인일 때, 우리가 할 수 있는 건 일단 지우고 처음부터 다시 쌓게 하는 것뿐이니까요.


그런데 브라우저의 캐시는 버튼 하나로 비울 수 있지만, 편견이라는 캐시는 그렇게 삭제되지 않습니다. 무엇이 캐싱되어 있는지도, 언제 만료되는지도 모르는 채 다음 판단을 위해 이미 로딩되고 있으니까요.




"테크-인문학 사전"은 테크 용어의 인문학적 어원을 추적하는 시리즈입니다. 우리가 매일 쓰는 기술 용어들이 신화, 철학, 문학, 역사에서 건너온 과정을 따라가며, 그 차용이 드러내는 의미의 변형과 긴장을 살펴봅니다.


참고 자료


백과사전

Encyclopaedia Britannica, "Maurice Wilkes" — https://www.britannica.com/biography/Maurice-Wilkes

Grokipedia, "Cache la Poudre River" — https://grokipedia.com/page/Cache_la_Poudre_River

Merriam-Webster, "cache" — https://www.merriam-webster.com/dictionary/cache

Online Etymology Dictionary, "cache" — https://www.etymonline.com/word/cache

Online Etymology Dictionary, "cachet" — https://www.etymonline.com/word/cachet

Online Etymology Dictionary, "cogent" — https://www.etymonline.com/word/cogent

Wikipedia, "Cache hierarchy" — https://en.wikipedia.org/wiki/Cache_hierarchy

Wikipedia, "IBM System/360 Model 85" — https://en.wikipedia.org/wiki/IBM_System/360_Model_85

Wikipedia, "Trapper's cache" — https://en.wikipedia.org/wiki/Trapper%27s_cache

Wiktionary, "cache" — https://en.wiktionary.org/wiki/cache

Wiktionary, "cacher" — https://en.wiktionary.org/wiki/cacher


공식 사이트 및 기관

Cambridge University, "Maurice V. Wilkes: Short Biography" — https://www.cl.cam.ac.uk/archive/mvw1/short-biography.html


논문

Alan Jay Smith, "Cache Memories," ACM Computing Surveys, 1982 — https://ieeexplore.ieee.org/document/839642/

Maurice Wilkes, "Slave Memories and Dynamic Storage Allocation," IEEE Transactions on Electronic Computers, 1965 — https://www.semanticscholar.org/paper/Slave-Memories-and-Dynamic-Storage-Allocation-Wilkes/22e6acfbc4af9ddc104965816dc20735374c7bad


아티클

Editors of Merriam-Webster, "Cache and Cachet: What's the Difference?," Merriam-Webster — https://www.merriam-webster.com/grammar/cache-and-cachet-whats-the-difference

Jeremy Norman, "Maurice Wilkes Introduces Memory Caching," History of Information — https://www.historyofinformation.com/detail.php?id=834

Joseph A. Mussulman, "Caching Supplies," Discover Lewis & Clark — https://lewis-clark.org/article/1486

Ken Shirriff, "Iconic consoles of the IBM System/360 mainframes," righto.com, 2019 — http://www.righto.com/2019/04/iconic-consoles-of-ibm-system360.html

Manoel Medeiros, "Cache: Why Keeping Data Close Is a Universal Principle," manoelmedeiros.com — https://manoelmedeiros.com/en/blog/cache-why-keeping-data-close-is-a-universal-principle.html

화요일 연재
이전 07화블루투스(Bluetooth): 바이킹 왕이 남긴 주파수