웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치다. 웹 요청이 캐시에 도착했을 때, 캐시 된 로컬 사본이 존재한다면, 그 문서는 원 서버가 아니라 그 캐시로부터 제공된다.
캐시의 장점
- 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다.
- 네트워크 병목을 줄여준다. 많은 네트워크가 원격 서버보다 로컬 네트워크 클라이언트에 더 넓은 대역폭을 제공하기 때문에 캐싱을 이용하면 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있다.
- 원 서버에 대한 요청을 줄여준다. 서버는 부하를 줄일 수 있으며 더 빨리 응답할 수 있게 된다.
- 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는 거리로 인한 지연을 줄여준다.
- Flash Crowds(갑자기 요청이 몰리는 일) 대응이 가능하다. 갑작스런 사건(뉴스 속보, 스팸 메일, 연예 관련 기사)으로 인해 어떠한 웹문서에 대한 트래픽이 급증하여 웹 서버에 심각한 장애를 야기시킬 수 있다.
그렇다면 우리는 HTTP가 캐시된 사본을 어떻게 최신 상태로 유지할 수 있을까?
캐시 적중과 미적중
모든 웹 문서의 사본을 저장하는 캐시는 존재할 수 없다(빌 게이츠라면 가능할까?). 그래서 캐시에 요청이 도착했을 때, 그에 대응하는 사본이 있을 수도 없을 수도 있다. 대응하는 사본이 있는 경우는 캐시 적중(cache hit)이라고 하며, 반대의 경우를 캐시 미적중(cache miss)라고 한다. 캐시 미적중이라면 그냥 원 서버로 전달되기만 할 뿐이다.
캐시 재검사
재검사(Revalidation)란, 캐시는 반드시 캐시가 가지고 있는 사본이 여전히 최신인지 서버를 통해 때때로 점검하는 것이다. 재검사가 필요한 이유는 원 서버 콘텐츠는 항상 변경될 수 있기 때문이다.
캐시는 스스로 원한다면 언제든지 사본을 재검사할 수 있다. 그러나 캐시가 문서를 수백만 개씩 갖고 있는 경우가 흔한데 비해 네트워크 대역폭은 부족하기 때문에, 대부분의 캐시는 클라이언트가 사본을 요청하였으며 그 사본이 검사를 할 필요가 있을 정도로 충분히 오래된 경우에만 재검사를 한다.
캐시는 캐시 된 사본의 재검사가 필요할 때, 원 서버에 작은 재검사 요청을 보낸다. 콘텐츠가 변경되지 않았다면, 서버는 아주 작은 304 Not Modified 응답을 보낸다. 그 사본이 여전히 유효함을 알게 된 캐시는 즉각 사본이 신선하다고 임시로 다시 표시한 뒤 사본을 클라이언트에 제공한다. 이를 재검사 적중 혹은 느린 적중이라고 한다. 이것은 순수 캐시 적중보다 느린데, 원 서버와 검사를 할 필요가 있기 때문이다. 그러나 캐시 부적중보다는 빠른데, 서버로부터 객체 데이터를 받아올 필요가 없기 때문이다(실패한 재검사는 캐시 부적중과 거의 같다).
HTTP는 캐시 된 객체를 재확인하기 위한 몇 가지 도구를 제공하는데 가장 많이 쓰이는 것은 If-Modified-Since 헤더다. 서버에게 보내는 GET 요청에 이 헤더를 추가하면 캐시된 시간 이후에 변경된 경우에만 사본을 보내달라는 의미가 된다.
- 재검사 적중 - 304 Not Modified 응답
- 재검사 부적중 - 콘텐츠 전체와 200 OK 응답
- 객체 삭제 - 만약 서버 객체가 삭제되었다면, 404 Not Found 응답, 캐시는 사본을 삭제
캐시 적중률
캐시 적중률이란, 캐시가 요청을 처리하는 비율이다. 캐시 적중비, 문서 적중률, 문서 적중비라고 부르기도 한다. 적중률은 0에서 1까지의 값으로 되어 있지만 흔히 퍼센트로 표현되기도 한다.
- 0% - 모든 요청이 캐시 부적중(네트워크 너머로 문서를 가져와야 했던 경우)
- 100% - 모든 요청이 캐시 적중(캐시에서 사본을 가져온 경우)
캐시 관리자는 당연히 캐시 적중률이 100%에 근접하게 되는 것을 좋아하지만, 적중률은 예측하기 어려운 것으로 악명이 높다. 일반적으로 적중률 40%면 웹 캐시로 괜찮은 편이다.
바이트 적중률
모든 문서들이 같은 크기는 아니다. 따라서 캐시 적중률이 모든 것을 말해 주지 않는다. 몇몇 큰 객체는 덜 접근되지만 그 크기 때문에 전체 트래픽에 더 크게 기여한다.
바이트 적중률이란, 캐시를 통해 제공된 모든 바이트의 비율을 표현한다. 이 측정값은 트래픽이 절감된 정도를 포착해낸다.
- 100% - 모든 바이트가 캐시에서 왔으며, 어떤 트래픽도 인터넷으로 나가지 않았음을 의미한다.
캐시 적중률과 바이트 적중률
캐시 적중률과 바이트 적중률은 둘 다 캐시 성능에 대한 유용한 지표이다. 캐시 적중률은 얼마나 많은 웹 트랜잭션을 외부로 내보내지 않았는지를 보여주며, 문서 적중률을 개선하면 전체 대기시간(지연)이 줄어든다. 바이트 적중률은 얼마나 많은 바이트가 인터넷으로 나가지 않았는지 보여주며, 이를 개선하면 대역폭 절약을 최적화한다.
'네트워크' 카테고리의 다른 글
[HTTP] 캐시3 - 캐시 처리 단계 (2) | 2020.01.10 |
---|---|
[HTTP] 캐시2 - 토폴로지 (0) | 2020.01.04 |
[HTTP] Proxy (프락시) (0) | 2020.01.01 |
[HTTP 아키텍처] 웹 서버 (0) | 2019.12.22 |
[HTTP] HTTP 메시지 (0) | 2019.12.15 |