HTTP 프로토콜의 기본 특징: HTTP 는 무상태(stateless) 프로토콜이라, 요청(Request) 하나하나가 서로 독립적이고, 상태를 유지하지 않는다.
즉, 서버는 이전의 요청이 누구로부터 왔는지 기억하지 못한다.
이로 인한 문제점은 로그인 예시에서, 사용자가 /login 요청으로 아이디, 비밀번호를 보내 인증에 성공했더라고,
그다음 /mypage 요청에서는 서버가 이게 방금 로그인한 사용자 요청인지 판단할수 없다. 따라서, 매 요청마다
userId, password 같은 자격 증명을 반복해서 보내야한다(비 효율적 이고, 보안에 취약하다.)

SESSIONID 같은 식별자를 발급한다.Set-Cookie 를 포함시켜 클라이언트에 전달한다(Cookie 전달).HTTP/1.1 200 OK
Set-Cookie: SESSIONID=abc123; Path=/; HttpOnly; Secure
Cookie header 에 포함시킨다GET /mypage HTTP/1.1
Host: example.com
Cookie: SESSIONID=abc123
SESSIONID 를 보고 이 요청이 어느 사용자 세션에 속하는지 식별한다. (이전의 요청이
- 앞선 방식(매번 userId, password를 직접 보내는 것): 매 요청마다 인증 정보를 다 들고 다녀야 한다.
- 쿠키 + 세션 방식: 서버가 만든 "세션 식별자"만 쿠키에 저장해 두고, 클라이언트는 그 값만 보내면 된다.
브라우저에는 Web Storage API가 있어서, 클라이언트 쪽에서 데이터를 보관할 수 있다.
localStorage : 브라우저에 영구 저장 (탭/브라우저 닫아도 남음).sessionStorage : 현재 브라우저 탭에서만 유지 (탭 닫으면 사라짐).localStorage나 sessionStorage에 저장.
- 세션 ID(Session Identifier)
- 서버가 관리하는 "사용자 세션"을 구분하기 위한 고유한 ID 값.
- 세션은 서버 메모리(혹은 DB/Redis 등)에 사용자 상태(로그인 여부, 장바구니, 권한 정보 등)를 저장해둔 공간.
- 클라이언트는 쿠키를 통해 세션 ID만 보내고, 실제 데이터는 서버가 들고 있음.
- 예:
SESSIONID=abc123
- 인증 토큰 (Authentication Token)
- JWT(Json Web Token) 같은 자체적으로 사용자 정보를 포함하는 토큰.
- 서버가 별도 세션을 들고 있지 않고, 토큰 안에 "누구인지, 언제 만료되는지, 어떤 권한이 있는지" 등을 서명한 형태로 담음.
- 서버는 토큰의 유효성만 검증하면 되고, 상태 저장이 필요 없음(= Stateless 인증).
- 예:
Authorization: Bearer <JWT토큰> (쿠키에 저장할 수도 있고, 헤더에 직접 넣기도 함).
Set-Cookie: SESSIONID=abc123; Path=/; Expires=Wed, 30 Oct 2025 12:00:00 GMT; HttpOnly; Secure
Set-Cookie: TOKEN=xyz456; Path=/; Max-Age=3600
Expires
Max-Age
세션 쿠키(Session cookie)
영속 쿠키(Persistent cookie)
Set-Cookie: SESSIONID=abc123; Domain=example.com; Path=/; Secure
Set-Cookie: SESSIONID=abc123; Path=/account
Path 는 쿠키가 전송될 요청 경로 범위를 제한.
예:
Path=/account → /account, /account/settings 요청에는 전송./shop 같은 다른 경로에는 전송되지 않음.보통 기본값은 /라서, 사이트 전체에서 쿠키가 전송됨.
Set-Cookie: SESSIONID=abc123; Path=/; Secure; HttpOnly; SameSite=Strict
HTTPS 연결에서만 쿠키 전송.HTTP 평문 요청에서는 전송되지 않음 → 도청 방지.document.cookie로 접근 불가.https://developer.mozilla.org/ko/docs/Web/HTTP/Guides/Cookies 참고