Santos의 개발블로그

웹 캐시 본문

기타

웹 캐시

Santos 2020. 1. 14. 15:00

캐시

프로그램이 수행될 때 나타나는 지역성을 이용하여 메모리나 디스크에서 사용되었던 내용을 특별히 빠르게 접근할 수 있는 곳에 보관하고 관리함으로써 이 내용을 다시 필요로 할 때 보다 빠르게 참조하도록 하는 것 

 

웹 캐시 

사용자가 웹 사이트(Server)에 접속할 때, 정정 컨텐츠(image, Html, Css 등)를 특정 위치에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하여 받는 것이 아니라, 특정 위치에서 불러옴으로써 사이트 응답시간을 줄이고, 서버 트래픽 감소 효과를 볼 수 있는 것 

웹 캐시의 종류 

1. Browser Caches

 - 브라우저 또는 HTTP 요청을 하는 Client Application에 의해서 내부 디스크 캐시 되는것  

 - 개인에 한정된 캐시 

 - 브라우저 Back 버튼 또는 이미 방문한 페이지를 재 방문하는 경우

 

2. Proxy Caches

 - Browser Caches와 동일한 원리도 동작하며 네트워크 상에서 동작

 - 네트워크 대역을 효율적으로 사용하는 것과 조직 내에 특정 웹사이트에 대한 엑세스 제한의 목적을 가짐

 

3. Gateway Caches

 - 서버 앞 단에 설치되어 요청에 대한 캐시 및 효율적인 분배를 통해 성능을 향상

 - 로드 밸런싱, SSL acceleration, Compression 등을 수행

 - 무한대의 클라이언트들에게 한정된 수의 웹서버 컨텐츠를 제공


웹 캐시 컨트롤 방법

브라우저는 한번 요청한 파일은 그 이후부터 캐시를 사용하지만, 만약 캐시된 내용을 수정해야 하거나 캐쉬되지 않아야 하는 내용이 있다면, 개발자가 설정할 수 있어야 한다. 브라우저는 HTTP Header를 사용하여 캐시를 컨트롤 한다. 

1. Cache-Control

 - 캐싱 정책을 정의할 수 있다. 

 - 지시문은 응답을 캐시할 수 있는 사용자, 해당 조건 및 기간을 제어한다. 

 - 모든 최신 브라우저는 Cache-Control을 지원한다.

 - Cache-Control은 응답헤더, 요청 헤더에서도 사용할 수 있다.

 

2. no-cache

 - 캐시를 쓰기 전에 서버에 이 캐시를 써도 되는지 물어보라는 뜻이다. 

 

3. no-store

 - 캐시를 하지 않으려면 사용한다. 

 

4. public

 - 공유 캐시 또는 중개 서버에 저장해도 된다는 뜻이다. 

 - max-age로 캐시 유효시간을 줄 수 있다. 초 단위이므로 1시간이 지나면 이 응답 캐시는 마료된 것으로 여겨진다. 

 

5. private

 - 특정 사용자 환경에만 저장하라는 뜻이다. 

 - 일반적으로 단일 사용자를 대상으로 하므로 중개 서버가 이 응답을 캐시하는 것은 허용되지 않는다.

 

6. must-revalidate

 - 만료된 캐시만 서버에 확인을 받도록 한다. 

 

7. Age

 - 캐시 응답 때 나타나는데, max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려준다. 

 

8. Expires

 - 응답 컨텐츠가 언제 만료되는지를 나타내며, Cache-Control의 max-age가 있는 경우 이 헤더는 무시된다. 

 

9. ETag

 - 응답에 대한 유효성 검사를 수행한다. (HTTP 컨텐츠가 바뀌었는지를 검사할 수 있는 태그)

 - 서버는 Etag HTTP 헤더를 사용하여 유효성 검사 토큰은 전달하는데, 이를 사용하여 리소스가 변경되지 않은 경우 데이터가 전송되지 않는다. 

 

10. If-None-Match

 - 서버보고 ETag가 달라졌는지 검사하고 ETag가 다를 경우에만 컨텐츠를 새로 받는다. 

 - 만약 ETag가 같다면 서버는 304 Not Modified를 응답하고 캐시를 그대로 사용하게 한다.  


웹 캐시 동작 과정

1. 처음 요청

 1) 브라우저는 서버에 index.html 파일을 요청한다. 

 2) 서버는 index.html 파일을 찾아보고 존재하는 파일이라면 파일 내용을 브라우저에게 응답한다. 

 3) 브라우저는 응답 받은 내용을 브라우저에 표시하고 응답 헤더의 내용에 따라 캐시 정책을 수행한다. 

 

캐시정책: 응답 헤더에 Last-Modified, Etag, Expires, Cache-Control:max-age 복사본 생성 후 값 저장

 

2. 재 요청 

 1) Last-Modified

  (1) 브라우저는 최초 응답시 받은 Last-modified 값을 If-Modified-Since라는 헤더에 포함 시켜 페이지를 요청한다.

  (2) 서버는 요청 파일의 수정 시간을 If-Modified-Since과 비하여 동일하다면 304 Not Modified로 응답하고 다르면 200 Ok와 함께 새로운 Last-Modified값을 응답 헤더에 전송한다.

  (3) 브라우저는 응답 코드가 304인 경우 캐시에서 페이지를 로드하고, 200인 경우 새로 다운받은 후 Last-Modified값을 갱신한다. 

 

  2) Etag(Entity tag)

   (1) 브라우저는 최초 응답시 받은 Etag값을 If-None-Match라는 헤더에 포함시켜 페이지를 요청한다. 

   (2) 서버는 요청 파일의 Etag값을 If-None-Match 값과 비교하여 동일하다면 304 Not Modified로 응답하고, 다르면 200 Ok와 함께 새로운 Etag 값을 응답 헤더에 전송한다. 

   (3) 브라우저는 응답 코드가 304인 경우 캐시에서 페이지를 로드하고 200이라면 새로 다운받은 후 Etag값을 갱신한다. 

 

 3) Expires

  (1) 브라우저는 최초 응답 시 받은 Expries 시간을 비교하여 기간 내라면 서버를 거치지 않고 바로 캐시에서 페이지를 로드한다. 하지만 기간이 만료되었다면 validation 작업을 수행한다. 

 

 4) Cache-Control

  (1) 브라우저는 최초 응답시 받은 Cache-Contol 중 max-age 값을 GMT와 비교하여 기간 내라면 서버를 거치지 않고 캐시에서 페이지를 로드한다. 하지만 기간이 만료되었다면 validation 작업을 수행한다.  

 


 

'기타' 카테고리의 다른 글

Polyfill  (0) 2020.01.21
OWASP  (0) 2020.01.18
크로스 브라우징  (0) 2020.01.10
함수형 프로그래밍  (0) 2020.01.10
RESTful API  (0) 2020.01.10
Comments