웹의 본질은 요청을 보내고 결과를 받는 행위들이다.
웹 브라우저는 매번 웹 서버에게 요청해서 결과를 받아와야 하고, 웹 서버는 매번 웹 브라우저의 요청에 대해 결과를 만들고, 반환해야 한다.
그래서, 웹 브라우저와 웹 서버는 너무 힘들다


사전적 정의는 다음과 같다.
컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. - 위키백과
일반적으로 일시적인 특징이 있는 데이터 하위 집합을 저장하는 고속 데이터 스토리지 계층 - AWS
일반적으로 캐시는 자주 사용되는 데이터를 임시로 복사해두는 임의의 장소를 말한다. 그리고 데이터를 캐시에 저장하는 행위를 캐싱이라고 한다.
⚠️ Cache 캐시 용어의 범용성
“클라이언트와 서버” 처럼 문맥에 따라 워낙 다양하게 사용되니 짚고가자
- 캐시 (명사) : 임시 (단기적 : 기간 설정 or 알고리즘 설정) 로 재사용할 내용을 저장
- CPU 캐시 : CPU 연산을 위해 메모리에서 값 가져와 사용 후 폐기 (칩셋)
- HTTP 캐시 : 웹 요청에 따른 결과를 임시 저장 후
- 서버 캐시 : LRU-Cache ‘로컬 캐시’ 혹은 인메모리 DB 인 Redis ‘글로벌 캐시’
- 캐시 (동사) : “임시 저장해” 의 의미 (Default 와 같은 개발자 용어)
이미지 혹은 JS, CSS와 같은 파일들은 자주 변하지 않는다. 캐시를 사용하지 않으면 자주 변하지 않는 데이터라도 요청마다 새롭게 다운로드 해야한다. 이는 불필요한 네트워크 비용 발생을 야기하고, 서버에 추가적인 부담을 준다. 이는 곧 느린 웹페이지 로딩 속도로 직결되고, 좋지 않은 사용자 경험을 낳을 것 이다.
따라서 웹사이트나 앱 서비스에 사용되는 이미지, HTML, 파일 등의 재사용 가능한 HTTP 리소스를 임시로 저장하는 공간이 필요한데 이를 HTTP Cache라고 한다.
크게 (1)Private와 (2)Shared로 나뉜다.

개인 사용자의 브라우저에 저장되는 캐시로, 해당 사용자만 접근할 수 있어 다른 사람이 접근할 수 없다.
임시 중간 저장소가 웹 브라우저와 웹 서버 사이에 있다면, 모든 웹 브라우저 유저 다수를 위한 것이다.

캐시한 데이터의 원본 주인인 웹 서버가 설정한 특정 주기에 따라, 캐시한 데이터가 오래됐는지 검증
재검증 주기: 캐시해 놓은 데이터를 얼마 간격으로 재검증할 것인가
재검증 기준: 캐시해 놓은 데이터가 오래되었는지 여부를 웹 서버가 판단하기 위한 그준 근거.
- 시간 : 수정일(Last-modified)
- 고유값 : 해시 또는 ID (ETag)
전송 Resource의 마지막 수정 시간 정보를 헤더에 저장함. 기본적으로 캐시가 유효한지 여부를 시간을 기반으로 판단한다.

200 + Resource Cache304 Not Changed304 Not Changed200 + Resource CacheHTTP 프로토콜에서 리소스의 특정 버전을 식별하는 고유한 식별자이다. 기본적으로 캐시가 유효한지 여부를 고유값(해시, ID)을 기반으로 판단한다.
200 + Resource Cache304 Not Changed304 Not ChangedCache-Control 헤더를 통해 캐시의 수명, 캐시 사용 여부, 재검증 필요 여부 등을 설정할 수 있다.
캐시할 데이터는 웹 서버가 반환하는값이고, 반환값에 대한 소유주는 웹 서버이기에 웹 서버가 캐시를 모두 제어
캐시 저장 여부
no-store: 캐시를 사용하지 않음. 은행 계좌 정보나 결제 내역 등의 중요한 데이터는 절대 캐시되어서는 안 되는 상황처럼 주로 보안이나 개인정보 보호가 필요한 경우에 사용됨.no-cache: 캐시를 사용함. 단, 매번 재검증 후 사용할 수 있음.캐시 저장 장소
public: Private(웹 브라우저) + Shared(프록시) 모두에 저장private: Private(웹 브라우저) 에만 저장
캐시 재검증 주기
max-age: Expires(유효시간)으로 변환(기존 Expires 가 있다면 덮어쓴다)s-maxage: Proxy 캐시에만 적용되는 유효기간재검증 강제
must-revalidate: 꼭 "웹 서버"와 직접 재검증이 완료된 뒤 캐시를 사용해야한다는 의미의 정책. 서버와의 접속 문제로 재검증이 실패한 경우 504 에러 발생.