JWT란?
- JWT(JSON Web Token)는 사용자의 인증 정보와 필요한 데이터를 JSON 형태의 클레임(Claim)으로 담고 있는 자가 포함 토큰(Self-contained Token)으로, 서버가 별도의 세션 정보를 저장하지 않아도 인증에 활용할 수 있다.
- JWT는 헤더, 페이로드, 서명 세 부분으로 구성된다.
- 헤더에는 토큰의 타입과 서명 알고리즘 정보가 포함된다.
- 페이로드에는 사용자 정보와 같은 데이터가 클레임(Claim) 형태로 저장된다.
- 서명(Signature)은 서버의 비밀 키를 이용해 생성되며, 이를 통해 토큰의 위조 여부와 데이터의 무결성을 검증할 수 있다.
왜 JWT를 사용하는가?
- Stateless인증방식 : JWT는 토큰 자체에 사용자 정보가 포함되어 있기 때문에 서버가 별도의 세션 정보를 저장하지 않아도 된다. 따라서 서버가 인증 상태를 관리할 필요가 없어 확장성과 유연성이 높다.
- 분산 시스템 환경에 적합 : JWT는 토큰만 검증하면 인증을 처리할 수 있기 때문에 여러 서버가 존재하는 분산 환경이나 MSA 환경에서도 동일한 방식으로 인증을 처리할 수 있다.
- 서버 부하 감소 : 세션 기반 인증 방식은 서버가 세션 저장소를 관리해야 하지만, JWT는 클라이언트가 토큰을 저장하고 요청 시 전달하기 때문에 서버의 세션 관리 부담을 줄일 수 있다.
- 다양한 클라이언트 환경에서 사용 가능 : JWT는 HTTP 헤더에 포함되어 전달되기 때문에 웹, 모바일, API 서버 등 다양한 환경에서 동일한 방식으로 인증을 처리할 수 있다.
JWT 구조
- Header : 토큰의 타입과 서명에 사용되는 알고리즘 정보를 담고 있다.
- Payload : 사용자 정보와 같은 데이터가 Claim 형태로 저장된다.
- Signature : 헤더와 페이로드를 기반으로 생성된 서명 값으로, 토큰이 위조되지 않았는지 검증한다.
Claim이란?
Clain은 JWT Payload에 담기는 데이터 단위이다. 사용자 식별 정보나 권한 정보와 같은 데이터를 key-value형태로 저장한다.
서버는 토큰을 검증한 후 Claim에 포함된 정보를 통해 사용자 인증과 권한 확인을 수행한다.
JWT 인증 과정
- 사용자가 로그인 요청을 보낸다.
- 서버는 사용자의 정보를 검증한다.
- 서버가 JWT 토큰을 생성한다.
- 생성된 JWT를 클라이언트에게 전달한다.
- 클라이언트는 요청 시 JWT를 함께 전송한다.
- 서버는 JWT를 검증한다.
- 서버가 요청을 처리하고 응답을 반환한다.
JWT의 장점
- 서버가 세션을 저장하지 않는 Stateless 인증 방식을 사용할 수 있다.
- 분산 시스템이나 MSA 환경에서 인증 처리에 유리하다.
- 서버의 세션 저장소 관리 부담을 줄일 수 있다.
JWT의 단점
- 토큰이 탈취될 경우 만료 전까지 사용될 수 있다.
- 서버가 토큰 상태를 관리하지 않기 때문에 강제 로그아웃 처리가 어렵다.
- Payload는 Base64로 인코딩되어있어 내용을 누구나 확인할 수 있다.
정리
JWT는 사용자 인증 정보를 JSON 형태의 클레임으로 담은 자가 포함 토큰으로, 서버가 별도의 세션을 저장하지 않아도 인증을 처리할 수 있는 Stateless 기반 인증 방식이다.
이러한 특징 때문에 JWT는 분산 시스템이나 MSA 환경에서 인증을 처리하기에 적합한 방식으로 많이 사용된다.
'TIL' 카테고리의 다른 글
| TIL - DDD 구조와 현재 프로젝트 구조의 차이 (1) | 2026.03.18 |
|---|---|
| TIL - DDD구조 이해 (0) | 2026.03.17 |
| TIL - AI에게 프로젝트 피드백 받아보기 (0) | 2026.03.13 |
| TIL - 프로젝트 발표 피드백을 통해 배운 문서 작성법 (0) | 2026.03.12 |
| TIL - 결제 금액 조작문제 서버측 이중검증으로 방어하기 (0) | 2026.03.11 |