쿠키와 세션

쿠키와 세션에 대해 알기 위해서는 HTTP 프로토콜의 특성에 대해 알 필요가 있다. HTTP 프로토콜의 특성에 대해 가지는 결점을 보완하기 위해 나온 것이 쿠키와 세션이기 때문이다.

HTTP 프로토콜의 특징

  • Client-Server 구조
    • 각각의 서버와 클라이언트는 독립되어 있는 상태이다
    • 클라이언트는 서버에 요청을 보내고 응답이 올 때까지 대기하며, 서버는 클라이언트에서 받은 요청에 대한 결과를 만들어 응답을 한다(Request>Response)
  • Connectionless(비연결성)
    • 계속해서 연결을 유지한는 TCP/IP와는 달리 HTTP 프로토콜은 클라이언트에서 서버에 요청(Request)을 보내면 서버는 클라이언트에 응답(Response)을 하고 연결을 끊는 특징을 가지고 있다. 이를 통해 최소한의 자원으로 서버를 유지할 수 있도록 한다.
    • 하지만 트래픽이 많거나 큰 규모의 서비스를 운영할 경우, 비연결성은 한계를 보인다. HTTP 1.0이 각각의 자원을 다운로드 하기 위해 연결과 종료를 반복하는 등의 3 Way Handshake(연결 요청/응답 종료 과정에서 일어나는 시간 지연때문에 이를 해결하고자 HTTP1.1부터는 지속 연결(Persistant Connections)가 가능해졌다.
  • stateless(무상태성)
    • 서버는 클라이언트의 상태를 저장하지 않는다

이처럼 HTTP 프로토콜의 특성을 고려할 때, 비연결성과 무상태성의 특성을 유지하면서도 서버와 클라이언트가 통신을 하면서 로그인이나 장바구니 등등 계속해서 상태를 간직해야 하는 부분이 불가능하다. 따라서 이러한 약점을 보완하고자 나온 개념이 쿠키와 세션이다.

쿠키

HTTP의 일종으로 사용자가 어떤 웹 사이트를 방문할 경우, 해당 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다.
HTTP에서 클라이언트의 상태정보를 쿠키 형태로 클라이언트 PC에 저장하였다가 필요 시 정보를 참조하거나 재사용할 수 있다.

쿠키의 특징

  • Key-Value쌍으로 구성
  • 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부로 구성
  • 도메인 당 20개의 쿠키를 가질 수 있음
  • 하나의 쿠키는 4KB(= 4096 byte)까지 저장이 가능

작동 방식

  1. 클라이언트가 서버에 로그인 요청
  2. 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) 응답헤더에 set-cookie: 를 통해 쿠키를 추가하여 응답
  3. 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키를 자동으로 요청헤더에 추가하여 요청한다. 헤더에 쿠키값을 자동으로 추가하여 주는데 이는 브라우저에서 처리해줌

쿠키의 기한이 정해져있지 않고 명시적으로 지우지 않는다면 반 영구적으로 쿠키가 남아있음

쿠키의 사용목적

  1. 세션 관리(Session Management)
    • 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보들을 저장
  2. 개인화(Personalization)
    • 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다.
  3. 트래킹(Tracking)
    • 사용자의 행동과 패턴을 분석하고 기록

쿠키의 종류

쿠키 종류특징
Session Cookie일반적으로 만료시간(Expire Date)를 설정하고 메모리에만 저장되며, 브라우저 종료 시 쿠키를 삭제
Persistent Cookie장기간 유지되는 쿠키이다. 파일로 저장되어 브라우저 종료와 관계없이 사용할 수 있다.
Secure CookieHTTPS 프로토콜에서만 사용하며, 쿠키 정보가 암호화되어 전송된다.
Third-Party Cookie방문한 도메인과 다른 도메인의 쿠키이다. 일반적으로 광고 배너 등을 관리할 때 유입 경로를 추적하기 위해 사용한다.

이러한 쿠키의 경우 클라이언트에서 수정할 수 있기 때문에 위변조의 위험이 항상 존재한다. 이에 쿠키값을 암호화해야하며, 민감하거나 중요한 정보를 담지 않도록 해야 한다.

세션(Session)

일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.
여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다.
즉, 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술을 세션이라고 한다.

세션의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
  • 웹 서버에 저장되는 쿠키(세션 쿠키 / session cookie)이다.
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되기 때문에 쿠키보다 비교적 보안적으로 우수하다.
  • 저장 데이터에 제한이 없다.(서버 용량 허용 범위 내에서)
  • 각 클라이언트에 고유 세션 ID(Session ID)를 부여한다. 세션 ID를 통해 클라이언트를 구분하여 각 요구에 맞는 서비스를 제공한다.

세션의 작동 방식

  1. 클라이언트가 서버에 로그인 요청
  2. 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) unique한 id를 session ID로 생성하여 저장한다.
  3. 서버가 응답할 때 응답헤더에 세션 ID를 쿠키에 추가하여 응답합니다.
  4. 클라이언트는 이후 서버에 요청할 때 전달받은 세션 ID를 쿠키에 자동으로 요청 헤더에 추가하여 요청한다.
  5. 서버에서는 요청 헤더의 세션 ID 값을 저장된 세션저 장소에서 찾아보고 유효한지 확인 후 요청을 처리하고 응답한다.

세션의 사용목적

사용자나 다른 누군가에게 노출되면 안되는 보안적으로 중요한 정보들을 서버 안에서 다루기 위해 사용한다.

세션의 단점

세션의 내용은 서버에 저장되기 때문에 계속하여 늘어날 경우 서버에 부하가 발생할 수 있다.
또한 세션에 대한 정보가 서버에 있어 쿠키에 비해 비교적 속도가 느리다.

쿠키 vs 세션

쿠키세션
저장 위치ClientServer
저장 형식TextObject
만료 시점쿠키 저장 시 설정
(설정 없으면 브라우저 종료 시)
정확한 시점 모름
리소스클라이언트의 리소스서버의 리소스
용량 제한한 도메인 당 20개, 한 쿠키 당 4KB제한 없음
속도쿠키에 정보가 있어 비교적 빠름정보가 서버에 있어 비교적 느림

저장 위치

  • 쿠키: 클라이언트의 웹 브라우저가 지정하는 메모리 또는 하드디스크
  • 세션: 서버의 메모리에 저장

만료 시점

  • 쿠키: 저장할 때 expires 속성을 정의해 무효화시키면 삭제될 날짜 지정 가능
  • 세션: 클라이언트가 로그아웃하거나, 설정 시간동안 반응이 없으면 무효화되어 정확한 시점을 알 수 없음

리소스

  • 쿠키: 클라이언트에 저장되고, 클라이언트의 메모리를 사용하기 때문에 서버 자원을 사용하지 않음
  • 세션: 서버에 저장되고, 서버의 메모리로 로딩되기 때문에 세션이 생길 때마다 리소스를 차지함

용량 제한

  • 쿠키: 클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있기 때문에 쿠키로 인한 문제가 발생하는 것을 막기 위해 한 도메인 당 20개, 한개의 쿠키 당 4KB로 제한
  • 세션: 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량 제한 없음