HTTP에서 쿠키(Cookie) 의 역할은 "Stateless"한 HTTP 프로토콜에 상태(State)를 부여해서, 클라이언트와 서버 간에 지속적인 정보(세션)를 공유할 수 있도록 해주는 것입니다.
1️⃣ 쿠키의 핵심 역할
역할
설명
사용자 식별
사용자가 누군지 식별 (로그인 상태 유지)
세션 유지
HTTP 요청이 독립적인 특성을 극복 → 상태 유지
개인화
언어, 테마, 최근 검색 기록 등 맞춤 설정 저장
트래킹
광고/분석 목적으로 방문 기록 추적 (3rd-party cookie)
2️⃣ 왜 HTTP에서 쿠키가 필요한가?
HTTP는 Stateless → 각 요청은 이전 요청과 관계없이 독립적으로 처리
서버는 기본적으로 "이 요청이 이전에 로그인한 사용자인지" 알 수 없음
쿠키는 클라이언트가 서버로부터 받은 작은 데이터 조각을 이후 요청마다 자동으로 함께 전송하여 연결된 상태처럼 동작하게 함
3️⃣ 동작 방식 (흐름)
[1] 서버 → 클라이언트 (Set-Cookie)
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Path=/; HttpOnly
[2] 클라이언트 브라우저가 쿠키 저장
[3] 이후 요청 시 자동 전송
GET /profile HTTP/1.1
Cookie: session_id=abc123
4️⃣ 쿠키와 세션의 관계
구분
쿠키
세션
저장 위치
브라우저(클라이언트)
서버(메모리, DB, Redis 등)
보안성
상대적으로 낮음 (탈취 가능)
높음 (민감 데이터는 서버에만 저장)
동작 방식
요청 시 자동 전송
쿠키를 통해 세션 ID 전달 후 서버에서 데이터 조회
📌 실무 예: 서버는 세션 ID만 쿠키에 저장하고, 실제 사용자 정보는 서버 세션 저장소에 보관 → 보안 강화
5️⃣ 쿠키의 주요 속성
속성
설명
Name=Value
저장할 데이터 (예: session_id=abc123)
Path
전송 경로 제한 (예: /app에서만 전송)
Domain
전송 도메인 제한
Expires / Max-Age
유효기간 설정
HttpOnly
JS로 접근 불가 (보안 강화)
Secure
HTTPS에서만 전송
SameSite
CSRF 방지 옵션 (Strict, Lax, None)
✅ 정리
HTTP에서 쿠키의 역할은 서버와 클라이언트 간 상태 유지입니다. 즉, 원래 Stateless인 HTTP 프로토콜을 Stateful처럼 동작하게 만들어, 로그인 유지, 개인화, 트래킹 등 다양한 기능을 가능하게 합니다.
그러면 HTTP 통신에서 쿠키의 개념이 없다면??
HTTP에서 쿠키(Cookie)가 없다면, HTTP의 본래 특성인 Stateless가 그대로 유지되어 요청 간 상태 유지가 불가능해집니다.
1️⃣ 쿠키가 없는 HTTP의 특징
항목
영향
로그인 유지 불가
매 요청마다 사용자가 누구인지 서버가 알 수 없음
개인화 불가
언어 설정, 테마, 장바구니, 최근 검색 기록 저장 불가
상태 기반 서비스 불가
장시간 대화형 서비스, 결제 과정, 다단계 폼 처리 불가
연속적인 사용자 경험 저하
페이지 이동 시 매번 초기 상태로 리셋됨
2️⃣ 예시 (로그인 시나리오)
📌 쿠키 없는 경우
1. 로그인 요청 → 서버 인증 OK
2. 다음 페이지 요청 → 서버가 사용자 식별 불가 → 다시 로그인 요구
📌 쿠키 있는 경우
1. 로그인 요청 → 서버 인증 OK + session_id 쿠키 발급
2. 다음 페이지 요청 → 쿠키(session_id) 포함 → 서버가 로그인 상태 유지
3️⃣ 쿠키 없는 환경에서의 대안
대안
설명
단점
URL 파라미터
?session_id=abc123로 상태 전달
URL 노출, 보안 취약
HTML Form Hidden Field
숨겨진 input 값으로 상태 전달
요청 방식 제한, 불편
로컬 저장소(LocalStorage)
브라우저에 직접 저장
자동 전송 안 됨, JS 필요
HTTP 헤더 토큰
Authorization: Bearer {토큰}
자동 전송 안 되고, 구현 필요
📌 결론: 쿠키는 브라우저가 자동으로 상태를 요청과 함께 전송해주기 때문에 편리하고 표준화된 방법임.
4️⃣ 서비스 영향 요약
서비스 유형
쿠키 없을 때 영향
쇼핑몰
장바구니 유지 불가
SNS
로그인 후 페이지 이동 시 로그아웃됨
포털
개인화 뉴스/광고 제공 불가
결제 페이지
여러 단계 결제 진행 불가
✅ 정리
쿠키가 없으면 HTTP는 완전히 Stateless하게 동작
사용자의 연속적인 활동(로그인, 장바구니, 설정 유지 등) 불가능
가능은 하지만, 다른 방법을 쓰면 구현 복잡도와 보안 위험이 커짐
HTTP는 TCP 인데 Sessionless (stateless) 인지에 대해서 궁금하다면 아래 글을 참조해보세요!