지난 포스팅에서 HTTP 프로토콜에 대해서 알아보았다.
쿠키와 세션은 HTTP 프로토콜의 특성을 보완하기 위해서 사용한다.
그렇다면 HTTP 프로토콜의 특성이 무엇인지 알아보자.
HTTP 특성 | 서명 |
---|---|
Connectionless (비연결지향) | 클라이언트가 요청을 한 후 서버가 응답을 보내면 그 연결을 끊어 버린다. |
stateless (무상태성) | 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는다. |
- HTTP의 2가지 특성인 Connectionless 과 stateless 로 인해 서버는 클라이언트의 상태를 알 수 없다는 문제가 있다.
- 예를들어 클라이언트의 상태를 서버가 알지 못한다면 페이지를 이동할 때마다 로그인을 다시 해야 할 것이다.
- 따라서 클라이언트의 상태를 알기 위해 ( ex.인증 ) 쿠키와 세션을 사용한다.
사용자가 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 클라이언트(브라우저)에 저장하는 작은 데이터 파일을 말한다.
쿠키는 사용자 인증이 유효한 만료일(저장 기간) 설정할 수 있으며, 만료일이 되기 전에 브라우저를 종료해도 인증이 유지된다는 특징이 있다.
저장된 쿠키는 클라이언트 로컬 PC(하드 드라이브에 텍스트 파일)에 저장되며, 각각의 쿠키는 이름, 값, 만료 날짜/시간, 도메인 등의 속성을 가진다.
클라이언트가 페이지를 요청(사용자가 웹사이트에 접근) 하면 웹 서버에서 쿠키를 생성한다.
클라이언트가 요청을 보낼 때, 웹 서버는 HTTP 헤더에 쿠키를 포함시켜 응답한다.
넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송한다.
이전 상태 정보를 변경할 필요가 있을 때 웹 서버는 HTTP 헤더에 "Set-Cookie"를 포함시켜 클라이언트에게 전송하고, 클라이언트는 이를 수신하여 변경한 쿠키를 서버로 전송한다.
사용자가 로그인 정보를 기억하도록 하거나, 사용자가 웹 사이트의 설정을 유지하도록 할 때 사용
클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지하는 것을 말한다.
사용자가 웹 사이트에 로그인하고 상태를 유지하는 동안 세션을 사용 가능
먼저 표를 통해 쿠키와 세션의 차이점을 살펴보자 (아래 표: 쿠키(Cookie), 세션(Session) 특징 및 차이)
쿠키 | 세션 | |
---|---|---|
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되도, 만료시점이 지나지 않으면 자동삭제되지 않음) | 브라우저 종료시 삭제 (기간 지정 가능) |
사용하는 지원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개, 하나의 도메인 당 20개, 하나의 쿠키 당 4KB(=4096byte) | 서버가 허용하는 한 용량제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
쿠키와 세션의 가장 큰차이점은 상태 정보의 저장 위치이다.
왜 쿠키를 주로 사용할까?