세션(Session), 쿠키(Cookie), JWT(Json Web Token) 차이점 및 비교
웹 애플리케이션에서 사용자 인증 및 상태 관리를 위해 세션, 쿠키, JWT 많이 씀. 각각의 개념과 차이점 정리함.
1. 세션(Session)
- 서버에서 사용자 정보 관리
- 로그인하면 서버가 세션 ID 발급, 클라이언트에 저장
- 이후 요청 시 세션 ID로 사용자 확인
- 서버 부담 있음, 보안 좋음
- 세션 동작 방식:
- 로그인 시 서버가 세션 생성, 세션 ID 발급
- 클라이언트가 쿠키에 세션 ID 저장
- 요청 시 세션 ID 서버로 전송
- 서버가 세션 정보 확인 후 처리
2. 쿠키(Cookie)
- 클라이언트(브라우저)에 데이터 저장
- 로그인 상태, 사용자 설정 저장 가능
- 조작 가능성 있음, 용량 제한 있음(4KB)
- 쿠키 동작 방식:
- 서버가 쿠키 생성, 클라이언트 전달
- 클라이언트가 브라우저에 저장
- 이후 요청 시 쿠키 자동 전송
3. JWT (JSON Web Token)
- JSON 형식 토큰 사용, 무상태 인증 가능
- 서버에서 사용자 정보 저장 안 함, 토큰에 포함
- 토큰 탈취 시 보안 문제 가능
- JWT 동작 방식:
- 로그인 시 서버가 JWT 생성, 클라이언트 전달
- 클라이언트가 로컬/세션 스토리지에 저장
- 요청 시 JWT 헤더에 포함 전송
- 서버가 토큰 검증 후 처리
- JWT 구조:
- Header.Payload.Signature 형태
- Header: 토큰 타입, 알고리즘
- Payload: 사용자 정보
- Signature: 무결성 검증용 서명
4. 세션 vs 쿠키 vs JWT 비교
| 항목 | 세션(Session) | 쿠키(Cookie) | JWT (JSON Web Token) |
|---|
| 저장 위치 | 서버 | 클라이언트(브라우저) | 클라이언트(브라우저) |
| 보안 | 높음(서버 관리) | 낮음(조작 가능) | 중간(서명으로 검증) |
| 성능 | 서버 부담 있음 | 클라이언트 부담 | 서버 부담 없음 |
| 인증 방식 | 세션 ID로 확인 | 쿠키에 인증 정보 저장 | 토큰 자체 인증 |
| 상태 | 상태 유지 (Stateful) | 상태 유지 (Stateful) | 무상태 (Stateless) |
| 데이터 크기 | 작음 | 제한적 (4KB) | 비교적 큼 |
5. 어떤 걸 선택할까?
- 세션 적합: 보안 중요할 때 (예: 은행, 관리자 페이지)
- 쿠키 적합: 간단한 사용자 설정 저장 (예: 다크 모드, 언어 설정)
- JWT 적합: REST API, 모바일/웹 통합 인증 필요할 때
결론
세션, 쿠키, JWT 각자 장단점 있음. 목적과 환경에 맞게 선택하면 됨. 보안 중요하면 세션, 성능 필요하면 JWT, 간단한 설정엔 쿠키 사용 추천.