JWT 토큰과 로그인 인증 구조
JWT 토큰과 로그인 인증 구조

JWT 토큰이란? 로그인 인증 구조 쉽게 이해하기

웹 개발이나 API를 공부하다 보면 반드시 만나게 되는 단어가 있습니다. 바로 JWT 토큰 (JSON Web Token) 입니다.

처음에는 이런 생각이 들 수 있습니다.
  • JWT 토큰이란 무엇일까?
  • 로그인할 때 왜 JWT를 사용할까?
  • Access Token, Refresh Token은 또 뭘까?
  • Session 방식과는 뭐가 다를까?

처음 보면 어렵게 느껴질 수 있지만 핵심은 생각보다 단순합니다. "JWT 토큰은 로그인한 사용자를 인증하기 위한 디지털 신분증입니다." 즉, 서버가 “이 사용자는 인증된 사용자다”라고 판단할 수 있게 해주는 인증 정보라고 보면 됩니다.

요즘 대부분의 웹 서비스, 모바일 앱, REST API, SaaS 서비스에서 JWT 기반 인증을 많이 사용합니다.

이번 글에서는 JWT 토큰이란 무엇인지, JWT 구조, 로그인 인증 흐름, Access Token과 Refresh Token 차이, Python 예제, 자주 발생하는 오류 해결법까지 초보자 기준으로 쉽게 정리해보겠습니다.


JWT 토큰이란?

JWT는 JSON Web Token의 줄임말입니다. 쉽게 말하면, JSON 형식의 데이터를 암호화(서명)하여 안전하게 전달하는 토큰 입니다. 로그인 과정에서 많이 사용됩니다. 예를 들어 사용자가 로그인하면 서버는 JWT 토큰을 발급합니다.

이후 사용자는 API 요청 시 이 토큰을 함께 보냅니다.

Authorization: Bearer JWT_TOKEN

서버는 JWT 토큰을 검증하고 사용자가 정상 로그인한 상태인지 판단합니다.

즉, JWT 토큰은 “로그인 인증용 신분증” 역할을 합니다.


JWT 토큰은 왜 필요할까?

예전에는 로그인 상태를 서버 Session에 저장하는 방식이 많았습니다. 하지만 서비스 규모가 커질수록 Session 관리가 복잡해질 수 있습니다.

JWT 방식은 다릅니다.

  • 서버가 토큰 발급

  • 클라이언트가 토큰 보관

  • 요청 시 토큰 전달

  • 서버가 토큰 검증

즉, 서버가 로그인 상태를 직접 저장하지 않아도 됩니다.

JWT를 사용하는 이유는 다음과 같습니다.

장점설명
확장성서버 여러 대 운영에 유리
REST API 친화적API 인증에 적합
Stateless서버 세션 저장 최소화
속도인증 처리 효율적

특히 REST API 기반 서비스에서 JWT 토큰은 매우 많이 사용됩니다.


JWT 구조 이해하기

JWT 토큰은 3개 부분으로 구성됩니다.

HEADER.PAYLOAD.SIGNATURE

예시:

xxxxx.yyyyy.zzzzz

1. Header

토큰 타입과 암호화 알고리즘 정보가 들어갑니다.

예:

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

2. Payload

실제 데이터가 들어갑니다.

예:

{
  "user_id": 123,
  "username": "wing",
  "exp": 1710000000
}

주로 들어가는 정보:

  • 사용자 ID

  • 이메일

  • 권한

  • 만료 시간


3. Signature

토큰 위변조 방지를 위한 서명입니다. 서버의 secret key로 생성됩니다. Signature가 있기 때문에 토큰이 중간에 변조되었는지 확인할 수 있습니다.

TIP

Payload는 Base64로 인코딩될 뿐 완전 암호화는 아닙니다. 민감한 비밀번호 같은 정보는 넣으면 안 됩니다.


JWT 로그인 인증 구조

JWT 토큰 기반 로그인 흐름은 보통 아래와 같습니다.


1. 사용자가 로그인 요청

{
  "id": "wing",
  "password": "1234"
}

2. 서버가 인증 확인

아이디/비밀번호 검증


3. JWT 토큰 발급

서버가 Access Token 또는 Refresh Token 생성


4. 클라이언트 저장

  • LocalStorage

  • SessionStorage

  • Cookie


5. API 요청 시 토큰 포함

Authorization: Bearer JWT_TOKEN

6. 서버가 JWT 검증

정상 토큰이면 API 접근 허용


Access Token vs Refresh Token

초보자가 가장 헷갈리는 개념입니다.

구분Access TokenRefresh Token
역할API 접근 인증Access Token 재발급
만료 시간짧음
사용 빈도자주적음
보안 중요도높음매우 높음

예를 들어:

  • Access Token → 30분

  • Refresh Token → 14일

Access Token이 만료되면 Refresh Token으로 새 토큰을 발급받습니다. 이 구조 덕분에 보안과 편의성을 동시에 챙길 수 있습니다.


JWT 사용 방법 Step-by-Step

JWT 기반 API 인증 흐름은 보통 이렇게 진행됩니다.


1. 로그인 API 호출

예:

POST /api/login

2. JWT 토큰 발급 받기

응답 예시:

{
  "access_token": "xxxx",
  "refresh_token": "yyyy"
}

3. 토큰 저장

클라이언트 저장소에 보관


4. API 호출 시 Header 추가

Authorization: Bearer ACCESS_TOKEN

5. 만료 시 Refresh Token 사용

새 Access Token 발급


Python JWT 예제

Python에서는 JWT 라이브러리를 사용할 수 있습니다.

설치:

pip install pyjwt

토큰 생성:

import jwt
import datetime

payload = {
    "user_id": 123,
    "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}

token = jwt.encode(payload, "SECRET_KEY", algorithm="HS256")

print(token)

토큰 검증:

decoded = jwt.decode(token, "SECRET_KEY", algorithms=["HS256"])
print(decoded)

API 요청 시 Header 예시:

headers = {
    "Authorization": f"Bearer {token}"
}

기존 시리즈와 연결

JWT 토큰은 기존에 작성된 다른 글과 모두 연결됩니다.

기존 글연결 포인트
API란?API 인증 방식
REST API토큰 기반 인증
Python requestsHeader에 JWT 전달
PostmanJWT API 테스트
HTTP HeaderAuthorization Header 핵심

특히 이전 글에서 다룬 HTTP Header 중 가장 중요한 예시가 바로 JWT입니다.

Authorization: Bearer TOKEN

JWT Generator 소개

JWT 구조를 직접 만들어보고 싶다면 아래 도구를 활용해볼 수 있습니다.

보안 개발 도구 JWT 생성기

Header, Payload, Secret 값을 입력해 HS256 방식의 JWT 토큰을 생성하고 구조를 확인할 수 있는 무료 개발자 유틸리티입니다.

유틸리티 바로가기
활용:
  • 테스트용 JWT 생성

  • Payload 구조 확인

  • Header / Signature 이해

JWT 구조를 처음 이해할 때 직접 생성해보면 훨씬 쉽습니다.


JWT Decoder 소개

JWT 내용을 분석하고 싶다면 아래 도구가 유용합니다.

보안 개발 도구 JWT 디코더

JWT 토큰의 Header와 Payload를 브라우저에서 바로 확인할 수 있는 무료 개발자 유틸리티입니다.

유틸리티 바로가기
활용 : 
  • JWT 디코딩

  • Payload 확인

  • 만료 시간 확인

  • Header 구조 분석

API 연동 중 JWT 토큰 문제를 디버깅할 때 특히 유용합니다.


자주 발생하는 오류

1. 401 Unauthorized

원인:
  • JWT 누락

  • Header 형식 오류

확인:

Authorization: Bearer TOKEN

2. Token Expired

원인:

  • Access Token 만료

해결:

  • Refresh Token으로 재발급



3. Invalid Signature

원인:

  • Secret Key 불일치

  • 토큰 변조


4. Malformed Token

원인:

  • JWT 구조 오류

정상 구조:

HEADER.PAYLOAD.SIGNATURE

실전 활용 팁

1. Payload에 민감정보 넣지 않기

비밀번호, 주민번호 같은 정보는 절대 금지.


2. Access Token 만료 짧게

보통 15~60분 추천.


3. Refresh Token 안전하게 보관

탈취되면 위험.


4. HTTPS 필수

JWT는 HTTPS 환경에서 사용하는 것이 좋습니다.

TIP
JWT 자체가 만능 보안 기술은 아닙니다. 보안은 저장 방식, 만료 시간, HTTPS 적용까지 함께 고려해야 합니다.

추천 대상

이 글은 이런 사람에게 추천합니다.
  • JWT 토큰이 궁금한 사람

  • 로그인 인증 구조를 배우는 사람

  • REST API 인증을 이해하고 싶은 사람

  • Python API 개발 입문자

  • Postman으로 JWT API 테스트 중인 사람

  • Access Token / Refresh Token 개념이 헷갈리는 사람


마무리

JWT 토큰은 현대 웹 서비스와 API 인증에서 가장 많이 사용되는 기술 중 하나입니다.

핵심 정리
  • JWT = 로그인 인증용 토큰

  • Header + Payload + Signature 구조

  • Authorization Header로 전달

  • Access Token / Refresh Token 구조

  • REST API 인증에 매우 적합

API와 인증 구조를 공부하고 있다면 JWT 토큰은 반드시 이해해야 하는 개념입니다.

처음에는 어렵게 느껴질 수 있지만, 로그인 → 토큰 발급 → API 요청 → 토큰 검증 흐름만 이해하면 구조가 금방 보이기 시작합니다.