쿠키와 세션을 사용하는 이유
HTTP 프로토콜에는 비연결성(Connectionless)과 비상태성(Stateless)이라는 특징이 있다. 이는 서버의 리소스를 절약하기 위함으로 모든 사용자의 요청마다 연결과 해제의 과정을 거치기 때문에 연결 상태가 유지되지 않고, 연결 해제 후에 상태 정보가 저장되지 않는다.
하지만 매번 요청을 할 때마다 새로운 유저로 인식되기 때문에 여러가지 불편한 점들이 발생할 수 있는데 이러한 점을 보완하기 위한 방법으로 쿠키와 세션이 등장하였다.
쿠키(Cookie)
쿠키 개념
- 쿠키는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
쿠키 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있다.
- 클라이언트에 총 300개의 쿠키를 저장할 수 있다.
- 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
- 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다.
쿠키 동작방식
- 클라이언트가 서버에 요청한다.
- 서버는 쿠키를 생성한다.
- 생성한 쿠키에 정보를 담아 HTTP 헤더에 포함시켜 클라이언트에게 돌려준다.
- 클라이언트는 받은 쿠키를 저장하고 서버에 재요청할 때 쿠키를 같이 전송한다.
- 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청과 함께 쿠키를 전송한다.
쿠키 예시
- 방문했던 사이트에 ID를 자동입력 해준다.
- 팝업창 상태를 저장한다.
쿠키 단점
-
방문했던 웹 사이트에 대한 정보 및 개인정보가 기록되기 때문에 사생활을 침해할 소지가 있으며, 이를 해소하기 위해서 웹 브라우저 자체에 쿠키 거부 기능이 있다. 이러한 쿠키에 대한 거부가 웹 브라우저에 설정되어 있으면, 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없는 경우가 발생한다.
-
서버가 가지고 있는 것이 아니라 사용자에게 저장되기 때문에, 임의로 고치거나 지울 수 있고, 가로채기도 쉬워 보안이 취약하다. 따라서 쿠키에는 민감하거나 중요한 정보를 담는 것은 위험하다.
세션
세션 개념
일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다. 여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다.
즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
세션 특징
- 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.
- 저장 데이터에 제한이 없다.
- 각 클라이언트에게 고유 ID를 부여한다.
세션 동작방식
- 클라이언트가 서버에 요청한다.
- 서버는 세션 ID를 만들어 저장소에 저장하고, 클라이언트에 세션 ID만 쿠키에 담아 전달한다.
- 클라이언트는 받은 쿠키를 저장하고 서버에 재요청할 때 쿠키를 같이 전송한다.
셰션 예시
- 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지한다.
쿠키와 세션의 차이점
- 쿠키는 로컬에 저장을 하고 세션은 서버에 저장이 된다.
- 쿠키는 탈취와 변조가 가능하지만, 세션은 ID값만 가지고 있고 서버에 저장이 되어있기 때문에 상대적으로 안전하다.
- 쿠키는 브라우저를 종료해도 파일로 남아있지만, 세션은 브라우저 종료시 세션을 삭제한다.
- 쿠키는 파일에서 읽기 때문에 상대적으로 빠르고, 세션은 요청마다 서버에서 처리를 해야하기 때문에 비교적 느리다.
참고 문서 및 링크