■ JWT란 무엇인가?
- JWT (Json Web Token) 은 사용자의 인증 정보를 JSON 형식으로 인코딩하여 토큰 형태로 주고받는 방식으로 주로 로그인 이후 인증이 필요한 API 요청 시, 사용자를 식별하기 위해 쓰인다.
- 즉,서버에 “누가 로그인했는가”를 저장하지 않고 토큰 자체에 인증 정보를 담아서 주고받는 구조.
■ Stateless란 무엇인가?
Stateless(무상태) 의 뜻은 “서버가 클라이언트의 상태를 기억하지 않는다”는 것
↔ 반대 개념: Stateful
기존의 세션 기반 인증은 Stateful형식으로 동작함.
[1] 로그인 요청 → 서버가 세션 생성
[2] 세션ID를 쿠키로 클라이언트에게 전달
[3] 이후 요청마다 서버는 세션ID로 사용자 정보 조회
→ 서버가 사용자 정보를 “세션 저장소”에 보관(stateful) 하기 때문에 서버가 많아질수록 세션 동기화 문제 발생.
JWT는 Stateless하기 때문에 로그인할 때 서버가 사용자 정보를 토큰 안에 인코딩하여 전달하고, 서버는 그걸 저장하지 않는다.
Stateless(토큰이 유효하다면, 그 안의 정보는 신뢰할 수 있다.)
[1] 로그인 요청 → 서버가 JWT 생성 후 클라이언트로 전달
[2] 클라이언트는 JWT를 저장(localStorage 등)
[3] 이후 API 요청 시 JWT를 Authorization 헤더에 담아 전송
[4] 서버는 JWT 서명을 검증만 하고, 별도의 세션 조회 없음
→ 서버는 상태를 저장하지 않음 (Stateless).
→ 대신 토큰 자체가 사용자의 상태 정보를 “가지고 다님”.
■ JWT의 구조
JWT는 3개의 파트로 구성돼 있고 온점(.)으로 구분
xxxxx.yyyyy.zzzzz
검증 방법
xxxxx header 어떤 알고리즘, 어떤 타입으로 서명할지 정의 yyyyy Payload 실제 데이터(사용자 정보, 만료시간 등) zzzzz Signature 변조 방지용 서명 (Header + Payload + Secret Key)
1. 서버는 클라이언트가 보낸 JWT를 받는다.
2. Header + Payload + Secret Key로 다시 Signature를 계산
3. 토큰의 서명과 비교해서 일치하면 “변조되지 않았다”고 판단
>>> 즉, 서버는 DB를 조회하지 않아도 인증 가능( Stateless 인증의 핵심)
■ Stateless의 장단점 및 보안
| 장점 | 설명 |
| 서버 확장(Scaling)에 유리 | 세션 저장소가 없으니 여러 서버가 상태를 공유할 필요가 없음 |
| 빠른 인증 | 매 요청 시 DB 조회 불필요 (토큰 서명 검증만 수행) |
| 플랫폼 간 호환성 | 웹, 모바일, API 모두 같은 토큰 사용 가능 |
| 간단한 구조 | 서버-클라이언트 간 HTTP 헤더로 통신만 하면 됨 |
| 단점 | 설명 |
| 토큰 무효화 어려움 | 이미 발급된 토큰은 만료 전까지 계속 유효함 |
| 토큰 탈취 위험 | 유출되면 누구나 사용할 수 있음 → HTTPS 필수 |
| Payload 노출 | Base64 인코딩이라 쉽게 디코딩 가능 |
해결책
1. 토큰에 짧은 만료시간(exp) 설정
2. Refresh Token을 통한 재발급 구조 도입
>>>결론
JWT는 인증 정보를 토큰 안에 직접 담아 전송하는 방식으로, 서버가 상태를 저장하지 않는 Stateless 인증 구조를 구현합니다.
서버는 토큰을 검증만 하기 때문에 확장성(Scaling)에 유리하고, RESTful한 인증 구조를 만들 수 있습니다.
다만, 토큰 탈취나 만료 관리가 필요하기 때문에 보안적으로는 만료시간과 Refresh Token을 함께 사용해야 합니다.
'React > 프론트엔트 개념 정리' 카테고리의 다른 글
| [Next.js] - RSC에서 수정 후 이전 데이터가 보일 때 해결 방법 (0) | 2025.11.04 |
|---|---|
| Next.js에서 RSC 방식이란?(feat.서버, 클라이언트 컴포넌트) (0) | 2025.10.27 |
| 클로저(Closure)란? – React에서 stale 값이 생기는 이유 (0) | 2025.10.17 |
| Vue가 다시 뜨는 이유 (0) | 2025.10.14 |