JWT[1/3]: JWT 이해(이론)

2026. 6. 6. 17:14·🍃SpringBoot

1. JWT 이해

1.1 JWT란

  • JWT(Json Web Token)는 사용자 인증 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식으로 임의의 문자열로 구성
  • JWT는 서버가 사용자를 인증한 후 발급하며, 클라이언트는 이후 요청마다 JWT를 전달하여 자신의 신원을 증명
  • JWT는 RFC 7519 표준 준수
  • JWT 토큰은 Header.Payload.Signature으로 점(.)으로 세 개 영역을 구분
 

RFC 7519: JSON Web Token (JWT)

JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JS

datatracker.ietf.org

 

 

JSON Web Tokens - jwt.io

JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).

www.jwt.io

JWT 토큰 구조

Header

  • 토큰의 메타데이터를 저장
  • 일반적으로 대칭키 서명 방식(HS256)을 사용
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

  • 사용자 정보를 저장
  • 민감한 정보는 포함하지 않는 것을 권장
{
  "sub": "1",
  "role": "CUSTOMER",
  "type": "ACCESS"
}

Signature

  • 위조 방지를 위한 서명값
  • JWT는 암호화가 아니라 서명
  • Payload는 누구나 볼 수 있고, Signature는 위조 여부를 검증

1.2 Cookie, Session, JWT 비교

Cookie 인증

  • 클라이언트 저장소로, 브라우저가 데이터를 저장
  • 보안상 취약

Session 인증

  • 클라이언트 → JSESSIONID → 세션 저장소(서버)
  • 서버가 상태를 관리하는 Stateful 방식

JWT 인증

  • 클라이언트 → JWT → 서명 검증
  • 서버가 인증 상태를 저장하지 않는 Stateless 방식

Cookie, Session, JWT 비교

항목 Session JWT
서버 저장소 필요 불필요
확장성 낮음 높음
MSA 적합성 낮음 높음
로그아웃 쉬움 어려움
서버 부하 증가 감소

 

JWT의 가장 큰 문제

JWT는 Stateless 방식으로 발급된 토큰을 서버가 기억하지 않는다. 그래서 발급된 토큰을 강제로 폐기하기 어렵다.  이 문제가 Refresh Token 저장소, Access Token Blacklist 를 도입하게 된 가장 큰 이유이다.

1.3 JWT 생태계

각 서비스가 독립적으로 JWT를 검증할 수 있다.

  • SPA: React, Vue, Next.js
  • Mobile: Android, iOS
  • MSA: Gateway, User Service, Order Service, Payment Service

1) OAuth2.0

OAuth2.0 에서 가장 큰 오해는 바로 JWT가 아니다.

OAuth2는 인가(Authorization) 프로토콜로, OAuth2 결과물로 JWT가 사용될 수 있다.

 

2)  OpenID Connect

OpenID Connect는 Auth 2.0 프로토콜을 기반으로 구축된 인증(Authentication) 표준으로 싱글 사인온(SSO) 및 소셜 로그인을 안전하게 구현할 수 있도록 돕는 기술이다. 확실하게 짚고 넘어가야 할 것은 OAuth 2.0은 '권한 부여(Authorization)'를 위한 프로토콜이다."A 앱이 사용자의 Google 사진첩(데이터)에 접근할 수 있는 권한을 허락한다"는 개념이다.

 

OpenID Connect는 OAuth 2.0 위에 '인증(Authentication)' 계층을 추가한 것이다.

"이 사용자가 Google에서 인증된 본인이 맞는지 확인한다"는 개념이다.

 

3) Keycloak

인증 서버로, JWT를 발급한다. 대부분 개인 프로젝트에서는 직접 구현했지만, 실무에서는 Keycloak을 사용하는 경우가 많다.

 

4) HashiCorp Vault

JWT Secret 관리에 사용된다. 현재는 application.yml 기반이지만, 운영 환경에서는 Valut, AWS Secrets Manager, Kubernetes Secret 등으로 관리하는 것이 일반적이다.

'🍃SpringBoot' 카테고리의 다른 글

JWT[3/3]: JWT 실전 사용(Redis Lua Script, JWT BlackList, Rotation)  (0) 2026.06.07
JWT[2/3]: SpringBoot에서 JWT 인증 구조와 정책(Spring Security)  (1) 2026.06.07
ObjectMapper와 HttpMessageConverter: 스프링 직렬화 이해와 Security Filter에서 처리  (0) 2026.06.06
JUnit 5: JUnit 이론  (1) 2026.01.25
Spring Boot: Spring Data JPA With Auditing  (0) 2025.10.23
'🍃SpringBoot' 카테고리의 다른 글
  • JWT[3/3]: JWT 실전 사용(Redis Lua Script, JWT BlackList, Rotation)
  • JWT[2/3]: SpringBoot에서 JWT 인증 구조와 정책(Spring Security)
  • ObjectMapper와 HttpMessageConverter: 스프링 직렬화 이해와 Security Filter에서 처리
  • JUnit 5: JUnit 이론
limdaeil
limdaeil
limdaeil 님의 블로그 입니다.
  • limdaeil
    limdaeil
    limdaeil
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • 💭Retrospective (16)
      • 🐬MySQL (1)
      • 🐍Python (5)
      • 🍃SpringBoot (14) N
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • 🥕Fortinet (0)
      • Programmers (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이것이 스프링 AI다
    spring boot
    맛있는 디자인 피그마 With AI
    HttpMessageConverter
    서평단
    레이스 컨디션
    MySQL
    클린 아키텍처 with 파이썬
    한빛아카데미
    회고
    jwt
    mcp
    한빛미디어
    redis
    optimistic rock
    distributed lock
    gradle
    Concurrency
    Python
    나는리뷰어다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
limdaeil
JWT[1/3]: JWT 이해(이론)
상단으로

티스토리툴바