쿠키(Cookie), 세션(Session), 토큰(Token)의 정의와 차이점
쿠키(Cookie), 세션(Session), 토큰(Token)의 정의와 차이점
쿠키(Cookie), 세션(Session), 토큰(Token)은 웹 애플리케이션에서 사용자 인증과 상태 관리를 위해 사용되는 기술로, 각각의 특징과 사용 방식에서 차이가 있다.
1. 쿠키 (Cookie)
- 정의: 쿠키는 웹 브라우저에 저장되는 작은 데이터 파일이다. 서버에서 클라이언트로 보내지고, 클라이언트는 이를 다시 서버에 보내면서 상태를 유지할 수 있다.
- 저장 위치: 클라이언트(사용자 브라우저)에 저장된다.
- 주요 특징:
- 자동 전송: 쿠키는 클라이언트가 서버에 요청을 보낼 때 자동으로 전송된다.
- 만료 시간: 쿠키에는 만료 시간이 설정될 수 있으며, 만료되면 삭제된다.
- 용량: 쿠키의 크기는 보통 4KB 이하로 제한된다.
- 보안: 쿠키에는
HttpOnly
(JavaScript에서 접근 불가),Secure
(HTTPS로만 전송) 옵션을 설정할 수 있어 보안을 강화할 수 있다.
- 사용 예시: 사용자가 웹사이트에 로그인하면, 로그인 상태를 유지하기 위해 쿠키를 사용하여 사용자 정보를 클라이언트에 저장하고, 이후 요청 시마다 서버에 쿠키를 전송하여 인증 상태를 확인한다.
1
2
3
4
5
6
Client->>+Server: 로그인 요청
Server-->>-Client: Set-Cookie 헤더와 함께 쿠키 전송
Note right of Client: 쿠키 저장
Client->>+Server: 요청 + 쿠키
Server-->>-Client: 응답
Note left of Server: 매 요청마다 쿠키 검증
2. 세션 (Session)
- 정의: 세션은 서버에서 사용자의 상태 정보를 저장하는 방식이다. 사용자가 웹 애플리케이션을 사용하는 동안 서버에서 정보를 유지하며, 주로 서버의 메모리나 데이터베이스에 저장된다.
- 저장 위치: 서버에 저장된다.
- 주요 특징:
- 세션 ID: 세션은 클라이언트에서 고유한 세션 ID를 통해 식별된다. 이 세션 ID는 보통 쿠키나 URL 파라미터로 클라이언트에 전달된다.
- 자동 만료: 세션은 서버에서 관리되며, 일정 시간 동안 요청이 없으면 세션이 만료된다.
- 용량: 서버에서 데이터를 저장하므로 서버 메모리를 차지한다.
- 보안: 세션 ID가 유출되면 다른 사용자가 세션을 탈취할 수 있기 때문에, 세션 ID를 안전하게 관리해야 한다.
- 사용 예시: 로그인 후 서버에서 사용자의 로그인 정보를 세션에 저장하고, 이후 사용자가 요청할 때마다 서버는 세션 ID를 확인하여 사용자의 인증 상태를 유지한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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: 응답
3. 토큰 (Token)
- 정의: 토큰은 클라이언트와 서버 간에 안전하게 정보를 전달하기 위한 문자열이다. 주로 JWT(Json Web Token)와 같은 형식이 사용된다. 토큰은 주로 API에서 인증 및 권한 부여를 위해 사용된다.
- 저장 위치: 클라이언트(주로 브라우저의 로컬 스토리지나 세션 스토리지)에 저장된다.
- 주요 특징:
- 자체 인증: 토큰 자체에 사용자 인증 정보를 포함하고 있어, 서버에서 별도로 세션 정보를 저장할 필요가 없다.
- 무상태 (Stateless): 토큰은 서버 상태와 관계없이 자체적으로 사용자의 정보를 가지고 있으므로 서버가 상태를 유지할 필요가 없다.
- 만료 시간: 토큰은 만료 시간이 설정되어 있으며, 만료되면 재발급을 받아야 한다.
- 보안: 토큰은 암호화된 정보를 담고 있으므로, 중간에서 변경되거나 탈취되지 않도록 HTTPS로 안전하게 전송해야 한다.
- 사용 예시: 사용자 인증을 위해 로그인한 후 JWT 토큰을 발급받고, 이후 API 호출 시 헤더에 이 토큰을 포함시켜 서버에 요청하여 인증을 처리한다.
1
2
3
4
5
6
7
8
9
10
11
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에 저장 | 크기가 상대적으로 작고 자체 정보 포함 |
상태 관리 | 상태 정보 클라이언트에 저장 | 상태 정보 서버에 저장 | 상태 정보 클라이언트에 저장, 무상태 방식 |
결론
- 쿠키는 주로 클라이언트에서 저장되는 작은 데이터 파일로, 상태 유지 및 세션 관리에 유용하다.
- 세션은 서버에서 사용자 정보를 관리하며, 보안에 민감한 데이터나 상태 정보를 저장할 때 사용된다.
- 토큰은 클라이언트와 서버 간에 정보를 안전하게 전달하기 위한 인증 방식으로, 특히 API 서버와의 인증에서 중요한 역할을 한다.
This post is licensed under CC BY 4.0 by the author.