쿠키 vs 세션 vs JWT
웹 개발을 하다 보면 항상 부딪히는 주제가 있습니다. 바로 사용자 인증(로그인)이에요.
“사용자가 로그인했는지, 로그인했다면 누구인지”를 서버가 어떻게 기억할까요?
여기서 쿠키(Cookie), 세션(Session), JWT(Json Web Token)이 등장합니다.

1. 쿠키(Cookie)
- 정의: 브라우저에 저장되는 작은 데이터 조각
- 저장 위치: 클라이언트(브라우저)
- 용도: 로그인 상태 유지, 사용자 설정(언어, 테마 등) 저장
- 특징:
- 서버가 응답할 때 Set-Cookie 헤더를 내려주면, 브라우저가 저장
- 이후 같은 도메인에 요청할 때 자동으로 쿠키를 함께 보냄
👉 예시
- 내가 로그인 후 페이지를 새로고침했는데 계속 로그인 상태로 남아있는 것 = 쿠키 덕분
2. 세션(Session)
- 정의: 서버가 사용자 정보를 저장하는 방식
- 저장 위치: 서버 메모리(또는 Redis 같은 저장소)
- 동작 원리:
- 사용자가 로그인 성공 → 서버가 세션 ID 발급
- 세션 ID를 쿠키에 담아 브라우저로 전송
- 이후 요청 시 브라우저가 세션 ID를 함께 보냄
- 서버는 세션 저장소에서 세션 ID를 조회해 사용자 확인
👉 예시
- 회사 인트라넷 로그인 → 서버가 “세션 ID = abc123” 발급 → 이후 요청에서 abc123을 통해 사용자 판별
3. JWT(Json Web Token)
- 정의: 토큰 기반 인증 방식, JSON 형태의 데이터를 암호화해 담은 토큰
- 저장 위치: 주로 클라이언트(LocalStorage, Cookie 등)
- 구조: Header.Payload.Signature
- Header: 토큰 타입과 알고리즘
- Payload: 사용자 정보(예: userId, 권한)
- Signature: 변조 여부 검증용 서명
- 특징:
- 서버가 따로 세션을 저장하지 않음 (Stateless)
- 토큰 자체에 정보가 담겨 있어, 검증만 하면 됨
- 모바일/마이크로서비스 환경에서 많이 사용
👉 예시
- 소셜 로그인(Google, Kakao)에서 발급받는 토큰
- Authorization: Bearer <JWT> 헤더로 API 요청
4. 쿠키 vs 세션 vs JWT 비교
| 구분 | 쿠키 | 세션 | JWT |
| 저장 위치 | 클라이언트(브라우저) | 서버 | 클라이언트 |
| 인증 방식 | 클라이언트가 값 보관 | 세션 ID로 서버 조회 | 토큰 자체에 정보 포함 |
| 장점 | 간단, 브라우저 내장 기능 | 서버가 안전하게 관리 | 확장성 좋음, 서버 부하 적음 |
| 단점 | 보안에 취약(XSS, 탈취 위험) | 서버 메모리/저장소 필요 | 토큰 크기가 큼, 만료 전까지 무효화 어려움 |
| 활용 예 | 다크 모드 설정, 장바구니 | 전통적인 웹 로그인 | 소셜 로그인, 모바일 API 인증 |
5. 정리
- 쿠키 : 브라우저에 저장되는 데이터, 로그인 상태 유지용으로 자주 사용
- 세션 : 서버에서 사용자 정보를 관리, 보안이 더 강함
- JWT : 토큰 기반 인증, 서버가 상태를 저장하지 않아 확장성 좋음