정보공간_1

[2기 부산 최은진] cookie in HTTP 본문

IT 놀이터/Elite Member Tech & Talk

[2기 부산 최은진] cookie in HTTP

알 수 없는 사용자 2012. 11. 20. 06:43

많은 사람들이 인터넷을 이용해 자신이 원하는 정보를 검색합니다. 인터넷은 주로 Internet Explorer 혹은 Google Chrome과 같은 웹 브라우저들을 사용하여 하게 됩니다. 웹 브라우저들은 각종 웹 서버와 통신하여 웹 페이지를 받아와 사용자에게 보여줍니다. 이렇게 웹 브라우저를 이용해 원하는 웹사이트에 들어와 로그인해서 글을 남기거나 각종 작업들을 할 수 있습니다.



이런 웹 브라우저들의 설정 화면을 보면 쿠키라는 항목을 볼 수 있습니다. 웹 브라우저와 인터넷 그리고 쿠키는 어떤 관계가 있을까요? 이번 글에서는 인터넷을 하는 데 사용되는 HTTP라는 프로토콜에 대해 간략하게 설명한 뒤 이 프로토콜에서 사용하는 쿠키(cookie)에 대해 알아보도록 하겠습니다.

아래 그림과 같은 각종 웹 페이지들을 주고받기 위해서 웹 서버와 브라우저는 HTTP(Hyper Text Transfer Protocol)라는 프로토콜을 이용해서 서로 통신을 합니다.



HTTPHyper Text Transfer Protocol의 약자로 클라이언트와 웹 서버가 통신하기 위한 규약을 정의한 프로토콜입니다. 각종 이미지와 텍스트들로 구성되어 있는 웹 페이지와 이런 웹 페이지들을 보유하고 있는 웹 서버, 해당 웹 서버에 있는 웹 페이지를 요청하는 웹 브라우저와 같은 클라이언트가 있으며 HTTP를 이용해 클라이언트와 웹 서버가 웹 페이지를 요청 및 전송하게 됩니다.



HTTP의 특징 중 하나는 비상태 프로토콜(stateless protocol) 입니다. HTTP 프로토콜을 사용하는 웹 서버는 클라이언트에 대한 어떠한 정보도 유지하지 않습니다. 이 때문에 웹 페이지의 로그인 기능과 같은 클라이언트의 상태를 유지하는 기능들을 구현하기 위해서 쿠키(cookie)를 이용해야 합니다.



쿠키(cookie)HTTP에서 클라이언트의 상태를 저장하기 위해 사용하는 작은 데이터 파일입니다. 이 데이터 파일은 클라이언트 측에 저장되며 웹 서버는 이 쿠키를 확인하여 웹 서버에 접속하는 사용자를 구분할 수 있습니다. 쿠키는 HTTP 요청, 응답 메시지 내에 포함되어서 전송됩니다. 이렇게 쿠키를 이용하여 클라이언트의 상태를 확인하는 방법은 넷스케이프 개발자였던 Lou Montulli라는 사람이 제안하였습니다. 이런 쿠키의 종류에는 다음과 같은 것이 있습니다.

  • Session cookie

웹 사이트를 탐색하는 동안에 클라이언트 상의 메모리에만 존재하는 쿠키이다. 유효 기간이 설정되어 있지 않으며 웹 브라우저가 종료되거나 탭이 닫힐 때 쿠키는 삭제된다.

 

  • Persistent cookie

쿠키는 클라이언트에 파일로 저장된다. 쿠키에 유효 기간이 설정되어 있으며 웹 사이트가 해당 클라이언트에 대한 정보를 추적하거나 기록할 수 있도록 한다.

 

  • Secure cookie

secure 속성이 사용되는 쿠키이며 HTTPS를 통해 암호화 되어 서버로 전송된다.

 

  • HttpOnly cookie

HttpOnly 속성이 사용되는 쿠키이며 해당 쿠키는 HTTP혹은 HTTPS를 통한 요청을 전송할 때만 사용된다.

 

  • Third-party cookie

웹 브라우저의 주소 표시 줄에 입력된 도메인 이외의 도메인에서 만들어진 쿠키이다. 주로 웹 페이지 내의 광고를 통해 생성된다.


이런 쿠키들은 크게 두 가지로 나눌 수 있습니다. 클라이언트의 하드디스크에 파일로 저장되는 Persistent cookie와 메모리에 저장되어 있는 Session cookie입니다. Persistent cookie는 클라이언트의 이전 상태를 저장하는 데 사용됩니다. 예를 들면 광고 창의 다시 보지 않기 기능들은 Persistent cookie에 저장된 값을 확인하여 동작하게 됩니다. Session cookie는 사용자의 인증 상태를 저장하기 위해 주로 사용됩니다. 웹 사이트의 로그인 기능은 Session cookie를 통해 이루어집니다.

쿠키의 내용은 이름=; 형태의 문자열들로 이루어져 있습니다. 쿠키의 일반적인 형태는 다음과 같습니다.



쿠키는 항상 name-value-pair로 시작되며 뒤에 attribute-value-pair들이 0개 이상 붙게 됩니다. 위 그림에서 앞의 NAME=VALUEname-value-pair이며 그 뒤의 Domain, Path, Expires들은 attribute-value-pair에 해당됩니다. name-value-pair는 해당 쿠키에 저장될 내용과 그 이름을 입력하는 부분입니다. 위 그림에서 보이는 각각의 attribute에 대해서 설명하겠습니다.

NAME=VALUE

쿠키에 저장된 내용과 그 이름을 나타낸다. 이 항목은 쿠키에 반드시 포함되어야 하는 부분이다.

 

Domain=DOMAIN_NAME

해당 쿠키가 유효한 서버의 도메인을 나타낸다. 해당 도메인 이름의 서버 이외에는 이 쿠키를 참조할 수 없다. 여러 도메인에서 이 쿠키를 참조하기 위해서 위 그림에서와 같이 ‘.’으로 시작하는 도메인 이름을 지정할 수 있다.

 

Path=PATH

해당 쿠키가 유효한 서버의 경로를 나타낸다. 이 경로의 하위 경로는 모두 이 쿠키를 참조할 수 있다. 위 그림과 같이 /를 경로로 설정하면 해당 도메인의 모든 경로에서 이 쿠키를 참조할 수 있게 된다.

 

Expires=DATE

해당 쿠키가 유효한 기간을 나타낸다. 이 기간이 지나게 되면 쿠키는 클라이언트에 의해 삭제될 수 있다.

 

Secure

이 속성이 사용되는 쿠키는 HTTPS를 통해 암호화 되어 서버로 전송된다.

 

HttpOnly

이 속성이 사용되는 쿠키는 HTTP혹은 HTTPS를 통한 요청을 전송할 때만 사용된다.

이러한 값들이 적용된 쿠키를 이용하여 웹 서버는 클라이언트 인증을 하기 위해 사용되는 세션 아이디를 쿠키를 통해 보내기도 하고, 웹 사이트에 로그인하기 위한 아이디를 저장해놓기 위해 사용하기도 합니다. 또한 웹 사이트를 사용자에 따라 바꾸기 위한 환경설정을 저장하기 위해서도 사용합니다. 사용자의 인터넷 사용을 추적하기 위해서 사용하기도 합니다.

 

이런 쿠키들이 무분별하게 사용자의 하드디스크에 저장되지 않도록 하기 위한 3가지의 제한사항이 존재합니다.

  • 쿠키는 크기가 4096 byte를 넘으면 안 됩니다.

  • 한 도메인 당 최대 50개의 쿠키가 생성될 수 있습니다.

  • 최대 3000개의 쿠키가 생성될 수 있습니다.

 

이제 Apache Tomcat 웹 서버에서 session을 이용하여 로그인 기능을 구현한 뒤 작성한 어플리케이션으로 HTTP를 이용하여 해당 서버에 로그인을 하는 과정을 통해 쿠키가 어떤 식으로 적용되었는지 알아보도록 하겠습니다. Wireshark를 이용해 해당 패킷을 확인했습니다.


1. 사용자는 웹 사이트에 접속한 뒤 로그인하기 위하여 아이디와 비밀번호를 폼에 입력한 뒤 로그인 버튼을 누를 것입니다. 웹 브라우저는 해당 웹 서버로 HTTP 프로토콜을 통해 아이디와 비밀번호를 포함한 요청 메시지를 보내게 됩니다.


2. 해당 HTTP 요청 메시지를 받은 웹 서버는 사용자 식별을 위한 새로운 세션 아이디를 하나 생성한 뒤 요청 메시지에 포함된 아이디와 비밀번호를 확인하고 일치한다면 해당 세션 아이디를 로그인 한 사용자의 세션 아이디로 설정합니다. 그리고 HTTP 응답 메시지에 Set-Cookie 필드를 통해 클라이언트에 세션 아이디와 각종 속성을 설정해 보내게 됩니다.

그림에서 보이는 쿠키는 Session cookie, 웹 브라우저를 종료하기 전이나 서버에서 적용된 세션 시간 이내에만 유효하게 됩니다.


3. 클라이언트는 수신된 HTTP 응답 메시지 필드 안에서 Set-Cookie 필드를 찾아 서버에 설정된 자신의 세션 아이디를 알 수 있게 됩니다. 이제부터 서버에게 자신이 이전에 로그인 했다는 것을 알리기 위해 HTTP 요청 메시지마다 Cookie 필드를 포함시켜 보내게 됩니다. 해당 필드에는 이전 응답 메시지의 Set-Cookie 필드에 설정되었던 값을 입력합니다.


4. 이제 서버에서 Cookie 필드에 포함된 세션 아이디가 만료되기 전까지 해당 쿠키를 보내는 클라이언트를 이전에 로그인 한 유저로 판단하게 됩니다.




헨젤과 그레텔이라는 동화에서 두 남매가 숲 속에서 길을 잃지 않도록 과자를 길에 흘려 지나온 길을 알 수 있도록 한 것처럼 HTTP의 쿠키도 이와 같이 프로토콜 상에서 클라이언트의 각종 상태를 웹 서버가 알 수 있도록 정보를 저장하는 역할을 합니다. 이상으로 HTTP 쿠키에 대해 알아보았습니다.




참고 문헌