Cache
1.(무기 등의) 은닉처 2.캐시(고속 기억 장치) 3.은닉하다
그러니까 무언가를 숨겨서 저장한다는 의미이다.
페이지를 열 때마다 html 등 자료를 다시 다운로드 받아야 한다면 비효율적일 것이다.
이미 받은 것은 'Cache'했다가 동일 경로로 접속시 다시 Cache에서 꺼내 쓴다면 속도가 향상될 것이다.
그런데 무한정 캐시에 다운로드 받은 걸 모두 저장할 수는 없다.
그래서 보통 expired 기간이 있다.
문제는 Cache를 최신 상태로 유지하는 것이다.
사용자가 이미 저장된 과거의 자료를 Cache에서 꺼내다 쓴다면 개발자가 한 업데이트가 무의미할 테니까 말이다.
request header에 if-modified-since에서 modified 된 날짜가 기록되어 있다.
가지고 있는 파일이 이 시간에 수정된 파일이라는 것이다.
만약 이 이후에 수정된 파일이 있다면 내용을 전송해달라고 요청한다.
없다면 기존에 있는 파일을 재사용한다.
response header에는 last-modified라고해서 언제 마지막으로 수정되어있는지에 대한 정보가 담겨있다.
if-modified-since와 일치하면 재사용(304 http status code 전송)
수정이 있다면 다운로드 함(200 OK http status code 전송)
혹은 response header에는 ETAG라 하여 다운로드 받은 파일에 고유한 tag값을 줘서 이 값을 참고하여
일치하면 재사용, 불일치하면 다운로드하기도 한다.
시간과 ETag 둘 중에 하나라도 다르면 다운로드 한다.
전체적인 캐시 정책을 보자
캐시를 짤 때 어떤 방식이 최적인지 제시해준 것이다.
Resuable reponse? : 다시 사용할 것인가?
revalidate each time? : 매번 유효성 검사를 해야 하나?
cacheable by intermediate cashes? : 사용자의 위치와 가까운 캐싱 서버 (CDN, CloudFront)에서 사용할 것인가?
cf) CDN(Contents Delivery Network)은 지리적 물리적으로 떨어져 있는 사용자에게 컨텐츠 제공자의 컨텐츠를 더 빠르게 제공할 수 있는 기술을 말함
maxium cache lifetime? : 캐시 수명
그래서, 정리하자면 리전과 멀리 있는 사용자들이 빠르게 웹을 내용을 받아보기 위해
캐시서버를 구축할 필요가 있고 이러한 서비스를 CDN이라고 하며
이를 AWS에서는 CloudFront라는 이름으로 제공하고 있는 것이다.
https://opentutorials.org/module/3830
'🌐 Network > 🔗 HTTP' 카테고리의 다른 글
I. HTTP: 웹의 기초 | 3. HTTP 메시지 (0) | 2020.03.31 |
---|---|
I. HTTP: 웹의 기초 | 1. HTTP 개관, 2. URL과 리소스 (0) | 2020.03.31 |
[Cookie] Cookie (0) | 2020.03.27 |
[Buffer] 청크, 버퍼, 스트림 (1) | 2020.03.07 |
동기(sync)와 비동기(async) / Blocking와 NonBlocking (0) | 2020.03.03 |