성능개선에 관한 내용들을 공부해보면 그 명칭은 다양하나 결국 하나로 수렴하는데 그것이 바로 캐시이다. Cache, 캐시, 캐싱으로 관용적으로 말하는 것의 의미는 결국 ‘물리적으로 가까운 곳에 나중에 쓸 것 같은 정보를 임시로 저장해 두어 필요해지면 빠르게 꺼내어 쓰는 (환경을 갖추는)행위’ 정도로 풀어쓸 수 있겠다.
하드웨어로는 CPU와 메모리 사이에 두는 L1, L2 캐시가 있다. 알고리즘에는 Memoize라는 기법이 있다. 브라우저에는 Local Storage와 Session Storage, 그리고 (의미적으로 좀 다르지만) Cookie가 있다. 서버에서는 세션을 유지한다. 넓게는 범국가적 서비스를 위해 AWS의 Cloudfront를 사용한다. Javascript 프레임워크 중 하나인 Vue에는 Virtual Dom을 사용한다. 용어와 종류, 분야가 다양하고 뭔가 언뜻 어려워 보이는데 결국 다 개념적으로, 그리고 실제의 구현을 보면 모두 그냥 캐시이다.
캐시의 정의에 ‘임시로 저장’이라고 했는데 이 임시를 처리하는 부분도 사용처에 따라 용어가 다 다르다. 하드웨어에서는 메모리에 올라온 정보가 임시적이다(그래서 이름이 RAM이다. 임시적이니깐 저장된 위치가 영구적일 필요가 없어 Random 하게 Access 하는 Momory 공간으로 사용 가능하다). 서버에선 유저 세션, 브라우저는 브라우저 세션, AWS의 S3에는 TTL(Time To Live), Javascript 프레임워크에서는 라이프사이클이라 불린다. 완벽히 일치하진 않지만 결국 모두 성능 극복을 위해 ‘임시로’ 물리적 최단 거리애 저장한다, 그리고 (어떤 기준에 의해) 필요 없어지면 파기한다, 이다.
여전히 용어가 너무 다양하고 복잡하다. 중요한 것은 ’복잡’해 보이는 코드의 세계에서 어떤 성능 개선의 영역도 결국 그 끝은 ‘캐시이다’, 그리고 ‘기준을 정해 필요 없어지면 파기한다’라는 간단한 명제를 중심에 품고 가는 것이다. 그럼 당신의 소프트웨어는 빨라진다. 뭔가 하루 종일 캐시라는 단어가 머리에 맴돌아 쭉 나열해본다.