브렌쏭의 Veritas_Garage

[WEB_HTTP] Cookie와 Session 본문

[Project_하다]/[Project_공부]

[WEB_HTTP] Cookie와 Session

브렌쏭 2024. 8. 29. 09:43

쿠키와 세션

HTTP(HyperText Transfer Protocol)

  • HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜(규칙, 약속)
  • 웹에서 이루는 모든 데이터 교환의 기초
  • 비연결지향(connectionless) : 서버는 응답 후 접속을 끊음
  • 무상태(stateless) : 접속이 끊어지면 클라이언트와 서버 간의 통신이 끝나며 상태를 저장하지 않음

Cookie(쿠키)

  • HTTP 쿠키 : 클라이언트의 로컬에 저장되는 "키-값"의 작은 데이터 파일
  • 세션을 유지하는 방식 중 가장 대표적인 방식
  • 클라이언트 측 저장: 쿠키는 사용자의 브라우저에 저장되는 작은 데이터 조각입니다.
  • 세션 ID 저장: 사용자를 식별하기 위한 고유한 값을 저장하며, 이를 통해 서버는 사용자를 식별하고 상태를 유지합니다.
  • 전송 방식: 이후 클라이언트가 서버에 요청을 보낼 때, 브라우저는 자동으로 쿠키를 포함하여 서버로 전송합니다. 이를 통해 서버는 클라이언트를 식별할 수 있습니다.
  • 보안: 쿠키는 클라이언트 측에서 조작될 수 있으므로 민감한 정보를 직접 저장하지 않습니다.
  • 웹 페이지에 접속하면 요청한 웹 페이지를 받으며 쿠키를 로컬에 저장하고, 클라이언트가 재요청시마다 웹 페이지 요청과 함께 쿠키 값도 같이 전송합니다.
    • 기본적으로 브라우저는 수천개, 수만개를 가질 수 있습니다.
    • 하지만, 웹 사이트를 방문할 때마다 갖고 있는 모든 쿠키를 전달하는 것이 아니라, 보낼 웹사이트 주소를 적어놓은 Domain이라는 데이터에다가 해당 웹사이트에서 발급한 쿠키만 포함해서 요청을 보냅니다.
  • Cookie Lifetime :: 파기시점 존재 유무로 구분
    • Session Cookie
      • 현재 세션(current session)이 종료되면 삭제
      • 브라우저는 현재 세션이 종료되는 시기를 정의
        • 일반적으로 브라우저를 종료할 떄 함께 삭제되는 쿠키
      • 일부 브라우저는 다시 시작할 떄 세션 복원(Session Restoring)을 사용해 계속 지속될 수 있도록 함
    • Persistent Cookie
      • Expires 속성에 지정된 날짜 혹은 Max-Age 속성에 지정된 기간이 지나면 삭제
      • 브라우저를 종료하거나 컴퓨터를 재시작하더라도 남아있는 쿠키

Session(세션)

  • 사이트와 특정 브라우저 사이의 "state"(상태)를 유지시키는 것
  • 서버 측 저장: 세션은 사용자와 관련된 데이터를 서버 측에 저장하는 방식입니다.
  • 세션 ID: 서버는 각 사용자를 식별하기 위해 고유한 세션 ID를 생성합니다. 이 세션 ID는 클라이언트 측의 쿠키에 저장되고, 서버는 이 ID를 통해 사용자의 세션 데이터를 조회합니다.
  • 상태 관리: 세션을 통해 사용자의 로그인 상태, 장바구니 정보 등 상태를 관리합니다. 사용자가 요청할 때마다 해당 세션 ID를 기반으로 서버가 사용자의 상태를 파악하고 필요한 정보를 제공합니다.
  • 보안: 세션 데이터는 서버에 저장되기 때문에 클라이언트가 직접 접근하거나 조작할 수 없습니다.
  • 클라이언트가 서버에 접속하면 서버가 특정 session id를 발급합니다.
  • 클라이언트는 이 session id를 쿠키를 사용해서 저장하고, 서버는 클라이언트의 session id를 통해 클라이언트를 식별합니다.

MIDDLEWARE

  • HTTP 요청과 응답 처리 중간에 작동하는 시스템
  • 주로 데이터 관리, 애플리케이션 서비스, 메시징, 인증 및 API 관리를 담당

Cookie와 Session의 차이점

  • 저장 위치: 쿠키는 클라이언트에 저장되고, 세션은 서버에 저장됩니다.
  • 보안: 쿠키는 클라이언트에 저장되기 때문에 보안에 취약합니다. 세션은 서버에 저장되기 때문에 비교적 안전합니다.
  • 용량: 쿠키는 클라이언트에 저장되기 때문에 용량이 제한적입니다. 세션은 서버에 저장되기 때문에 용량이 제한적이지 않습니다.
  • 수명주기: 쿠키는 만료 날짜를 지정할 수 있습니다. 세션은 클라이언트가 종료되거나 서버에서 세션을 삭제할 때까지 유지됩니다.
  • 속도: 쿠키는 클라이언트에 저장되기 때문에 서버에 요청을 보낼 때마다 쿠키가 함께 전송됩니다. 세션은 서버에 저장되기 때문에 클라이언트에 저장된 쿠키보다 빠릅니다.
  • 저장 형식: 쿠키는 텍스트 형식으로 저장됩니다. 세션은 객체 형식으로 저장됩니다.

Cookie를 사용하는 이유

  • 상태 유지: 사용자가 웹 사이트를 방문할 때마다 사용자를 식별하고 상태를 유지하기 위해 사용됩니다.
  • 개인화: 사용자의 선호도나 설정을 저장하고, 사용자에게 맞춤형 서비스를 제공하기 위해 사용됩니다.
  • 추적: 사용자의 행동을 추적하고 분석하기 위해 사용됩니다.

Session을 사용하는 이유

  • 보안: 세션 데이터는 서버에 저장되기 때문에 클라이언트가 직접 접근하거나 조작할 수 없습니다.
  • 용량: 세션은 서버에 저장되기 때문에 용량이 제한적이지 않습니다.
  • 상태 관리: 세션을 통해 사용자의 로그인 상태, 장바구니 정보 등 상태를 관리합니다.
  • 보안: 세션 데이터는 서버에 저장되기 때문에 클라이언트가 직접 접근하거나 조작할 수 없습니다.

LocalStorage와 SessionStorage

  • LocalStorage: 브라우저를 닫아도 데이터가 남아있고, 사용자가 직접 지우지 않는 한 데이터가 계속 남아있는 저장소
  • SessionStorage: 브라우저를 닫으면 데이터가 사라지는 저장소

LocalStorage

  • 영구적: 브라우저를 닫아도 데이터가 남아있고, 사용자가 직접 지우지 않는 한 데이터가 계속 남아있는 저장소
  • 저장 형식: key-value 형식으로 저장됩니다.

쿠키와 반대로 LocalStorage는 클라이언트에 저장되는 데이터를 서버로 전송하지 않습니다. 따라서 서버에 저장된 데이터를 가져오기 위해서는 JavaScript를 사용해야 합니다.

Comments