Django 프로젝트 예제를 풀면서 쿠키와 세션에 대한 개념이 나왔다.
프로젝트 내용을 블로그에 올리기 전, 쿠키와 세션에 대한 개념 정리부터 하고자 한다.
쿠키와 세션을 이해하기 위해서는 우선 HTTP의 특성을 알고 가는 게 도움이 된다.
1. HTTP
HTTP(Hyptertext Transfer Protocol)는 인터넷 상에서 데이터를 주고 받기 위해 사용되는 프로토콜(규약)이다.
사용자가 웹 서버에 요청(Request)를 보내고,
서버가 사용자에게 응답(Response)를 보내는 형태로 작동한다.
HTTP는 기본적으로 아래의 2가지 특징을 가진다.
- 비연결성(Connectionless)
- 비상태성(Stateless)
서버의 자원을 절약하기 위해 연결 상태가 유지 되지 않고
상태를 저장하지 않기 때문에 사용자와 서버 간의 각 요청을 독립적으로 처리된다.
즉, 사용자를 식별하지 못하기 때문에 매번 같은 요청을 하더라도
매번 새로운 사용자로 인식하는 단점이 있다.
이런 불편한 점을 보완하는 게 바로 쿠키와 세션!
2. 쿠키(Cookie)
웹서핑을 하다보면 한 번쯤 '쿠키'에 대해 들어보았을 것이다.
쿠키는 쉽게 말해서 특정 웹에서 사용자가 지속해서 가지는 정보이다.
이는 사용자의 컴퓨터에 작은 파일로 저장되는데 이 때문에
우리가 사용하는 웹사이트에 로그인을 할 때 로그인 정보가 쿠키로 저장,
이후 브라우저가 종료되어도 또 다시 로그인할 필요 없이 로그인이 가능하다.
로그인 상태 유지하는 것 외에도
- 일주일간 다시 보지 않기,
- 최근 검색한 상품들을 광고에서 추천,
- 쇼핑몰 장바구니 등
다른 페이지로 이동해도 사용자가 남긴 정보를 유지할 수 있다.
하지만!
이전에 방문한 웹사이트에 대한 정보가 기록되기 때문에 '사생활 침해' 문제가 있고
웹 사용자가 쿠키를 허용 또는 거부할 수 있기 때문에
거부로 설정되어 있으면 쿠키의 본래 목적인 특정 웹의 정보가 저장되지 않게 된다.
이러한 단점을 보완해주는 것이 세션이다.
2. 세션(Session)
쿠키와 달리 세션은 사용자 정보 파일을 사용자 측이 아닌,
서버 측에서 관리하기 때문에 쿠키보다 상대적으로 보안성이 높은 편이다.
사용자가 웹브라우저를 종료하기 전까지 인증상태를 유지하는 것이 일반적이고
접속 시간에 제한을 두어 일정 시간 응답이 없으면 세션이 유지되지 않게 할 수 있다.
따라서 로그인 정보처럼 보안상 중요한 정보는 세션을 주로 이용한다.
쿠키와 세션 한눈에 비교하기
쿠키 | 세션 | |
저장 위치 | 사용자 | 서버 |
저장 형식 | text | object |
리소스 | 사용자의 리소스 | 서버의 리소스 |
용량제한 | 도메인당 20개, 1쿠키 당 4KB | 제한 없음 |
만료시점 | 쿠키 저장 시 설정(설정 없을 시에는 브라우저 종료시 만료) | 알 수 없음. |
저장 정보 | 지워지거나 조작되어도 큰 지장이 없는 수준의 정보 저장 | 타인에게 노출되면 안되는 중요한 정보 저장 |