Cookie와 Session

wonyu·2022년 9월 20일
0

알고리즘 스터디 발표 자료

새롭게 알게 되거나 수정할 내용이 있을 경우 수월한 업데이트를 위해 블로그에 업로드합니다.

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

HTTP는 상태 비저장(stateless) 프로토콜이기 때문에 클라이언트의 상태를 기록하지 않는다. 따라서 웹 사이트를 다시 방문할 때 사용자를 식별할 방법이 없다.

반복되는 요청마다 새 응답을 보내게 되면 네트워크의 성능을 저하 시킬 수 있다. 그리고 HTTP 요청 간에 사용자의 데이터를 저장하여 사용자를 식별하고 요청들을 연결할 방법이 필요할 수 있다. 이렇게 클라이언트 상태가 필요할 경우 쿠키 또는 세션을 사용할 수 있다.


  • HTTP 쿠키, 온라인 쿠키, 인터넷 쿠키라고도 한다.

  • 서버가 사용자의 웹 브라우저에 전송하는 작은 텍스트 파일

    • 최대 4KB의 용량을 갖는 작은 양의 데이터 조각
  • 쿠키의 구성 요소로는 key, value, 유효 시간, 쿠키를 전송할 도메인과 경로 등이 있다.

  • 쿠키에 저장된 정보는 누구나 읽고 이해할 수 있는 텍스트 형식으로 클라이언트 측에 보관된다. 따라서 안전하다고 보기 어렵다.

  • 주로 세 가지 목적을 위해 사용한다.

    • 세션 관리
      • 장바구니 항목 기록 등
    • 웹 사이트 개인화
      • 라이트/다크 모드 설정, 사용자 입력 폼 기억 등
    • 브라우징 추적
      • 사용자가 방문한 페이지, 순서, 시간 등
  • 사용자가 웹사이트를 처음 방문하면,

    • 사이트는 현재 상태 데이터를 쿠키의 형태로 사용자의 컴퓨터에 보낸다.
    • 전송된 쿠키는 사용자의 컴퓨터에 저장되고, 동일한 서버에 대한 모든 요청에 대해 쿠키를 서버로 다시 보낸다.
    • 서버는 이를 사용하여 특정 사용자에 대한 상태를 기억하고 응답을 생성한다.

쿠키는 요청들 간에 데이터를 전달하는 데에 적절한 방법이라고 할 수 있다. 하지만 클라이언트 측에서 데이터를 읽거나 수정하기를 원하지 않는다면, 쿠키의 크기가 너무 크다면 좋은 방법은 아니다.

이러한 쿠키의 트래픽 문제와 보안적 이슈를 위해 등장한 것이 세션이다.

데이터를 쿠키 형태로 클라이언트 측에 저장하는 게 아니라 서버 측에 저장하도록 하여 이 문제를 해결할 수 있다. 즉, 서버에서 특정 사용자의 세션 토큰을 쿠키로 패키징하여 사용자의 브라우저로 보내고 각 요청에 대해 클라이언트 측에서 서버로 세션 토큰을 포함하는 쿠키를 보내 자신을 식별하게 하는 것이다.


Session

  • 서버에 일시적으로 정보를 저장하는 데에 사용한다.
  • 사용자가 웹 서버에 접속해있는 일정 시간 동안 상태를 유지해주는 것으로, 사용자가 프로그램에서 로그아웃하거나 시스템을 종료할 때 끝난다.
    • 사용자가 로그아웃하거나 시스템을 종료할 때 세션 값이 자동으로 삭제되므로, 값을 유지하려면 데이터베이스에 저장해야 한다. (데이터베이스를 사용하여 세션을 구현하는 것이 일반적)
  • 세션에 저장된 정보들은 클라이언트 측에서 접근하기 어렵다. 따라서 쿠키보다 안전하다고 할 수 있다.
  • 모든 단일 세션은 개별 사용자에게 고유하고, Session ID(서버에 임시 저장되는 고유한 번호)로 사용자를 식별할 수 있다.
    • 일반적으로 HTTP 쿠키로 저장 및 전송된다.
  • 사용자가 서버에 접속하면,
    • 서버에서 발급한 세션 ID를 포함하는 쿠키를 클라이언트로 전송한다.
    • 클라이언트 측에서 서버에 요청할 때마다 세션 ID가 함께 전달된다.
    • 서버에서는 전달 받은 세션 ID를 활용하여 세션에 있는 클라이언트 정보를 식별 및 처리하여 클라이언트 측에 응답을 보낸다.

쿠키와 세션의 동작 원리는 비슷하지만, 세션을 사용하는 것이 항상 더 나은 것은 아니다. 세션을 사용하게 되면 서버에 데이터를 저장하는 것이므로 세션의 양이 많아질수록(동시 접속한 사용자 수가 많아질수록) 서버에 부담이 될 수 있다. 따라서 어떤 데이터가 어디에 저장되는 게 적절한지 경우에 따라 판단하는 것이 좋다.


아래는 쿠키와 세션의 차이점을 간략히 정리한 표이다.

쿠키세션
로컬 컴퓨터에 있는 클라이언트 측 파일서버 측 파일
사용자가 설정한 lifetime에 의해 종료
(유효시간 이내라면 브라우저가 종료되어도 유지됨)
사용자가 브라우저를 종료하거나 프로그램에서 로그아웃 할 때 종료
일정량의 정보만 저장 가능(최대 4KB)서버가 허용하는 한 무제한의 정보를 저장 가능
보호/보안되지 않음쿠키에 비해 안전함
비교적 빠른 속도비교적 느린 속도
텍스트 파일에 데이터를 저장암호화된 형식으로 데이터를 저장

0개의 댓글