🔐 JWT 인증이란?
- JWT는
Base64로 인코딩된 문자열로,
인증에 필요한 정보를 안전하게 주고받기 위해 사용됨
❗ Payload는 암호화되지 않음 → 민감한 정보는 절대 담지 말 것!
✅ 목적은 정보 보호가 아니라 위조 방지(Signature 검증)
🔁 JWT 인증 과정

클라이언트가 로그인 요청
로그인 성공 → 서버는 Header + Payload + SecretKey로 Signature 생성
이후 요청 시 Authorization: Bearer {JWT} 형태로 전송
서버는 JWT의 Signature, 만료 여부 확인 후 인증 완료
🔍 JWT의 유효성 검사

A 사용자의 JWT를 B가 탈취
B가 JWT의 Payload를 임의로 수정
B가 서버에 요청 시도
서버는 Signature를 자체적으로 생성해 비교
→ 불일치 감지 → 위조 차단
💡 Signature는 서버가 가진 SecretKey로만 생성 가능하므로 조작 불가
🛡️ JWT 장단점
✅ JWT의 장점
| 항목 | 설명 |
|---|---|
| 🔒 변조 방지 | Signature를 통해 위조 여부를 서버에서 검증할 수 있음 |
| 🚫 서버 무상태 (Stateless) | 인증 상태를 서버에 저장하지 않음 → 메모리 사용 X |
| 🚀 성능 우수 | 매 요청마다 DB 조회 없이 유저 정보를 빠르게 판별 가능 |
| 🌐 다양한 환경 지원 | 웹, 모바일 앱, API 등 다양한 플랫폼에서 사용 가능 |
| ⚖️ 확장성 우수 | 서버 간 세션 공유 없이도 인증 유지 가능 → Scale-Out에 적합 |
| 📦 자체 정보 포함 | 토큰 자체에 인증 정보(Claim)를 담고 있어 별도 저장소 불필요 |
⚠️ JWT의 단점
| 항목 | 설명 |
|---|---|
| 🔓 Payload 노출 | Base64 인코딩만 되어 있어 누구나 디코딩 가능→ 민감 정보 저장 불가 |
| 🧠 탈취 시 대응 어려움 | 클라이언트가 토큰을 보관하므로 탈취되면 재발급 외 대처 어려움 |
| 📏 토큰 크기 큼 | Header + Payload + Signature로 인해 트래픽 증가 가능성 |
| ⏳ 만료 시 UX 저하 | Access Token 만료 후 자주 로그인을 요구하면 사용자 경험 악화 |
| 🔁 취소 불가 | 발급된 JWT는 중간에 강제로 폐기하기 어렵고, DB에서 관리도 어려움 (→ Refresh Token 필요) |
🔐 Access Token, Refresh Token
- JWT는 탈취에 취약하므로 만료 시간을 설정해야 하며,
이로 인해 생기는 UX 문제를 해결하기 위해 두 가지 Token을 사용함
🎯 Token의 유형
| Token 종류 | 설명 |
|---|---|
| ✅ Access Token | 사용자 인증 후 발급되는 짧은 생명 주기의 인증용 토큰 |
| ♻️ Refresh Token | Access Token이 만료되었을 때 재발급 요청용 토큰 보통 DB에 저장됨 |
🔁 Access/Refresh 인증 흐름

로그인 요청 → Access Token + Refresh Token 발급
Access Token을 클라이언트에 저장 (보통 헤더에 담아 요청)
Access Token 만료 시 → Refresh Token으로 재발급 요청
서버에서 Access Token 재발급 → 클라이언트는 교체 후 사용
💡 Refresh Token 사용 이유
Access Token만 사용하면 보안 위험:
Refresh Token 사용 시:
Access Token을 자주 교체해도 사용자는 로그인 유지Refresh Token은 DB에 저장되므로 블랙리스트 관리 가능🧠 요약 정리
| 항목 | 요약 |
|---|---|
| 🔑 JWT | Header + Payload + Signature로 구성된 인증 토큰 |
| 🔍 인증 방식 | 서버가 Signature와 만료 시간으로 유효성 검증 |
| ⚠️ 주의 | Payload는 암호화되지 않음 → 민감 정보 저장 금지 |
| ✅ 장점 | 서버 무상태 유지, 빠른 인증, 확장성 우수 |
| ❗ 단점 | 탈취 시 위험, 크기 큼, 재발급 필요 |
| ♻️ Access/Refresh | UX와 보안성을 동시에 잡기 위한 토큰 이중화 구조 |
📺 추천 영상
→ JWT 대충 쓰면 님들 코딩인생 끝남