IT/Network

[Network] Application Layer (애플리케이션 계층) - 2.2 웹 애플리케이션 정리 2.2.5 Web Caching (웹 캐싱)

wookiist 2018. 1. 8. 16:42

2.2.5 Web Caching

Proxy server라고도 불리는 Web cache는 원본 Web server를 대신해서 HTTP request를 처리하는 network entity이다.
Web cache는 그 자체로 디스크 저장 공간을 가지고 있으며, 최근에 요청된 객체들의 복사본을 저장하고 있다. 일화를 예로 들어 보면 다음과 같다.


1) 브라우저가 TCP 연결을 Web cache와 만들고, Web cache로 HTTP Request Message를 보내 객체를 요청한다.
2) Web cache는 그 객체를 보관하고 있는지 확인하고, 존재하면, HTTP Response Message에 담아 클라이언트 브라우저로 전송한다.
3) 만약 존재하지 않는다면, Web cache는 원본 서버와 TCP 연결을 생성한다. Web cache는 원본 서버로 브라우저가 요청한 객체를 요청하는 HTTP Request Message를 보낸다. 이 요청을 받은 원본 서버는 HTTP Response Message에 해당 객체를 담아 전송한다.
4) Web cache가 객체를 받으면, 이에 대한 복사본을 저장하고, HTTP Response Message에 그 복사본을 담아 브라우저로 전송한다. (이 때, 1 번 단계에서 생성한 TCP Connection을 통해 보낸다.)

The Conditional GET

Caching이 사용자가 느끼는 Response Time을 줄여주기는 하지만, 이는 또다른 문제를 야기한다. 보관하고 있던 복사본이 원본 서버에서 수정되거나 삭제되는 경우다.

다행히, HTTP는 Cache가 자신의 객체가 최신의 것인지 확인할 수 있는 방법을 제공한다. 그리고 그 방법은 Conditional GET 이라고 부른다.

일화를 통해 알아보자.


  1. Web cache가 브라우저를 대신해서 Web server로 다음과 같은 메시지를 보낸다.
    GET /fruit/kiwi.gif HTTP/1.1
    Host: www.exotiquecuisine.com
  1. Web server는 요청받은 해당 객체에 대해 Response Message를 보낸다.
    HTTP/1.1 200 OK
    Date: Sat, 3 Oct 2015 15:39:29
    Server: Apache/1.3.0 (Unix)
    Last-Modified: Wed, 9 Sep 2015 09:23:24
    Content-Type: image/gif
    (data data data data data ...)
  1. 이제 일주일 후에 또다른 브라우저가 같은 객체에 대한 요청을 Web cache로 보냈다 가정하자. 일주일 동안 해당 객체는 수정되었을 가능성이 있다. 이를 판단하기 위해 cache는 conditional GET을 발행한다. (여기서 If-modified-since 헤더는 2번의 Last-modified 헤더의 값과 정확히 일치함에 주목하자)
    GET /fruit/kiwi.gif HTTP/1.1
    Host: www.exotiquecuisine.com
    If-modified-since: Wed, 9 Sep 2015 09:23:24
  1. 만약 수정된 적이 없다면 Web server는 다음과 같은 메시지로 응답할 것이다.
    HTTP/1.1 304 Not Modified
    Date: Sat, 10 Oct, 2015 15:39:29
    Server: Apache/1.3.0 (Unix)
    (empty entity body)

이로써 우리의 Web cache는 해당 객체가 최신임을 확신하고, 요청한 브라우저에게 전송할 것이다.

반응형