본문 바로가기
공부/web

쿠키와 세션

by 밍미 2018. 7. 20.
쿠키와 세션

쿠키와 세션

웹 어플리케이션을 만들고 있는 사람이라면 누구나 세션과 쿠키를 접해봤을 것이다. 로그인할 때 세션에 로그인 정보를 저장하고, 자동로그인(로그인 상태 유지) 기능이라던지 팝업창 다시 보지 않기 등등의 기능은 쿠키를 사용하고.. 이 작업들의 차이는 무엇일까? 쿠키나 세션이나 뭔 정보 저장하는건 알겠는데 왜 로그인 할 때는 세션을 쓰고, 자동로그인할 때 쿠키를 쓸까? 반대로 쓰면 안되는 것일까? 궁금하다면 쿠키와 세션이 어떻게 다른지 알아보도록 하자.

 


 

COOKIE

 

쿠키란?

  • HTTP 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다.

  • 사용자의 컴퓨터(클라이언트)에 설치되는 작은 데이터 기록 파일

  • 클라이언트의 상태 정보를 하드 디스크에 임시 text 파일로 저장했다가 필요할 때 참조 및 재사용한다.

  • 이름, 값, 유효기한, 경로, 도메인 등으로 구성된다.

    • 이름(Name)

      • 쿠키 파일을 서로 구별하기 위해 사용
      • 콤마, 세미콜론, 공백, 등호를 제외한 아스키 문자로 구성되며, 보통 알파벳과 숫자로 이루어져있다.
    • 값(Value)

      • 쿠키의 이름에 대응하는 값
      • 콤마, 세미콜론, 공백을 제외한 아스키 문자로 구성
      • 값으로 사용할 수 있는 문자가 한정되어있다.
    • 유효기한(Expires)

      • 쿠키가 유지될 수 있는 기한
      • 별도로 기한을 지정하지 않으면 브라우저 종료시에 쿠키를 삭제한다.
    • 경로(Path)

      • 쿠키를 전송할 요청 경로
    • 도메인(Domain)

      • 쿠키를 전송할 도메인
      • 한 도메인에서 생성한 쿠키를 다른 도메인에서 사용할 수 없음
  • 일반적인 브라우저에서 하나의 쿠키에 최대 4MB의 데이터를 저장가능

  • 하나의 도메인 당 20개의 값만 가질 수 있으며 범위를 초과하면 가장 적게 참조된 쿠키부터 삭제된다.

  • 클라이언트에 최대 300개의 쿠키를 저장할 수 있으며 범위를 초과하면 오래된 쿠키부터 삭제된다.

 

쿠키의 동작 방식

  1. 쿠키 생성

    • 클라이언트에서 페이지를 요청하면 웹 서버에서 쿠키 생성
    • 서버에서 페이지 응답시 헤더에 쿠키를 저장해서 전송
  2. 쿠키 저장

    • 응답 데이터에 포함된 쿠키를 클라이언트에 저장
  3. 쿠키 전송

    • 클라이언트가 다음 요청을 할 때 저장한 쿠키를 함께 전송
    • 서버에서 쿠키 정보를 읽어와 이전 상태 정보를 확인
    • 상태정보를 변경해야 할 경우 쿠키를 업데이트해서 응답

 

쿠키의 단점

  • 매번 쿠키정보를 HTTP 헤더에 포함해서 보내야 한다.
  • 클라이언트 정보가 클라이언트의 하드디스크에 파일로 남겨지기 때문에 쿠키 파일의 유출 가능성이 있어 보안에 취약하다.

 


 

SESSION

 

세션이란?

  • 웹 서버에 접속한 후 사용자를 식별해 브라우저를 종료할 때까지 접속상태를 유지하는 기술
  • 클라이언트가 요청을 하면 서버에서 클라이언트에 Session ID를 부여하는데, 이 ID를 메모리 쿠키로 저장 (세션 종료시 삭제)
  • 접속 정보는 서버에 저장되며 세션 ID에 대응된다.

 

세션의 동작 방식

  1. 클라이언트가 서버에 접속을 시도
  1. 서버에서 요청 헤더의 쿠키를 확인해 세션 ID가 없으면 새로 발행한 후 응답
  1. 클라이언트가 재요청시 헤더에 세션 ID를 포함해서 요청
  1. 서버에서 세션 ID에 대응되는 세션을 찾아 클라이언트의 접속상태 정보를 유지하며 응답

 

세션의 단점

  • 데이터가 서버에 저장되므로 서버에 저장 공간이 부족한 시스템에서는 부적합

 


 

쿠키와 세션을 사용하는 이유

HTTP를 통해 데이터를 주고받을 때, 클라이언트가 서버에 데이터를 요청하면 서버는 그에 따른 응답을 보낸 후 접속을 끊는다. 이 때, 클라이언트와 서버의 통신은 끝나고 서버의 상태 정보는 유지하지 않는다. 만약 쿠키와 세션을 통해 데이터를 저장하지 않는다면, 우리는 페이지가 이동될 때마다 로그인을 새로 해주어야 할 것이다.

 

쿠키 vs 세션

  • 쿠키는 클라이언트에 파일로 저장되어 서버의 자원을 사용하지 않지만 세션은 서버에 저장된다.
  • 쿠키는 변질되거나 request 도중 도청되는 등 보안에 취약하지만 세션은 쿠키를 이용해 세션 ID만 저장하고 사용자 정보는 서버에 저장하기 때문에 쿠키보다 보안이 우수하다.
  • 쿠키는 지정한 유효기한만큼 정보가 유지되지만 세션은 지정한 기한과 상관없이 브라우저가 종료되면 삭제된다.
  • 쿠키는 클라이언트에 저장되어 응답 속도가 빠르지만 세션은 서버에 정보가 있기때문에 서버에서 처리를 해주어야 하므로 쿠키보다 느리다.

댓글