요리사는 마늘이 필요할 때마다 대형 냉장고까지 걸어갈 수 있어요. 하지만 그렇게 하지 않죠. 영업 시작 전에 마늘을 미리 다져 작은 그릇에 담아 작업대 옆에 놓아둬요. 가깝고 빠르고 바로 꺼낼 수 있으니까요. 냉장고는 여전히 원본이에요. 그릇은 그냥 더 가까이 있을 뿐이고요.
그 그릇이 바로 캐시예요.
캐시는 무언가의 사본을 더 빠르고 가까운 곳에 저장해두는 거예요. 매번 원본을 가지러 갈 필요가 없도록요. 원본의 위치는 그대로예요. 다만 모든 요청마다 거기까지 가지 않는 거죠.
주방에서 보면 이 트레이드오프가 바로 보여요.
그릇은 빠릅니다. 그릇에서 꺼내는 건 1초, 냉장고까지 다녀오는 건 20초예요. 그런데 그릇의 내용물은 상할 수 있어요. 오후 3시에 다져둔 마늘을 저녁 6시 영업에 쓴다면, 그 마늘은 처음과 같지 않을 수 있죠. 냉장고엔 신선한 것이 있어요. 그릇에 있는 건 아닐 수도 있고요. 그릇이 비면 냉장고로 돌아가면 돼요. 그릇이 실패해도 아무것도 망가지지 않아요. 느린 경로를 택할 뿐이에요.
소프트웨어 캐시도 정확히 이렇게 작동해요. 브라우저 캐시는 이미지, 스크립트, 페이지 스타일을 로컬에 저장해 페이지를 새로고침할 때마다 서버에서 새로 내려받지 않도록 해요. 서버 측 캐시는 느린 데이터베이스 쿼리 결과를 저장해 다음 요청이 쿼리를 건너뛸 수 있게 하고요. CDN도 캐시예요. 파일에 적용된 캐시일 뿐이에요.
캐시 초기화가 이상한 문제를 고치는 이유가 여기 있어요.
캐시가 오래되면 시스템은 잘못된 그림을 보고 작동해요. 원본은 업데이트됐는데 그릇에는 지난주 마늘이 그대로 있는 상황인 거죠. 캐시를 초기화한다는 건 그릇을 비우고 냉장고로 다시 가는 거예요. 느리지만 신선해요. 사이트가 이상하게 보이는 이유는 브라우저가 세 번 전 배포 때 저장해둔 사본을 보여주기 때문이에요. 초기화하면 실제 버전이 나와요.
캐시 초기화는 모든 걸 고치는 게 아니에요. 지름길 대신 원본을 가져오는 거예요.
AI 시스템에서 만나는 캐시.
프롬프트 캐싱(Claude가 직접 지원하는 기능)은 긴 대화의 앞부분이나 큰 문서를 저장해두어 새 메시지가 올 때마다 모델이 전체를 다시 읽지 않도록 해요. 그것도 캐시예요. 모델의 그릇에 이미 맥락이 준비돼 있어서, 매 턴마다 냉장고까지 다녀오는 비용—시간과 비용 모두—을 치르지 않아도 되는 거죠.
캐싱이 제대로 작동하면 응답 시간과 비용이 함께 내려가요. 잘못 설정되거나 오래됐다면, 오래된 정보를 기반으로 작동하는 것처럼 보이는 응답이 나와요. 실제로 그렇기 때문이에요.
규칙은 하나예요. 캐시는 언제나 지름길이지 원본이 아니에요. 가끔 오래될 수 있는 빠른 지름길. 지금 어느 쪽에서 읽고 있는지 아는 것이 중요해요.