웹 캐시에 대해 알아보기
- Coding/HTTP
- 2019. 6. 22.
캐시란?
웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을때 캐시된 로컬 사본이 존재한다면, 그 문서는 윈 서버가 아니라 그 캐시로부터 제공된다.
캐시의 이점
1) 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다.
2) 네트워크 병목을 줄여준다. 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있게한다.
3) 캐시는 윈 서버에 대한 요청을 줄여준다. 서버는 부하를 줄일 수 있고 더 빨리 응답할 수 있다.
4) 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는 거리로 인한 지연을 줄여준다.
여러개의 클라이언트가 서버에 같은 문서를 요청할때, 서버는 클라이언트들에게 각각 한번씩 전송하게된다. 똑같은 바이트들이 네트워크를 통해 계속 반복해서 이동한다. 이 불필요한 데이터 전송은 웹 서버에 부하를 주어 전송을 느리게한다. 캐시를 이용하면 서버 응답은 캐시에 보관되고, 캐시된 사본이 뒤이은 반복되는 요청들에 대한 응답으로 될 수 있기 때문에 트래픽을 주고받는 낭비가 줄어든다.
재검사
지금까지 알게된 사실을 보면, 캐시는 웹 서버에게 많은 이점을 주고있다. 하지만 캐시에게 필요한 것은 신선도 검사이다. 서버 콘텐츠는 언제나 변경될 수 있다. 캐시는 반드시 클라이언트에게 내려줄 사본이 최신 버전인지 서버를 통해 점검해야한다. 이러한 신선도 검사를 HTTP 재검사라고 한다. 캐시는 스스로 원한다면 언제든지 사본을 재검사 할 수 있지만 캐시는 클라이언트가 사본을 요청하였을때 그 사본이 검사를 할 필요가 있을 정도로 충분히 오래되었을 경우에만 재검사를 한다. 캐시가 웹 서버에 작은 재검사 요청을 보냈을때 콘텐츠가 변경되지 않았다면 서버는 304 Not Modified 응답을 보낸다.
캐시 처리 단계
웹 캐시의 기본적인 동작 단계를 알아보자.
1) 요청 받기 - 캐시는 네트워크로부터 도착한 요청 메시지를 읽는다.
2) 파싱 - 캐시는 메시지를 파싱하여 URL과 헤더들을 추출한다.
3) 검색 - 캐시는 로컬 복사본이 있는지 검사하고, 사본이 없다면 사본을 받아온다.
4) 신선도 검사 - 캐시는 캐시된 사본이 충분히 신선한지 검사하고, 신선하지 않다면 변경사항이 있는지 서버에 요청한다.
5) 응답 생성 - 캐시는 새로운 헤더와 캐시된 본문으로 응답 메시지를 만든다.
6) 발송 - 캐시는 네트워크를 통해 응답을 클라이언트에게 돌려준다.
7) 로깅 - 선택적으로, 캐시는 로그 파일에 트랜잭션에 대해 서술한 로그 하나를 남긴다.
문서 만료 확인
HTTP는 Cache-Control과 Expires 라는 특별한 헤더들을 이용해서 서버가 각 문서에 유효기간을 붙일 수 있게 해준다.
1) Cache-Control: max-age
max-age 값은 문서의 최대 나이를 정의한다. 문서가 처음 생성된 시간을 기준으로, max-age만큼의 시간동안만 문서의 사본이 유효하다고 판단한다.
2) Expires
절대 유효기간을 명시한다. 유효기간이 경과했다면, 그 문서는 더이상 신선하지 않다.
캐시 제어
HTTP는 문서가 만료되기 전까지 얼마나 오랫도안 캐시될 수 있게 할 것인지 서버가 설정할 수 있는 여러가지 방법을 정의한다.
1) Cache-Control: no-store
캐시가 검증되지 않은 캐시된 객체로 응답하는 것을 막는다. 캐시가 그 응답의 사본을 만드는 것을 금지한다.
2) Cache-Control: no-cache
캐시가 검증되지 않은 캐시된 객체로 응답하는 것을 막는다. 로컬 캐시 저장소에 저장될 수 있다. 먼저 서버와 재검사를 하지 않고서는 캐시에서 클라이언트로 제공될 수 없다.
3) Cache-Control: must-revalidate
캐시가 이 객체의 신선하지 않은 사본을 서버와의 최초의 재검사 없이는 제공해서는 안된다.
'Coding > HTTP' 카테고리의 다른 글
쿠키의 모든것 (0) | 2019.06.22 |
---|---|
HTTP2.0의 출현 (0) | 2019.06.22 |
TCP 커넥션 관리 (0) | 2019.06.22 |
HTTP 기초개념 알아보기 (0) | 2019.06.22 |
HTTP 메시지 (0) | 2019.06.22 |