JWT

업데이트 2026.06.18 4분 읽기
목차 보기

개요

JWT(JSON Web Token)는 사용자의 인증 정보와 필요한 데이터를 JSON 형태로 담아 안전하게 전달하기 위한 토큰 기반 인증 방식이다.

로그인에 성공하면 서버는 JWT를 발급하고, 클라이언트는 이후 API 요청 시 JWT를 함께 전송하여 인증을 수행한다.

REST API, 모바일 앱, SPA, SaaS 서비스 등에서 가장 널리 사용되는 인증 방식 중 하나이다.


JWT 구조

Header

.

Payload

.

Signature

예시

eyJhbGciOiJIUzI1NiIs...

eyJ1c2VySWQiOjE...

abc123xyz...

세 부분이 .으로 연결된 문자열 형태이다.


동작 과정

사용자 로그인

↓

서버 인증

↓

JWT 발급

↓

클라이언트 저장

↓

API 요청

↓

Authorization Header

↓

JWT 검증

↓

데이터 반환

Header

토큰의 암호화 알고리즘과 타입 정보를 저장한다.

예시

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

사용자 정보(Claims)를 저장한다.

예시

{
  "userId": 1,
  "name": "구름",
  "role": "admin"
}

민감한 정보(비밀번호 등)는 저장하지 않는 것이 원칙이다.


Signature

Header와 Payload를 비밀키로 서명한 값이다.

HMACSHA256(

Header +

Payload +

SecretKey

)

위조 여부를 검증하는 역할을 한다.


JWT 전송 방식

일반적으로 HTTP Header를 사용한다.

Authorization:

Bearer eyJhbGciOi...

Bearer 뒤에 토큰을 포함하여 전송한다.


로그인 예시

요청

POST /api/login

응답

{
  "accessToken": "eyJhbGciOi...",
  "refreshToken": "eyJhbGc..."
}

Access Token

  • API 인증용
  • 유효시간이 짧음
  • 만료 시 재발급 필요

예시

30분

1시간

2시간

Refresh Token

  • Access Token 재발급용
  • 유효기간이 김

예시

7일

30일

90일

Claims

JWT에 저장되는 정보이다.

대표 Claim

Claim설명
sub사용자 식별자
iss발급자
aud대상
exp만료 시간
iat발급 시간
nbf사용 가능 시간
jti토큰 ID

JWT 인증 구조

Client

↓

Login

↓

JWT 발급

↓

API 요청

↓

Authorization Header

↓

JWT 검증

↓

Response

Session과 비교

JWTSession
서버 저장 없음서버 메모리 저장
StatelessStateful
확장성 높음서버 부담 증가
모바일 친화적웹 중심
API에 적합전통 웹에 적합

JWT 장점

  • Stateless 구조
  • 서버 부하 감소
  • 모바일 앱에 적합
  • REST API와 잘 어울림
  • 서버 확장이 쉬움
  • 다양한 플랫폼에서 사용 가능

JWT 단점

  • 발급 후 강제 폐기가 어려움
  • 토큰 탈취 시 위험
  • Payload가 Base64 인코딩일 뿐 암호화는 아님
  • 토큰 크기가 Session ID보다 큼

보안 고려사항

권장 사항

  • HTTPS 사용
  • 짧은 Access Token 만료 시간
  • Refresh Token 별도 관리
  • HttpOnly Cookie 사용 고려
  • 민감 정보 저장 금지
  • 강력한 Secret Key 사용
  • 토큰 재사용 방지
  • Refresh Token Rotation 적용

JWT 저장 위치

LocalStorage

장점

  • 구현이 쉬움

단점

  • XSS 공격에 취약

HttpOnly Cookie

장점

  • JavaScript 접근 불가
  • XSS 방어에 유리

단점

  • CSRF 대응 필요

실무에서는 HttpOnly Cookie 사용을 권장하는 경우가 많다.


JWT 라이브러리

Node.js

  • jsonwebtoken

PHP

  • firebase/php-jwt

Java

  • jjwt
  • java-jwt

Python

  • PyJWT

C#

  • System.IdentityModel.Tokens.Jwt

주요 활용 분야

  • 로그인 인증
  • REST API
  • 모바일 앱
  • SPA
  • SaaS
  • ERP
  • OAuth 인증
  • SSO

실무 메모

실무에서는 다음과 같은 방식이 권장된다.

  • Access Token과 Refresh Token 분리
  • Access Token은 15~60분 정도의 짧은 만료 시간 설정
  • Refresh Token은 DB에 저장하여 관리
  • HTTPS 환경에서만 전송
  • JWT Payload에는 최소 정보만 저장
  • 로그아웃 시 Refresh Token 폐기
  • 토큰 서명 알고리즘은 HS256 또는 RS256 사용
  • 토큰 갱신 API 별도 제공
  • 토큰 만료 예외 처리 구현
  • API Gateway에서 JWT 검증 수행 가능

JWT와 함께 사용하는 기술


대표 활용 사례

  • React 로그인
  • Vue 관리자 페이지
  • Flutter 앱 로그인
  • ERP 인증
  • SaaS 사용자 인증
  • OpenAI API Gateway
  • 모바일 앱 인증
  • 관리자 시스템 로그인

관련 문서


출처

  • JWT 공식 홈페이지 (jwt.io)
  • RFC 7519 - JSON Web Token
  • OWASP JWT Security Cheat Sheet

이 글이 도움이 되었나요?