Gitsunmin

TIL

TIL
(=Today I Learned)

Cookie and Session

HTTP는 Stateless 프로토콜이기 때문에 클라이언트의 상태를 기억할 수 없다. 이를 보완하기 위한 방법이 바로 쿠키(Cookie)와 세션(Session)이다. 두 기술은 비슷해 보이지만, 저장 위치, 보안, 성능 측면에서 차이가 있으며, 상황에 따라 적절한 선택이 필요하다.

  • 저장 위치: 클라이언트(브라우저)
  • 사용 목적: 사용자의 상태를 클라이언트에 저장 (예: 자동 로그인, 테마 설정)
  • 특징
    • HTTP 요청 시마다 자동으로 서버에 전송됨
    • Set-Cookie 헤더로 서버가 생성
    • 만료일 설정 가능 (Expires, Max-Age)
    • 보안 취약점 있음: XSS, 탈취 등의 위험
    • 보호 방법: HttpOnly, Secure, SameSite 속성

세션 (Session)

  • 저장 위치: 서버
  • 사용 목적: 로그인 상태 유지, 사용자 인증 등 민감한 정보 처리
  • 특징
    • 세션 ID만 클라이언트에 저장 (Set-Cookie: sessionId=...)
    • 서버가 실제 데이터를 저장하고 관리
    • 보안성이 높음 (데이터가 클라이언트에 노출되지 않음)
    • 리소스 소비가 커서 사용자 수가 많으면 서버 부담 가능

쿠키 vs 세션 비교

항목쿠키세션
저장 위치클라이언트서버
보안성낮음 (노출 가능성 있음)높음 (서버에서만 접근 가능)
용량 제한약 4KB제한 없음 (서버 리소스 기반)
유효 시간지정 가능브라우저 종료 시 or 타임아웃
서버 부담낮음높음
사용 예시자동 로그인, 방문 기록로그인 상태, 인증 유지

오늘의 인사이트

  • 쿠키는 브라우저에 저장되므로 클라이언트 중심의 상태 관리에 적합.
  • 세션은 서버가 상태를 관리하므로 보안이 중요한 정보에 적합.
  • 실제 웹 애플리케이션에서는 둘을 조합해서 사용하는 경우가 많다. 예: 쿠키에 토큰을 저장하고, 서버는 토큰 검증을 통해 세션을 유지.

추가 학습 예정

  • express-session, cookie-parser 등 Node.js에서의 쿠키/세션 사용법
  • JWT (JSON Web Token)와의 차이점
  • SameSite 쿠키 정책과 CORS 관련 보안 이슈