웹 개발을 하다 보면 사용자 인증(로그인)기능은 아주 작은 웹사이트라고 래도 꼭 들어가 있는 필수 기능 중 하나 입니다. 이 웹 인증 기능을 구현하는 세가지 방법 Cookie, Session, JWT에 대해 알아 보겠습니다.
1. 쿠키(Cookie)란?
(1) 정의
쿠키는 브라우저(클라이언트) 가 가지고 있는 작은 데이터 저장소입니다. 서버가 브라우저에게 전달하면, 브라우저는 쿠키를 로컬에 저장하고 자동으로 요청마다 함께 전송합니다.
(2) 특징
- 저장 위치: 클라이언트 (브라우저)
- 크기 제한: 약 4KB
- 용도: 로그인 상태 유지, 장바구니 저장, 최근 본 상품 등
2. 세션(Session) 이란?
(1) 정의
세션은 서버에서 생성하고 관리하는 사용자 정보 저장소입니다. 브라우저가 서버에 접속하면, 서버는 세션 ID를 생성하고 쿠키에 담아 브라우저에 전달합니다.
(2) 특징
- 저장 위치: 서버 (메모리, Redis 등)
- 클라이언트는 세션 ID만 가짐
- 로그아웃이나 시간이 지나면 만료됨
- 장단점
| 장점 | 단점 |
| 민감한 데이터는 서버에 보관 | 서버 메모리 사용 증가 |
| 비교적 보안성이 높음 | 서버 확장 시 세션 공유 필요 (예: Redis) |
(3) 작동 흐름
- 로그인 → 서버가 세션 ID 생성
- 쿠키로 클라이언트에게 전달
- 클라이언트가 세션 ID 포함하여 요청
- 서버는 세션 ID로 사용자 정보 조회
3. JWT (JSON Web Token)란?
(1) 정의
JWT는 로그인 정보를 JSON 형태로 암호화한 토큰입니다. 서버가 발급하고, 클라이언트는 이 토큰을 저장 후 요청 시 함께 전송합니다. 세션과 달리 서버가 토큰을 저장하지 않음(Stateless).
(2) 구조
헤더.페이로드.서명
(3) 특징
- 저장 위치: 브라우저 (주로 LocalStorage 또는 쿠키)
- 서버는 JWT를 저장하지 않음
- 서명(시그니처)으로 위변조 방지
- 장단점
| 장점 | 단점 |
| 서버가 사용자 상태를 기억할 필요 없음 | 토큰 탈취 시 정보가 유출될 수 있음 |
| 서버 확장 쉬움 | 로그아웃 처리 어려움 |
| 빠른 응답 가능 | 토큰 만료 및 갱신 처리 필요 |
4. 쿠키 vs 세션 vs JWT 비교표
| 쿠키 | 세션 | JWT | |
| 저장 위치 | 클라이언트 | 서버 | 클라이언트 |
| 용량 제한 | 약 4KB | 서버 메모리 한도 | 보통 수 KB ~ 수십 KB |
| 서버 확장 | 쉽다 | 어려움 (세션 공유 필요) | 쉽다 |
| 보안성 | 중간 (암호화 가능) | 높음 | 중간~낮음 (토큰 탈취 주의) |
| 로그아웃 | 직접 삭제 필요 | 서버에서 삭제 | 클라이언트에서 토큰 삭제 |
| 상태관리 | 무상태 | 상태 기반 | 무상태 |
5. 공통 보안 사항 (쿠키 / 세션 / JWT )
- HTTPS 사용 필수: 민감한 데이터 전송 시 반드시 HTTPS 사용
- HttpOnly, Secure 옵션 설정: 쿠키 탈취 방지
- Access Token / Refresh Token 분리: JWT 사용 시 권장
- 토큰 만료 시간 짧게 설정: 유출 시 피해 최소화
6. 마무리
Cookie, Session, JWT는 웹 인증을 구성하는 중요한 기술입니다. 각각의 특성과 쓰임새를 잘 이해하고, 상황에 따라 적절히 선택하는 것이 중요합니다.
- 간단한 인증 → 쿠키
- 보안 중심 인증 → 세션
- 확장성 / 모바일 / SPA → JWT
'공부 내용 정리' 카테고리의 다른 글
| Nest.js란? (0) | 2025.07.28 |
|---|---|
| Next.js 란? (1) | 2025.07.28 |
| OpenZeppelin이란? (3) | 2025.07.25 |
| Express 기초 개념과 자주 쓰는 문법 정리 (0) | 2025.07.24 |
| Express.js로 만들어진서버-클라이언트 (0) | 2025.07.23 |