본문 바로가기

Spring Boot/Security 토큰 기반 인증,인가

토큰 기반 인증의 개념, 필요성 : 토큰 기반 인증의 개념과 특징

 - 토큰 기반 인증(Token-Based Authentication) 의 개념

 - Stateless 아키텍처의 의미, 필요성

 - 토큰의 자체 포함성(self-contained) 개념

 - 서버 부하 분산과 확장성 측면에서 토큰 기반 인증의 장점

 - 세션 기반 인증과 비교하여 토큰 기반 인증의 특징 구분하기


토큰 기반 인증 개요

토큰 기반 인증은 사용자가 로그인에 성공하면
서버가 세션을 저장하지 않고, 대신 토큰(Token)을 발급하여

클라이언트가 이를 보관하고 요청마다 서버에 전달하는 방식이다

토큰 기반 인증, 서버가 클라이언트(브라우저, 앱)에 토큰을 발급하고 이후 요청시 Authorization 헤더에 토큰을 포함시킨다

 

 

이 방식은 서버가 사용자의 상태(Session)를 저장하지 않으므로 Stateless 아키텍처를 따른다


Stateless 아키텍처의 이해

토큰 기반 인증은 Stateless(무상태성) 아키텍처의 핵심이다

서버는 클라이언트의 인증 상태를 저장하지 않고, 오직 요청에 담긴 토큰만으로 사용자를 식별한다

 

1. Stateless의 특징

특징 설명
서버 상태 저장 없음(Stateless)
인증 정보 위치 클라이언트가 보관한 토큰
요청 처리 각 요청마다 토큰을 검증하여 처리함

 

 

2. 장점

  • 서버 확장시 세션 공유 문제 해결(서버간 세션 동기화가 불필요, 클라이언트마다 토큰을 가지고 있기 때문)
  • 부하 분산(Load Balancing) 용이
  • 서버 리소스 절약(세션 저장 공간이 불필요함)

 

예 : 사용자가 서버 A에서 로그인 후 서버 B로 요청을 보내더라도, 토큰만 유효하다면 정상적으로 인증된다

사용자의 클라이언트가 가진 토큰만 유효한 상태라면, 어떤 서버에 보내도 정상적으로 인증되게끔 로직을 구성한다

 

 

항목 세션 기반 인증 토큰 기반 인증
서버 상태 저장 세션 저장소가 필요 저장하지 않음(Stateless)
확장성 세션 공유가 필요함 서버간 동기화가 불필요함
부하 분산 Sticky Session 필요 자유로운 부하 분산 가능

 


토큰의 자체 포함성(Self-Contained)

토큰은 보통 JWT(Json Web Token) 형태로 발급된다

JWT는 자체적으로 사용자의 정보와 권한 등을 포함하고 있다

 

1. 구조

header.payload.signature

 

  • Header : 토큰 타입(JWT)과 서명 알고리즘 정보가 들어있는곳
  • Payload : 사용자의 정보(userId, role 등)와 만료시간(exp)이 들어있는곳
  • Signature : 서버 비밀키를 이용한 서명 값(위조 방지)

 

예시

{
  "alg": "HS256",
  "typ": "JWT"
}. // header 끝
{
  "sub": "alice",
  "role": "USER",
  "exp": 1700000000
}. // payload 끝
"signatureData" // signature

 

 

 

2. 자체 포함성의 의미

  • 토큰만 있으면, 서버는 추가 조회 없이 사용자의 정보를 확인할 수 있다
  • 세션 저장소를 따로 운영할 필요가 없다

 

  • 토큰에는 중요한 개인정보를 직접 담지 않고, 최소한의 정보만 포함해야한다
  • 민감한 데이터는 DB 조회를 통해 확인하고, 토큰에는 ID / 권한 / 만료시간 정도만 포함하는게 일반적이다

 

항목 설명
Header 토큰 메타 정보(타입, 알고리즘 등)
Payload 사용자 정보, 권한, 만료시간
Signature 위조 방지를 위한 서버 서명 (서버 전용 보안)

 


서버 부하 분산과 확장성 향상

토큰 기반 인증은 분산 환경에서 특히 강력한 장점을 가진다

 

1. 서버 확장성

  • 서버는 토큰만 검증하면 되므로, 사용자의 수가 늘어나도 세션 저장소의 부담이 없다
  • 새로운 서버를 증설하더라도 세션 동기화 과정이 필요하지 않음

 

2. 부하 분산(로드 밸런서)

  • 모든 서버가 동일한 방식으로 토큰 검증을 수행할 수 있다
  • 특정 서버에 사용자를 고정시키는 Sticky Session 이 필요하지 않다

클라이언트가 보내는 토큰만 검증하면 되므로 분산 처리 환경에서 토큰 기반 인증은 매우 효율적이다

 

모든 서버가 독립적으로 토큰 검증을 처리할 수 있어서, 시스템 확장성이 크게 향상된다

 

 

  • 토큰 검증을 위한 키 관리가 중요하다(예 : 대칭키, 공개키 / 개인키)
  • 만료 시간(exp)을 반드시 설정하여 보안 사고를 예방해야함(탈취 예방)