오늘은 웹 서비스에서 사용되는 중요한 개념인 쿠키와 세션에 대해서 정리하려고 한다.
먼저 본격적으로 두 개념에 대해 알아보기 전에 쿠키와 세션이 왜 필요한지부터 알아보도록 하자.
이 둘의 필요성을 이해하려면 먼저 HTTP 통신의 특징부터 알아야한다.
HTTP 프로토콜의 특징
-
Connectionless : 클라이언트가 요청을 한 후에 응답을 받으면 해당 커넥션을 끊어버린다. Header에 keep-alive라는 값을 주어 커넥션을 재활용 할 수 있으며 HTTP1.1에서는 디폴트 값으로 되어있다.
-
Stateless : 통신이 끝나면 상태를 유지하지 않고 없애버린다. 예를 들어 쿠키와 세션이 없다고 가정하면, 웹 사이트에서 로그인을 하더라도 페이지를 옮길 때마다 다시 재로그인을 해줘야한다.
위와 같은 HTTP의 두 가지 특징 때문에 필요한게 쿠키와 세션이다. 쿠키와 세션을 사용하게 되면 한 번 로그인한 다음에도 특정 작업에 따라 그 사용자에 대한 인증을 유지하게 된다.
이제 쿠키와 세션에 대해서 알아보자.
Cookie
Cookie란?
- 쿠키는 클라이언트의 로컬에 저장되는 key-value 형태의 데이터 파일이다.
- 사용자 인증의 유효 시간을 명시 할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 사용한다.
- 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 자체적으로 요청 할 때, Request Header에 넣어서 자동으로 서버로 전송한다.
- 쿠키는 브라우저마다 저장되는 쿠키가 다르기 때문에 크롬에서 저장한 쿠키를 익스플로어에서 사용할 수 없다.
Cookie의 구성 요소
- 이름 : 각각의 쿠키를 구별하는데 사용되는 이름
- 값 : 쿠키의 이름과 매칭되는 값
- 유효 시간 : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 경로
Cookie의 사용 목적
- 세션 관리 : 로그인, 사용자 닉네임, 접속 시간, 장바구니 물품 등 서버가 알아야하는 정보들을 저장.
- 개인화 : 사용자마다 다르게 해당 사용자에게 적절한 페이지를 보여줌.
- 트래킹 : 사용자의 행동과 패턴을 기록하고 분석함.
Cookie의 단점
- 방문 웹사이트에 대한 정보 및 개인정보가 기록되어 사생활을 침해할 소지가 있고 이 때문에 웹 브라우저에 쿠키 거부 기능이 있으나 쿠키가 거부되면 웹 브라우저의 연결을 지속시키는 기능을 수행 불가함.
- 서버가 가지고 있는 것이 아니라 사용자 로컬에 저장되기 때문에 임의로 고치거나 지울 수 있고 가로채기가 쉬워 보안에 취약함.
Session
Session이란?
- 쿠키에 기반하지만 사용자의 정보를 사용자 로컬이 아닌 서버 측에 저장하여 관리한다.
- 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 인증상태를 유지한다.
- 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게끔 설정이 가능하다.
- 서버 측에서 관리하기 때문에 쿠키보다 보안 측면에서 뛰어나지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
세션의 단점
- 사용자가 많아질수록 메모리를 많이 차지해 성능이 저하될 수 있음.
차이점 간단 요약
- 쿠키는 사용자 로컬에 저장되고 세션은 서버에 저장이 된다.
- 쿠키는 사용자의 메모리를 사용하고 세션은 서버의 리소스를 차지한다.
- 쿠키는 사용자 모르게 저장될 수 있기 때문에 쿠키로 발생되는 문제를 막고자 한 도메인당 20개, 하나의 쿠키당 4kb로 제한되어 있고 세션은 제한이 없다.
- 쿠키는 만료 시간을 정의해서 삭제되는 시간을 지정 할 수 있고 세션은 클라이언트가 로그아웃하거나 설정한 시간동안 반응이 없을 경우 무효화 되기 때문에 정확한 시점을 알 수 없다.
쿠키는 사용자 로컬에 저장되기 때문에 주로 사용자의 편의를 위한 자동완성 같은 데이터, 즉 지워져도 되고 조작되거나 가로채여도 큰 지장이 없는 수준의 데이터를 저장하는게 좋다. 반대로 세션에는 노출되어서는 안되는 중요한 정보들을 저장하는 것이 좋다.
참고자료