쿠키와 세션의 개념 이해하기

웹에서는 서버와 클라이언트가 HTTP 프로토콜을 바탕으로 통신하는데 HTTP 프로토콜의 특징 때문에 사용자의 인증서를 쿠키, 세션으로 대체를 하게 된다.

왜 쿠키와 세션으로 대체하는지 알기 전에 HTTP 프로토콜의 특징을 알아보자.

  • HTTP 프로토콜의 특징

    • 비연결 지향
      • 클라이언트가 요청을 서버에 보내고, 서버가 클라이언트에게 응답을 보내는 게 하나의 단위로 응답을 보내면 서로 연결을 끊는다.
    • 상태정보의 유지 안함
      • 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
  • 위와 같은 특징 떄문에 HTTP 요청 간의 의존관계가 없다.

    • 따라서, 현재 접속한 사용자가 이전에 접속했던 사용자와 같은 사용자인지 아닌지 알 수 있는 방법이 없다.
    • 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해서는 상태를 유지해야 한다.

이러한 상태를 유지하기 위한 기술로 쿠키와 세션이 있다


쿠키

  • 개념
    • 서버가 클라이언트에게 부여하는 키와 값이 들어있는 파일이다.
    • 클라이언트 로컬에 저장이 된다.
    • 클라이언트의 상태 정보를 브라우저에 저장하여 참조한다.
  • 쿠키의 구성 요소
    • 쿠키 이름
    • 쿠키 값
    • 쿠키의 만료 시간
    • 쿠키를 전송할 도메인 이름
    • 쿠키를 전송할 경로
    • 보안 연결 여부
    • HttpOnly 여부
  • 동작 방식
    1. 웹 브라우저가 서버에 요청을 한다.
    2. 서버는 적절한 정보를 쿠키로 생성을 한다.
    3. 서버가 응답할 때 HTTP 헤더에 쿠키를 포함해서 전송한다.
    4. 전달받은 쿠키는 클라이언트측 웹 브라우저에서 관리하고 있다가, 다음 요청 때 쿠키를 HTTP헤더에 넣어서 전송한다.
    5. 서버에서는 쿠키 정보를 읽어 요청에 응답한다.

쿠키 동작 예시

cookie


세션

  • 개념

    • 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 서버가 유지하는 기술이다.
    • 즉 웹 브라우저를 통해 서버에 접속한 이후부터 종료할 때까지 유지된다.
  • 동작 방식

    1. 웹 브라우저가 서버에 요청을 한다.
    2. 서버가 해당 웹 브라우저에게 유일한 Session ID를 부여한다.
    3. 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 Session ID를 포함해서 전송한다
    4. 웹 브라우저는 이후 웹 브라우저를 닫기전까지 요청할 때마다 Session ID가 담겨있는 쿠키를 HTTP헤더에 넣어서 서버에 전송한다.
    5. 서버는 Session ID를 확인하고 요청에 응답한다.

여기서 결국 세션도 쿠키를 사용하여 값을 주고받으며 클라이언트의 상태 정보를 유지한다. 다만 유지하는 주체가 클라이언트냐 서버냐의 차이가 있다.

세션 동작 예시

session


쿠키와 세션의 차이점

  • 저장 위치
    • 쿠키 : 클라이언트
    • 세션 : 서버
  • 보안
    • 쿠키 : 클라이언트에 저장되므로 보안에 취약하다.
    • 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
  • 지속성
    • 쿠키 : 만료시간에 따라 브라우저를 종료해도 다음에 접속할 때 계속 남아있을 수 있다.
    • 세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
  • 속도
    • 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
    • 세션 : 실제 저장된 정보가 서버에 있으므로 서버를 거쳐가는 처리가 필요해 상대적으로 쿠키보다 느리다.