
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가 있기 때문에 토큰이 중간에 변조되었는지 확인할 수 있습니다.
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 Token | Refresh 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 requests | Header에 JWT 전달 |
| Postman | JWT API 테스트 |
| HTTP Header | Authorization Header 핵심 |
특히 이전 글에서 다룬 HTTP Header 중 가장 중요한 예시가 바로 JWT입니다.
Authorization: Bearer TOKEN
JWT Generator 소개
JWT 구조를 직접 만들어보고 싶다면 아래 도구를 활용해볼 수 있습니다.
Header, Payload, Secret 값을 입력해 HS256 방식의 JWT 토큰을 생성하고 구조를 확인할 수 있는 무료 개발자 유틸리티입니다.
유틸리티 바로가기테스트용 JWT 생성
Payload 구조 확인
Header / Signature 이해
JWT 구조를 처음 이해할 때 직접 생성해보면 훨씬 쉽습니다.
JWT Decoder 소개
JWT 내용을 분석하고 싶다면 아래 도구가 유용합니다.
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 환경에서 사용하는 것이 좋습니다.
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 요청 → 토큰 검증 흐름만 이해하면 구조가 금방 보이기 시작합니다.
첫 댓글을 남겨보세요.