컴퓨터의 동작 중에서 오랜시간이 걸리는 작업의 결과를 저장하여 활용하는 저장소로, 시간과 비용을 절약하는 기법을 위해 활용된다.
CPU와 메모리가 끊임없이 데이터를 주고 받으면서 처리하는데, CPU에 비해 메모리의 처리속도가 뒤처짐. 따라서, CPU가 메모리를 기다리는 현상이 자주 발생함
이를 해결하기 위해 용량은 작지만 속도가 빠른 캐시 메모리를 활용해 재사용성이 높은 데이터를 저장했다가 호출하여 사용함. (빠른만큼 비쌈)
캐시메모리가 CPU, 주기억장치, 보조기억장치와 데이터를 주고 받으면서 메모리 전체의 효율을 증대시킨다. 이처럼 캐시는 빠르고 작은(비싼) 메모리와 느리지만 큰(싼) 메모리를 조합해 빠르고 큰 메모리로서 동작하게 하는 것이 목적이다.
이미지, 자바스크립트처럼 용량이 큰 정적 자원을 웹 브라우저가 캐시하도록 하는 것이다.
1.Browser Cashes
2.Proxy Caches
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
http://httpd.apache.org/docs/2.2/mod/mod_expires.html
http://wiki.nginx.org/HttpHeadersModule
1-1.Last-Modified (HTTP1.0)
마지막 수정일자를 표시하는 값으로, Request 헤더에 If-Modified_Since값에 저장된 값을 함께 발송한다. 서버에서는 값이 동일하면 304 NOT Modified를, 다르다면 200 OK를 반환하며 Last-Modified를 함께 보낸다.
1-2. Etag(Entity Tag) (HTTP1.1)
수정된 버전을 확인하기 위한 값으로, Request헤더에 If-None-Match값에 저장된 값을 함께 발송한다. 서버에서는 값이 동일하면 3-4 Not Modified를, 다르다면 200 OK를 반환하며 함께 새로운 Etag 값을 보낸다.
2-1. Expires (HTTP1.0)
캐시의 만료일자를 표시하는 값으로 보관하고 있는 Expires 값이 기간 내라면, 서버를 거치지 않고 바로 캐쉬에 저장된 내용을 출력한다. 기간이 만료되었다면 재검증(Revalidation) 작업을 수행한다. 유효하다면 새로운 만료일자와 함께 기존의 캐시 값을 활용한다.
2-2. Cache-Control (HTTP1.1)
브라우저는 최초 응답시 받은 Cache-control 중 max-age값을 GMT(Greenwich Mean Time)와 비교하여 기간 내라면 캐쉬에 저장된 내용을 출력한다. 기간이 만료되었다면 재검증(Revalidation) 작업을 수행한다. 유효하다면 새로운 만료일자와 함께 기존의 캐시 값을 활용한다.
**GMT는 런던을 기점으로하는 표준시
얼른 규모 큰 프로젝트를 만들어보자
참고문서