개발이야기/웹개발

[코드잇 스프린트 풀스택 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. 선택 가이드

  • 세션 기반을 선택할 때:
    • 사용자 활동을 실시간으로 제어해야 할 때 (예: 관리자 모니터링 시스템).
    • 단일 서버 또는 신뢰할 수 있는 환경에서 작동할 때.
  • 토큰 기반을 선택할 때:
    • 서버를 수평 확장해야 할 때 (예: 대규모 이커머스 플랫폼).
    • 클라이언트가 독립적으로 동작해야 할 때 (예: 모바일 앱).

 

결론

세션은 안정적인 제어와 보안이 중요할 때, 토큰은 확장성과 유연성이 필요할 때 적합합니다. 최근에는 보안 강화를 위해 두 방식을 혼용하거나, 짧은 유효기간의 액세스 토큰 + 긴 유효기간의 리프레시 토큰을 조합하는 추세입니다.

반응형