[웹] '쿠키', '세션', '토큰', 'JWT', 무엇이 다를까?
by rowing0328※ 이 글은 화이트보드 스케치를 바탕으로, 이해를 돕기 위해 제 관점에서 재구성한 내용입니다.
Intro
웹 개발을 시작하면 쿠키(Cookie) 정도는 금방 이해해도
세션(Session), 토큰(Token), 특히 JWT(Json Web Token)는 헷갈리기 쉽다.
하자만 각 기술의 동작 방식과 보안 포인트를 알면
인증/인가 흐름을 설계할 때 훨씬 명확한 기준을 세울 수 있다.
오늘은 화이트보드에 정리해 둔 핵심만으로
쿠키, 세션, 토큰, JWT의 차이를 한눈에 정리해 보겠다.
쿠키(Cookie)
- 보안 취약
값이 그대로 노출되므로 탈취 시 위험 - 용량 제한
저장할 수 있는 데이터가 적다 - 브라우저 간 공유 불가
같은 PC라도 다른 브라우저만 공유되지 않는다 - 세밀한 제어
- Domain: 어떤 도메인에서 쿠키가 유효한지 설정
- Path: 어떤 경로에서 전송할지 제한 가능
- Expires / Max-Age: 쿠키 만료 시간 설정
- Secure: HTTPS 요청에서만 전송
- HttpOnly: 자바스크립트에서 접근 불가 → XSS 방어
[ SameSite 속성 ]
SameSite는 CSRF 방지를 위해 도입된 속성으로, 쿠키의 교차 사이트 전송 여부를 제어한다.
- Strict
다른 사이트에서 온 요청에는 쿠키 절대 보내지 않는다. - Lax (기본값)
사용자가 링크 클릭 등으로 이동한 경우엔 쿠키 전송 가능,
자동 요청 (POST 등)에선 차단된다. - None
다른 사이트에서도 항상 쿠키를 전송한다.
단, 반드시 Secure가 함께 있어야 한다. (HTTPS 필수)
→ 쿠키는 작고, 범위 제어가 세밀하지만 평문 저장 특성 때문에 민감 정보 보관에는 적합하지 않다."
세션(Session)
- 저장 위치
메모리·로컬 파일 중 택 1 또는 DB - 형식
세션ID ↔ 데이터 형태의 Key-Value - 저장 내용
세션 생성 시간 / 마지막 접근 시간 / 사용자 정보 등 민감 데이터 - 부담 요소
서버가 상태를 저장하므로 확장 시 저장소 부담이 생긴다
→ 세션은 서버 측 저장 덕분에 비교적 안전하지만, 스케일 아웃을 고려하면 별도 세션 저장소 관리가 필요하다.
토큰(Token)
- 클라이언트 저장
민감 정보가 브라우저(클라이언트)에 남는다 - 전송 위치
Authorization 헤더 - 변조 가능성 ↑
클라이언트 보관 → 위·변조 위험 증가 - 탈취 시 대응 ↓
유출 대비 전략 필수 - Payload 암호화 X
기본적으로 암호화하지 않는다 - 데이터 길이 ↓
짧은 문자열 → 요청·네트워크 부하 감소
→ 토큰은 무상태(Stateless)라서 서버 부담이 적지만, 변조·탈취 대응 정책을 반드시 마련해야 한다.
JWT(Json Web Token)
Header.Payload.Signature 구성으로,
Base64(Header) + "." + Base64(Payload)에 서버 Key로 전자서명(Signature)을 붙인다.
왜 JWT인가?
- Header·Payload는 복호화할 수 있어도 조작은 불가(서명 불일치 시 즉시 변조 감지)
- 여러 서버 간 권한 공유가 쉽다
- 데스크톱·모바일 환경 모두 동일 방식으로 동작한다
→ JWT는 무상태 + 서명 무결성 덕분에 분산 시스템에 적합하지만,
Payload가 누구나 읽을 수 있으므로 민감 정보는 절대 포함하지 말 것.
마무리
- Cookie
범위 제어는 세밀하지만 평문 노출 → 민감 정보 X - Session
서버-측 안전하지만 저장소·확장 부담 O - Token
무상태·가볍지만 변조/탈취 대응 필수 - JWT
전자서명으로 변조 방지, 분산 환경에 강점
각 기술의 특성을 이해하고,
앱 구조·보안 요구사항에 따라 알맞은 방식을 선택해 보자.
참고 자료:
RFC 6265 - HTTP State Management Mechanism
RFC 6265: HTTP State Management Mechanism
This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol
datatracker.ietf.org
RFC 7519 - JSON Web Token (JWT)
RFC 7519: JSON Web Token (JWT)
JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JS
datatracker.ietf.org
JWT(JSON Web Token) 알아보기
Intro최근 웹 애플리케이션에서는 사용자 인증 및 권한 부여를 위해 JSON Web Token (JWT) 이 많이 사용되고 있다. 이번 포스팅에서는 JWT의 기본 개념부터 구조, 동작 원리, 장단점을 살펴본다. JWT란
dev-rowing.tistory.com
'🌎Web' 카테고리의 다른 글
[웹] JSON 알아보기 (0) | 2025.05.13 |
---|
블로그의 정보
코드의 여백
rowing0328