JWT
ㅡ> 인증 + 권한 부여 용도로 최적화된 토큰
ㅡ> 즉, JWT는 "내가 누구이고, 뭘 할 수 있는지"를 증명하는 디지털 신분증 같은 역할
✅ [WHY] 왜 JWT를 쓰는가?
■ 서버가 상태를 기억하지 않아도 되기 때문
ㅡ> JWT는 클라이언트가 상태(state)를 들고 다니는 구조. 세션 저장소가 필요 없음 ▶ 서버 확장성(스케일링)에 유리
■ API 시대에 적합하기 때문
ㅡ> 모바일, 웹, 서버 등 다양한 클라이언트가 하나의 API 서버에 요청할 때, 토큰 방식이 더 편리함
ㅡ> REST API도 stateless로 각 요청이 독립적이어야 함
■ Stateless 하게 인증 처리 가능
ㅡ> 매번 DB에서 사용자 세션을 확인할 필요 없이, 토큰 안에 필요한 정보가 담겨 있음
✅ WHAT: JWT란 무엇인가?
- JWT는 Header, Payload, Signature의 세 부분으로 구성된 문자열
- 예: xxxxx.yyyyy.zzzzz (각각 Base64로 인코딩됨)
✅ HOW: 어떻게 작동하는가?
- 로그인 시 서버가 JWT 발급
→ 유저가 ID/PW 로그인 → 서버가 유저 정보로 JWT 생성해서 반환 - 클라이언트가 JWT 저장
→ 주로 로컬스토리지 또는 쿠키에 저장 - 이후 요청 시 JWT를 함께 보냄
→ 예: Authorization: Bearer <JWT> - 서버는 JWT를 검증
→ Signature와 만료 시간 확인 → 유효하면 사용자 인증 성공
✅ 추가 포인트
- 🔐 보안 이슈: 민감한 정보는 Payload에 넣지 말 것 (암호화 안 됨, 그냥 인코딩임)
- ⏰ 만료 시간 설정 중요 (보안 & 자동 로그아웃 처리)
- 🔁 Refresh Token과 함께 사용해 재로그인 없이 토큰 갱신 가능