일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 삼성소프트웨어멤버십
- NarwalFreo
- 가상화
- SSM
- 인공지능
- 빅데이터
- Python
- 동아리
- 삼성전자 소프트웨어멤버십 SSM
- 갤럭시탭S8울트라
- hopfield network
- 물걸레자동세척로봇청소기
- BAM
- 신경회로망
- 증강현실
- 패턴 인식
- 고려대학교
- 파이썬
- 물걸레로봇청소기추천
- 멤버십
- 하이퍼바이저
- 나르왈프레오
- 구글 앱 엔진
- Neural Network
- 신경망
- Google App Engine
- Friendship
- Bidirectional Associative Memory
- 삼성
- 패턴인식
- Today
- Total
정보공간_1
[2기 부산 최은진] cookie in HTTP 본문
많은 사람들이 인터넷을 이용해 자신이 원하는 정보를 검색합니다. 인터넷은 주로 Internet Explorer 혹은 Google Chrome과 같은 웹 브라우저들을 사용하여 하게 됩니다. 웹 브라우저들은 각종 웹 서버와 통신하여 웹 페이지를 받아와 사용자에게 보여줍니다. 이렇게 웹 브라우저를 이용해 원하는 웹사이트에 들어와 로그인해서 글을 남기거나 각종 작업들을 할 수 있습니다.
이런 웹 브라우저들의 설정 화면을 보면 쿠키라는 항목을 볼 수 있습니다. 웹 브라우저와 인터넷 그리고 쿠키는 어떤 관계가 있을까요? 이번 글에서는 인터넷을 하는 데 사용되는 HTTP라는 프로토콜에 대해 간략하게 설명한 뒤 이 프로토콜에서 사용하는 쿠키(cookie)에 대해 알아보도록 하겠습니다.
아래 그림과 같은 각종 웹 페이지들을 주고받기 위해서 웹 서버와 브라우저는 HTTP(Hyper Text Transfer Protocol)라는 프로토콜을 이용해서 서로 통신을 합니다.
HTTP는 Hyper 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=VALUE가 name-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 쿠키에 대해 알아보았습니다.
참고 문헌
컴퓨터 네트워킹 –하향식 접근-, James F. Kurose, Keith W. Ross
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 부산 노형식] Web SQL을 이용한 클라이언트 지향 Web프로그래밍 (0) | 2012.11.22 |
---|---|
[2기 부산 배보람] develop visually oriented applications by Processing (0) | 2012.11.21 |
[2기 광주 박정태]Arduino 의 모든것#3 (0) | 2012.11.19 |
[2기 강남 이광수] Micom Programming 의 세계 (3부) (0) | 2012.11.19 |
[2기 광주 조영진] Template과 Generic (2) | 2012.11.18 |