JWT
🔑 JWT란?
정의
JWT(JSON Web Token)는 서버와 클라이언트가 안전하게 정보를 주고받기 위한 토큰 형식이다. 주로 인증 후 발급된 정보를 담아, 이후 요청에서 사용자를 식별하는 데 활용한다.
🧱 JWT의 구조
- Header: 토큰 타입과 서명 알고리즘 정보
- Payload: 사용자 정보와 기타 클레임
- Signature: 위변조 검증용 서명
포인트
JWT는 서버가 상태를 저장하지 않는 방식으로 인증을 구성할 때 자주 사용된다.
🔄 동작 흐름
- 사용자가 로그인한다.
- 서버가 JWT를 발급한다.
- 클라이언트가 토큰을 저장한다.
- 이후 요청마다 토큰을 함께 보낸다.
- 서버는 서명을 검증하고 요청을 처리한다.
⚡ 주요 특징
- 서버 세션 저장이 줄어든다.
- 필요한 정보를 토큰 안에 담아 전달할 수 있다.
- 서명 검증으로 위변조를 확인할 수 있다.
- 분산 환경에서 사용하기 좋다.
⚠️ 주의할 점
- Payload는 암호화가 아니라 인코딩이다.
- 민감한 정보를 Payload에 직접 넣지 않는 것이 좋다.
- 토큰 만료 시간과 재발급 정책을 설계해야 한다.
- HTTPS와 함께 사용하는 것이 기본이다.
[!important] 주의 JWT는 편리하지만 토큰 탈취와 만료 관리를 반드시 고려해야 한다. 로그아웃, 재발급, 강제 만료 같은 정책이 없으면 운영이 불편해질 수 있다.
🛠️ 실무에서 많이 쓰는 방식
- Access Token
- Refresh Token
Access Token
- 짧은 만료 시간을 둔다.
- API 요청 인증에 사용한다.
Refresh Token
- 상대적으로 긴 만료 시간을 둔다.
- Access Token 재발급에 사용한다.
✅ 장점
- 서버 상태 저장 부담이 줄어든다.
- 분산 시스템에 적합하다.
- 인증 정보를 토큰 단위로 전달할 수 있다.
- 확장성이 좋다.
❌ 단점
- 토큰 탈취 시 피해가 생길 수 있다.
- 세밀한 강제 만료가 어렵다.
- 토큰 크기가 커질 수 있다.
- Payload에 민감 정보를 넣기 어렵다.
🧩 함께 보면 좋은 개념
- OAuth2
- Redis
- Restful
댓글남기기