쿠키(Cookie), 세션(Session), 토큰(Token)은 웹 애플리케이션에서 사용자 인증과 상태 관리를 위해 사용되는 기술로, 각각의 특징과 사용 방식에서 차이가 있다.
정의: 쿠키는 웹 브라우저에 저장되는 작은 데이터 파일이다. 서버에서 클라이언트로 보내지고, 클라이언트는 이를 다시 서버에 보내면서 상태를 유지할 수 있다. (HTTP 프로토콜의 무상태성으로 인한 문제 해결)
무상태성: 서버가 받는 요청들은 각각 독립적이고 이전의 다른 요청과 연결 되지 않는다.
저장 위치: 클라이언트(사용자 브라우저)에 저장된다.
주요 특징:
HttpOnly (JavaScript에서 접근 불가), Secure (HTTPS로만 전송) 옵션을 설정할 수 있어 보안을 강화할 수 있다.사용 예시: 사용자가 웹사이트에 로그인하면, 로그인 상태를 유지하기 위해 쿠키를 사용하여 사용자 정보를 클라이언트에 저장하고, 이후 요청 시마다 서버에 쿠키를 전송하여 인증 상태를 확인한다.
Client->>+Server: 로그인 요청
Server-->>-Client: Set-Cookie 헤더와 함께 쿠키 전송
Note right of Client: 쿠키 저장
Client->>+Server: 요청 + 쿠키
Server-->>-Client: 응답
Note left of Server: 매 요청마다 쿠키 검증
participant C as Client
participant S as Server
participant SD as Session Store
C->>+S: 로그인 요청
S->>SD: 세션 생성 및 저장
SD-->>S: 세션 ID
S-->>-C: 세션 ID를 쿠키로 전송
Note right of C: 세션 ID 저장
C->>+S: 요청 + 세션 ID
S->>SD: 세션 검증
SD-->>S: 세션 데이터
S-->>-C: 응답
participant C as Client
participant S as Server
C->>+S: 로그인 요청
S->>S: JWT 토큰 생성
S-->>-C: JWT 토큰 반환
Note right of C: 토큰을 로컬 저장소에 저장
C->>+S: 요청 + Authorization 헤더 (Bearer Token)
S->>S: 토큰 검증
S-->>-C: 응답
| 항목 | 쿠키 (Cookie) | 세션 (Session) | 토큰 (Token) |
|---|---|---|---|
| 저장 위치 | 클라이언트 (브라우저) | 서버 | 클라이언트 (로컬 스토리지, 세션 스토리지) |
| 주요 용도 | 상태 유지, 세션 관리, 인증 | 인증 상태 관리, 세션 유지 | 인증, API 인증 및 권한 부여 |
| 보안 | 쿠키 설정에 따라 다름 (HttpOnly, Secure) | 서버에서 관리되므로 서버 보안 중요 | JWT 등 암호화된 토큰 사용, HTTPS 필요 |
| 만료 | 만료 시간 설정 가능, 브라우저 종료 시 삭제 | 일정 시간 후 만료 (세션 타임아웃) | 토큰 자체에 만료 시간 포함 |
| 용량 | 제한 (보통 4KB 이하) | 서버 메모리나 DB에 저장 | 크기가 상대적으로 작고 자체 정보 포함 |
| 상태 관리 | 상태 정보 클라이언트에 저장 | 상태 정보 서버에 저장 | 상태 정보 클라이언트에 저장, 무상태 방식 |