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

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

 

결론

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

반응형

'개발이야기 > 웹개발' 카테고리의 다른 글

[코드잇 스프린트 풀스택 4기] RESTful API의 개념과 주요 제약 조건  (0) 2025.03.30
[코드잇 스프린트 풀스택 4기] React 애플리케이션에서 JWT를 사용하여 인증 시스템 구현하기  (0) 2025.03.30
[코드잇 스프린트 풀스택 4기] Next.js를 사용하는 이유  (0) 2025.01.20
[코드잇 스프린트 풀스택 4기] 웹 페이지 랜더링 방식 CSR, SSR, SSG  (1) 2025.01.20
[코드잇 스프린트 풀스택 4기] 관계형 데이터 베이스  (0) 2024.12.10
'개발이야기/웹개발' 카테고리의 다른 글
  • [코드잇 스프린트 풀스택 4기] RESTful API의 개념과 주요 제약 조건
  • [코드잇 스프린트 풀스택 4기] React 애플리케이션에서 JWT를 사용하여 인증 시스템 구현하기
  • [코드잇 스프린트 풀스택 4기] Next.js를 사용하는 이유
  • [코드잇 스프린트 풀스택 4기] 웹 페이지 랜더링 방식 CSR, SSR, SSG
스탠다드
스탠다드
생각이 아니라 직접 경험한 것들이 나의 말과 글이 될 수 있기를.
  • 스탠다드
    지극히 상식적인 삶
    스탠다드
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 육아 관련 이야기 (0)
      • 마케팅/광고 이야기 (1)
      • 스마트 따라잡기 (1)
      • PC.모바일 관련 팁 (5)
      • 스탠다드한 일상 (1)
      • 삶에 대한 고민 (3)
      • 개발이야기 (32)
        • Flutter공부 (1)
        • 웹개발 (31)
  • 블로그 메뉴

    • BLOG
    • TAG
    • GUESTBOOK
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    전원강제종료
    FLUTTER
    태블릿pc입력판
    전원강제재부팅
    다운로드대기중
    아이폰6S
    매직키보드
    NextJS
    웹클리퍼
    web clipping
    리액트
    풀스택
    web clipper
    gradleexception
    Firebase
    눈치보게 하는 사람
    시멘틱태그
    코드잇
    JWT
    스프린트
    스마트키보드
    tablet pc 입력판
    유저인증
    한영전환
    build.gradle
    액정먹통
    React
    웹클리핑
    한결같은 사람
    공익신고
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
스탠다드
[코드잇 스프린트 풀스택 4기] 세션 기반 인증과 토큰 기반 인증
상단으로

티스토리툴바