개념:
클라이언트(웹 브라우저)에 저장되는 작은 데이터 파일로, 사용자의 상태나 설정 정보를 저장하기 위해 사용됩니다.
주요 특징:
구성 요소:
| 항목 | 설명 |
|------|------|
| Name | 쿠키 이름 (고유 식별자) |
| Value | 쿠키 값 |
| Domain | 쿠키가 적용되는 도메인 |
| Path | 쿠키가 적용되는 경로 |
| Expires | 만료 시점 (없으면 세션 쿠키로 브라우저 종료 시 삭제) |
저장 위치: 클라이언트(웹 브라우저)
만료 시점: 쿠키 생성 시 지정 가능 (브라우저 종료 후에도 유지 가능)
보안: 취약 (클라이언트에서 쉽게 접근 가능)
개념:
서버에서 일정 시간 동안 클라이언트의 상태를 유지하기 위해 사용하는 기술입니다.
주요 특징:
동작 방식:
1. 클라이언트가 서버에 요청을 보냄.
2. 서버가 세션을 생성하고 세션 ID를 클라이언트에 전달.
3. 클라이언트는 세션 ID를 쿠키로 저장.
4. 이후 요청마다 쿠키에 담긴 세션 ID를 함께 전송.
5. 서버는 세션 ID로 클라이언트를 식별하여 동일 사용자임을 인식.
저장 위치: 서버
만료 시점:
보안: 비교적 안전 (서버 저장 방식)
개념:
서버가 클라이언트를 인증하기 위해 JSON 형태로 인코딩된 토큰을 발급하고, 클라이언트가 이를 직접 보관하는 무상태(stateless) 인증 방식입니다.
주요 특징:
구조:
JWT는 3부분으로 구성됩니다.
Header.Payload.Signature
| 구성 | 내용 |
|---|---|
| Header | 알고리즘 및 토큰 타입 정보 (예: HS256, JWT) |
| Payload | 사용자 정보 및 토큰 만료 시간 등의 데이터 |
| Signature | Header + Payload를 비밀키로 서명한 값 |
동작 방식:
1. 사용자가 로그인 요청을 보냄.
2. 서버가 사용자 인증 후 JWT를 생성하여 클라이언트에 전달.
3. 클라이언트는 JWT를 LocalStorage 또는 쿠키에 저장.
4. 이후 요청 시 Authorization: Bearer <JWT> 헤더로 전달.
5. 서버는 토큰 서명을 검증하여 사용자 식별.
저장 위치: 클라이언트 (LocalStorage, SessionStorage, 또는 쿠키)
만료 시점: 토큰 내부 exp(만료 시간) 필드로 지정.
보안: 안전하지만 토큰 탈취 시 재발급 필요 (서버가 상태를 저장하지 않기 때문)
| 구분 | 쿠키 (Cookie) | 세션 (Session) | JWT (Json Web Token) |
|---|---|---|---|
| 설명 | 브라우저에 저장되는 작은 데이터 파일 | 서버가 클라이언트 상태를 유지하기 위한 기술 | 클라이언트가 인증 정보를 직접 보관하는 토큰 방식 |
| 저장 위치 | 클라이언트(브라우저) | 서버 | 클라이언트(LocalStorage, 쿠키 등) |
| 유형 | 상태 유지용 | 상태 유지용 | 무상태(Stateless) 인증 |
| 사용 예시 | 팝업 미표시, 자동 로그인 | 로그인 세션 유지 | API 인증, OAuth 인증 |
| 만료 시점 | 설정 가능 (영구/세션) | 서버 설정 시간, 브라우저 종료 시 | 토큰 내부 exp 필드로 지정 |
| 보안성 | 취약 (변조/탈취 위험) | 안전 (서버 저장) | 비교적 안전하지만 탈취 시 위험 |
| 서버 부하 | 없음 | 높음 (모든 세션 관리 필요) | 낮음 (서버 상태 저장 불필요) |
| 확장성 | 보통 | 낮음 (세션 공유 필요) | 매우 높음 |
| 대표 저장 데이터 | 사용자 설정 정보 | 로그인 상태 | 사용자 인증 토큰 |
정리 요약
- 쿠키: 클라이언트 중심, 단순 데이터 저장
- 세션: 서버 중심, 로그인 상태 유지
- JWT: 무상태 인증, 서버 부담 감소 및 확장성 향상