Shine's dev log
Cookie, Web cache (쿠키, 웹 캐시의 개념) 본문
1. Cookie
쿠키는 문자와 숫자의 조합으로 된 작은 파일이다.
서버는 쿠키를 통해서 클라이언트를 식별하고 이에 맞춰 다양한 서비스를 제공한다. 아마존 사이트에 들어가면 내가 보았던 상품 목록들을 보여 주는데, 이런 것들이 모두 쿠키를 이용하기 때문에 가능한 것이다.
사용자가 특정 사이트에 처음 접속하면, 그 사이트 서버는 사용자에게 Cookie header라는 숫자를 부여해준다. 브라우저는 부여받은 Cookie header와 사이트 이름을 조합하여 만들어진 쿠키 파일을 사용자의 컴퓨터에 저장한다.
이후 사용자가 그 사이트에 접속할 때마다 해당 쿠키파일을 보내주면 서버는 이를 통해 사용자를 식별할 수 있다. 전체적인 동작 과정은 아래 그림과 같다.
위의 내용들을 종합해보았을 때, 쿠키를 사용하려면 다음과 같은 4가지 구성요소가 필요하다.
1) HTTP response 메시지의 Cookie header line
2) HTTP request 메시지의 Cookie header line (HTTP response 메시지 바로 다음에 등장)
3) 클라이언트의 컴퓨터에 저장되는 쿠키파일과 이를 관리해주는 브라우저
4) 웹사이트에서 사용자들의 쿠키파일을 관리할 데이터베이스
2. Web cache
캐시라는 말은 컴퓨터의 다양한 분야에서 자주 쓰인다. CPU에서의 캐시 메모리, 운영체제에서의 페이지 캐시, 파일 시스템에서도 캐시라는 말이 등장할 정도로 다양한 분야에서 쓰인다.
그 중에서도 웹에서 쓰이는 웹 캐시는 서버와 클라이언트 사이에서 서버로부터 컨텐츠를 더 빨리 받아오도록 하는 꼼수이다.
웹 캐시는 프록시 서버(Proxy server)를 통해 구현할 수 있는데, 이 프록시 서버는 클라이언트와 서버 사이에 위치한다. 프록시 서버는 클라이언트가 서버에게 요청하는 것을 듣고
1) 만약 요청하는 컨텐츠가 자신(프록시 서버)에게 있을 경우, 바로 클라이언트에게 컨텐츠를 제공하고
2) 요청하는 컨텐츠가 자신에게 없을 경우 오리지널 서버에게 컨텐츠를 요청하고 이를 프록시 서버에 저장한 후 클라이언트에게 제공하는 형태로 동작한다.
웹 캐시는 위의 그림과 같이 클라이언트와 서버 사이의 nodal delay는 길지만, 클라이언트와 웹 캐시를 담당하는 프록시 서버 사이의 delay는 짧을 경우 유용하게 쓰일 수 있다.
착각할 수 있는 부분이 있는데, 클라이언트가 컨텐츠를 요청할 때 request message를 프록시 서버에게 요청하는 것이 아니라 오리지널 서버에게 request 한다. 이 과정에서 브라우저가 자동으로 프록시 서버에게 request 하는 것이지, 처음부터 프록시 서버에게 request 하는 것은 아니다. 또한 대부분의 프록시 서버는 KT, SKT와 같은 ISP가 제공해준다.
그런데, 웹 캐시를 사용할 때 한가지 생각해볼 문제가 있다. "과연 프록시 서버가 제공하는 컨텐츠는 최신 컨텐츠일까?" 라는 물음이다.
만약 오리지널 서버에서 컨텐츠를 계속해서 업데이트 하고 있지만, 프록시 서버는 오래된 컨텐츠를 제공한다면 문제가 생길 것이다.
그래서 생겨난 개념이 바로 conditional GET 이다. 프록시 서버가 클라이언트에게 컨텐츠를 제공하기 전에, 오리지널 서버에게 자신이 저장하고 있는 컨텐츠가 최신 컨텐츠인지 확인하는 "If-modified-since <date>" 메시지를 보낸다.
1) 만약 프록시 서버에 제장된 컨텐츠가 최신 컨텐츠일 경우, 오리지널 서버는 프록시 서버에게 status code 304 (Not Modified) 를 보낸다. 프록시 서버는 안심하고 클라이언트에게 컨텐츠를 제공할 수 있다.
2) 만약 최신 컨텐츠가 아닐 경우, 오리지널 서버는 status code 202 (OK) 를 보내고 업데이트된 컨텐츠를 전송한다. 프록시서버는 받은 컨텐츠를 자신의 서버에 업데이트하고 클라이언트에게 업데이트된 컨텐츠를 제공할 수 있다.
배운 내용을 정리해보면,
1. 쿠키는 문자와 숫자 조합의 작은 파일로, 웹 서버가 클라이언트를 식별하여 서비스를 제공하는데 사용한다.
2. 웹 캐시는 클라이언트에게 더 빠르게 컨텐츠를 제공하기 위해서 사용한다.
위 내용은 공부하며 정리한 것으로 오류가 있을 수 있습니다.
'컴퓨터 네트워크' 카테고리의 다른 글
P2P의 개념 (0) | 2021.01.27 |
---|---|
DNS의 개념 (0) | 2021.01.26 |
HTTP의 개념 (application layer) (0) | 2021.01.21 |
Application Layer 개요 (0) | 2021.01.19 |
패킷의 지연과 손실 (Packet delay, loss, throughput) (0) | 2021.01.15 |