Server 03 - 쿠키와 세션


쿠키와 세션의 존재 이유

HTTP 프로토콜의 가장 큰 특징은 비연결성무상태이다. 요청하는 순간 연결했다가 응답 완료되면 연결을 끊는 것이고, 웹 서버와 클라이언트 상태 정보를 유지하지 않는 것이 가장 큰 특징이다.
그런데 HTTP 프로토콜 상에서 뭔가 특별한 기능을 수행하려 할 땐 위 두가지 특성은 방해가 된다. 예를 들어 로그인하여 나의 메일을 보는 과정에서 나의 정보가 비연결성과 무상태 특징에 의하여 알 수가 없을 텐데, 어떻게 나의 정보가 유지되어 내 메일을 볼 수 있을까?
이 것의 대한 해답은 이데 설명할 2가지 개념으로 답할 수 있다. 바로 쿠키세션이다.

쿠키

과자와 같은 이름을 지닌 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어 있는 작은 데이터 파일이다. 특정 웹 페이지를 방문하였을 때 클라이언트에 자그맣게 저장하였다가, 다시 재방문을 하였을 때 저장된 쿠키를 재사용하게 된다.

구성은 이름, 값, 만료일(저장 기간), 경로로 되어 있고 동작 순서는 다음과 같다.

  1. 클라이언트가 페이지를 요청 (사용자가 웹사이트에 접근)
  2. 웹 서버에서 쿠키를 생성
  3. 생성한 쿠키를 HTTP 헤더에 포함 시켜 클라이언트에게 응답
  4. 클라이언트가 쿠키를 가지고 있다가 다시 서버에 요청할 때 쿠키를 함께 전송
  5. 동일한 웹사이트 재방문 시 클라이언트 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송

쿠키의 예시로는 다시 재방문시 입력했던 아이디와 비밀번호가 자동으로 입력되는 경우, 팝업 창을 통해 이 창 다시보지 않기 옵션을 체크하는 경우이다.

세션

세션은 사용자가 웹 사이트를 방문하는 동안 일정 시간 동안 서버에 사용자 정보를 유지하는 방법 및 기술이다. 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시킨다.

여기서 일정 시간이란, 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다. 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

세션의 특징으론, 웹 서버에 상태를 유지하기 위한 세션 정보를 저장하고, 이 때 웹 서버의 저장되는 쿠키를 이용한다. 그리고 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되고서버 용량이 허용하는 한, 데이터 크기에 제한은 없다. 마지막으로 각 클라이언트 고유 Session ID를 부여하며 Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공할 수 있다.

세션의 동작방식은 다음과 같다.

  1. 클라이언트가 페이지를 요청 (사용자가 웹사이트에 접근)
  2. 서버는 클라이언트의 Request-Header Cookie를 확인하여, 클라이언트 Session ID 를 확인
  3. Session ID 존재하지 않을 겨우, Session ID를 생성하여 클라이언트에게 응답
  4. Session ID를 쿠키를 사용해 서버에 저장
  5. 클라이언트 재접속 시, 쿠키를 이용하여 Session ID 값을 서버에 전달

세션의 예시로는 로그인 이후 로그아웃 되기 전까지 로그인 된 채로 상태가 유지되는 것이다.

쿠키와 세션의 차이점

쿠키와 세션은 http의 비연결성과 무상태 특징에서 다룰 수 없는 상태 유지 기술이다. 그렇다면 위 두가지 기술의 차이점은 무엇일까?

  • 저장위치
    • 쿠키: 클라이언트
    • 세션: 웹 서버
  • 만료시점
    • 쿠키: 브라우저 내 저장시 지정됨, 브라우저가 종료되도 유지 가능
    • 세션: 브라우저 종료시 삭제
  • 속도:
    • 쿠키 > 세션
    • 세션은 서버에 저장되기 때문에 서버 처리 시간이 붙어서 쿠키보단 느린 처리 속도를 가지게 된다.
  • 보안:
    • 쿠키 < 세션
    • 쿠키는 클라이언트에 저장되기 때문에 타인에 의해 접근이 용이하기 때문에 세션보다 보안적이지는 않다.