개발이야기/웹개발
[코드잇 스프린트 풀스택 4기] 세션 기반 인증과 토큰 기반 인증
스탠다드
2025. 3. 30. 08:46
반응형
세션 기반 인증과 토큰 기반 인증
1. 세션 기반 인증 (Session-Based Authentication)
동작 방식
- 사용자 로그인 시 서버는 세션 ID를 생성해 클라이언트(브라우저) 쿠키에 저장합니다.
- 이후 클라이언트 요청 시 세션 ID를 서버로 전송하며, 서버는 세션 저장소(DB, Redis 등)에서 해당 ID를 검증합니다.
특징
- 상태 유지 (Stateful): 서버에 세션 정보를 저장해야 합니다.
- 보안: CSRF 공격에 취약하지만, 쿠키 옵션(HttpOnly, Secure)으로 보완 가능합니다.
- 확장성: 서버 확장 시 세션 저장소를 공유해야 합니다.
적합한 상황 예시
- 소규모 애플리케이션: 단일 서버 환경에서 간편하게 구현 가능합니다.
- 실시간 로그아웃 필요 시: 세션 삭제로 즉시 접근을 차단할 수 있습니다.
- (예: 금융 서비스에서 사용자 활동을 즉시 중단해야 할 때)
- 높은 보안 요구사항: 서버 측에서 세션을 직접 제어할 수 있습니다.
2. 토큰 기반 인증 (Token-Based Authentication)
동작 방식
- 사용자 로그인 시 서버는 **토큰(주로 JWT)**을 발급합니다.
- 클라이언트는 토큰을 저장(로컬 스토리지, 쿠키)하고, 요청 시 헤더(Authorization: Bearer <토큰>)에 포함시킵니다.
- 서버는 토큰 서명을 검증해 인증합니다.
특징
- 무상태 (Stateless): 서버에 토큰 정보를 저장하지 않습니다.
- 확장성: 서버 확장이 용이하며, 마이크로서비스 아키텍처에 적합합니다.
- 보안: 토큰 탈취 시 유효기간 내 악용 가능성 있음 (Refresh Token으로 보완).
적합한 상황 예시
- 분산 시스템: 여러 서버가 인증을 공유해야 할 때 (예: 클라우드 기반 서비스).
- 모바일/SPA 애플리케이션: 토큰을 로컬에 저장해 오프라인 작업에 유리합니다.
- (예: React/Angular 앱에서 API 호출 시)
- 타사 서비스 연동 (OAuth): 소셜 로그인(Google, Facebook)에 JWT를 주로 사용합니다.
3. 핵심 차이점 요약
구분 | 세션 기반 인증 | 토큰 기반 인증 |
상태 | 상태 유지 (서버에 세션 저장) | 무상태 (서버에 저장하지 않음) |
확장성 | 세션 저장소 공유 필요 | 서버 확장 용이 |
보안 취약점 | CSRF | XSS |
저장 위치 | 서버 측 세션 저장소 | 클라이언트 측 저장소 |
실시간 제어 | 즉시 세션 무효화 가능 | 토큰 만료 시까지 유효 |
4. 선택 가이드
- 세션 기반을 선택할 때:
- 사용자 활동을 실시간으로 제어해야 할 때 (예: 관리자 모니터링 시스템).
- 단일 서버 또는 신뢰할 수 있는 환경에서 작동할 때.
- 토큰 기반을 선택할 때:
- 서버를 수평 확장해야 할 때 (예: 대규모 이커머스 플랫폼).
- 클라이언트가 독립적으로 동작해야 할 때 (예: 모바일 앱).
결론
세션은 안정적인 제어와 보안이 중요할 때, 토큰은 확장성과 유연성이 필요할 때 적합합니다. 최근에는 보안 강화를 위해 두 방식을 혼용하거나, 짧은 유효기간의 액세스 토큰 + 긴 유효기간의 리프레시 토큰을 조합하는 추세입니다.
반응형