컴퓨터 과학의 역사에서 가장 중요한 개념 중 하나를 고르라면 단연 **캐시(Cache)**를 꼽을 수 있을 것이다. 캐시는 한 번 접근된 데이터가 짧은 시간 내에 다시 접근될 가능성이 높다는 관측(시간적 근접성, temporal proximity)에서 비롯된 개념으로, 적절한 캐시의 사용은 실행 속도 측면에서 엄청난 이득을 가져다준다. CPU부터 저장장치에 이르기까지 컴퓨터 과학에서 캐시의 중요성은 이루 말할 수 없을 정도이다.
캐시의 개념이 컴퓨터 과학의 여러 곳에 적용되어 큰 발전을 가져왔듯 우리가 흔히 보는 웹에도 캐시의 개념이 적용되어 있으며, 이들을 통틀어 **웹 캐시 (web cache)**라고 부른다.
웹 캐시란 서버의 HTTP 응답 데이터를 저장해둔 뒤, 해당 데이터에 대한 요청이 있을 때 서버에 해당 요청을 직접 보내는 대신 저장해 둔 데이터를 반환하는 기술이다.
웹 캐시의 원리
이용자가 멀리 떨어져 있는 https://dreamhack.io 서버에 특정 파일을 요청하는 상황을 가정해보자. 이용자는 https://dreamhack.io/image.png로 HTTP 요청을 보내고, 서버로부터 HTTP 응답으로 파일을 반환받을 것이다. 결과적으로 서버에 요청을 보내고 응답을 받는 시간 동안 일정 시간의 지연이 발생하게 된다.

만약 이용자가 또 다시 동일한 파일을 요청한다면, 현재 구조에서는 이전 과정과 거의 동일한 HTTP 요청과 응답이 반복되며, 이용자는 통신에 소요되는 시간만큼 서버의 응답을 다시 기다려야 한다. 이 밖에도 서버는 해당 요청을 또 다시 처리하기 위해 CPU 등 하드웨어 연산 자원을 소모해야 한다.

이처럼 서버와 클라이언트 사이에서 동일한 HTTP 요청과 응답이 반복된다면, 다수의 시간 지연과 자원 소모가 발생하며 비효율성을 초래하게 된다. 이를 해결하기 위해 고안된 것이 바로 웹 캐시이다.
웹 캐시는 일반적으로 이용자와 서버 사이에 위치한다.

웹 캐시의 동작 과정을 이해하기 위해 서버에 최초로 image.png 파일을 요청하는 상황을 가정해보자. 이용자가 서버에 image.png 파일을 요청하면 서버가 해당 요청을 처리함과 동시에 중간에 존재하는 웹 캐시가 서버의 응답인 image.png를 **캐싱(caching)**하게 된다. 이를 그림으로 나타내면 아래와 같다.

이후 이용자가 다시 한 번 image.png 파일을 요청하면 서버가 직접 해당 요청을 처리하는 대신 웹 캐시가 요청을 처리하여 캐싱된 image.png를 반환한다. 그 결과 이용자는 최초 요청에 비해 더 짧은 시간 내에 응답을 받을 수 있게 되며, 서버는 중복된 요청을 처리하는 데 자원을 소모하지 않아도 된다. 특히 .js나 .css, 혹은 이미지 파일 등 자주 변경되지 않는 파일을 반복적으로 전송해야 하는 경우 매우 효율적이다.
