세션 기반 인증 vs 토큰 기반 인증

Updated: 2025-04-17

weekly
cover image

세션 기반 인증 vs 토큰 기반 인증

인증이란?

인증(Authentication)은 사용자가 자신이 주장하는 사람이 맞는지 확인하는 과정입니다. 웹 애플리케이션에서는 주로 사용자명과 비밀번호를 통해 이루어지며, 인증이 성공하면 해당 사용자는 시스템에 접근할 수 있는 권한을 얻게 됩니다.

1. 세션 기반 인증

세션 기반 인증은 서버 측에서 사용자의 인증 상태를 관리합니다.

1.1 작동 원리

  1. 사용자가 로그인 정보(ID/PW)를 서버에 전송합니다.
  2. 서버는 정보를 검증한 후, 고유한 세션 ID를 생성합니다.
  3. 이 세션 ID는 서버의 메모리나 데이터베이스에 저장됩니다.
  4. 서버는 세션 ID를 쿠키에 담아 클라이언트에게 전송합니다.
  5. 이후 클라이언트의 모든 요청에는 이 쿠키가 자동으로 포함됩니다.
  6. 서버는 쿠키의 세션 ID를 확인하여 사용자를 식별합니다.

1.2 장점

  • 보안성: 실제 인증 정보는 서버에만 저장되므로 상대적으로 안전합니다.
  • 제어 용이성: 서버에서 세션을 쉽게 무효화할 수 있어 로그아웃 처리가 간단합니다.
  • 구현 편의성: 대부분의 웹 프레임워크가 세션 관리 기능을 내장하고 있습니다.

1.3 단점

  • 서버 부하: 사용자가 많아질수록 서버 메모리 부담이 커집니다.
  • 확장성 문제: 여러 서버를 사용하는 경우, 세션 정보를 공유해야 하는 복잡성이 있습니다.
  • CSRF 취약성: Cross-Site Request Forgery 공격에 취약할 수 있습니다.

1.4 사용 예시

  • 단일 도메인 웹사이트: 전통적인 서버 렌더링 웹사이트
  • 높은 보안이 필요한 경우: 금융, 의료 등 민감한 데이터 처리
  • 사용자 활동 세밀한 제어가 필요한 경우: 사용자 행동 추적이 중요한 서비스
  • 서버 규모가 작은 경우: 소규모 애플리케이션에서는 세션 관리가 간단

2. 토큰 기반 인증

토큰 기반 인증은 클라이언트 측에서 인증 상태를 관리하는 방식으로, 특히 JWT(JSON Web Token)가 널리 사용됩니다.

2.1 작동 원리

  1. 사용자가 로그인 정보를 서버에 전송합니다.
  2. 서버는 정보를 검증한 후, 서명된 토큰을 생성합니다.
  3. 이 토큰은 클라이언트에게 반환되며, 클라이언트는 이를 저장합니다(로컬 스토리지, 쿠키 등).
  4. 이후 요청 시 클라이언트는 토큰을 HTTP 헤더(주로 Authorization)에 포함하여 전송합니다.
  5. 서버는 토큰의 유효성을 검증하여 사용자를 식별합니다.

2.2 JWT 구조

JWT는 세 부분으로 구성됩니다:

  • 헤더(Header): 토큰 유형과 사용된 알고리즘 정보
  • 페이로드(Payload): 사용자 ID, 역할, 만료 시간 등의 클레임(claim) 정보
  • 서명(Signature): 토큰의 무결성을 보장하기 위한 서명

2.3 장점

  • 무상태(Stateless): 서버가 상태를 저장하지 않아 확장성이 좋습니다.
  • 범용성: 다양한 도메인과 플랫폼 간에 사용할 수 있습니다.
  • 모바일 친화적: 쿠키 관련 문제 없이 모바일 앱에서도 쉽게 사용 가능합니다.
  • 자원 효율성: 서버 메모리를 사용하지 않습니다.

2.4 단점

  • 토큰 크기: 세션 ID보다 크기가 커서 네트워크 오버헤드가 발생할 수 있습니다.
  • 보안 관리: 토큰이 탈취되면 만료 전까지 대응이 어렵습니다.
  • 저장소 노출: 클라이언트 측 저장소가 XSS 공격에 취약할 수 있습니다.

2.5 사용 예시

  • 분산 시스템: 마이크로서비스 아키텍처
  • 다양한 클라이언트: 웹, 모바일 앱, IoT 디바이스 등 다양한 플랫폼 지원
  • 서버리스 아키텍처: AWS Lambda 같은 서버리스 환경
  • SPA(Single Page Application): React, Vue, Angular 등의 프레임워크 기반 앱
  • 제3자 API 제공: 외부에 API를 제공하는 서비스

문의 사항이 있으시면 언제든지 개인 메일로 연락 주시기 바랍니다.

메일 보내기

© 2024. kimyoungho all rights reserved.