이런 형태로 토근을 주고받는 것의 이점은 무엇이고, 왜 최근 JWT의 사용이 늘었을까?
서버의 확장성이 높고, 특정 DB, 서버에 의존하지 않아도 되는 장점이 있음.

헤더는 토큰 유형과 서명 알고리즘 두 가지 정보를 지님.
{
"alg": "HS256",
"typ": "JWT"
}
// alg - 서명 알고리즘(SHA 256, RSA 등)
// typ - 토큰 타입
페이로드는 토큰에서 사용할 데이터(Claim)를 구성함.
Claim: key-value 형태의 한 쌍의 정보를 말함.
서버와 클라이언트 간 실제 사용될 데이터.
{
"sub": "1234567890", // subject; 제목
"name": "John Doe", // name; 사용자 이름
"iat": 1710150400, // issued At; 발행시간
"exp": 1710154000 // expiration; 만료 시간
}
서명은 토큰의 무결성과 인증은 보장하는 암호화된 서명임.
헤더에서 정의한 알고리즘(alg)를 사용.
이는 인코딩된 헤더, 페이로드, 비밀키를 결합하여 생성됨.
이후 추가적으로 토큰이 만료됐다면, refresh token을 이용해 새로운 토큰을 발급.
위와 같은 방식을 통해 각 개별 서버에서는 따로 세션이나 쿠키처럼 서버 자체에서 값을 불러오는 대신,
매번 요청이 오는 토큰을 파싱해서, 토큰 내부 정보만 사용하면 된다는 장점이 생김.
따라서 이중화된 서버에서도 같은 토큰을 쓴다면, 같은 유저에게 온 요청임을 알 수 있음.
→ 확장성이 높음.
| 항목 | 세션/쿠키 기반 인증 | JWT 인증 |
|---|---|---|
| 상태 관리 | 상태 유지 (서버가 세션 데이터를 관리) | 무상태 (서버 측 세션 데이터 없음) |
| 확장성 | 분산 환경에서 확장성 낮음 | 매우 높은 확장성 |
| 폐기 용이성 | 용이(서버에서 세션 무효화 가능) | 어려움(토큰 블랙리스트 필요) |
| 보안 | 안전하지만 특정 공격에 취약 | 적절한 구현 시 안전 |
| 저장 위치 | 서버 측 세션 데이터 저장 | 클라이언트 측 토큰 저장 |
| 크로스 도메인 지원 | 동일 출처 또는 CORS 설정에 제한됨 | JWT를 통한 크로스 도메인 지원 |
---텍스트
🌐 JWT 토큰 인증 이란? (쿠키 vs 세션 vs 토큰)
Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (2) - JWT란?