REFERENCE:
[무료] Spring Boot JWT Tutorial - 인프런 | 강의
[Server] JWT(Json Web Token)란?
JWT(Json Web Token)란 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 ***Claim 기반의 Web Token**이다. JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주기 위한 토큰이다. 주로 회원 인증이나 정보 전달에 사용된다.

일반적으로 클라이언트가 JWT를 static한 변수와 로컬 스토리지에 저장하게 되는데, static 변수에 저장하는 이유는 HTTP 통신을 할 때마다 JWT를 담아서 전달해줘야 하는데, 이걸 로컬 스토리지에 저장해서 담으면 오버헤드가 발생하기 때문이다.
<aside> 💡 Json에 대해서 모른다면? JSON의 모든 것
</aside>
클레임(Claim)이란 무슨 뜻인가요?
토큰은 크개 일반 토큰 기반의 인증과 클레임(Claim)기반의 인증이 있다.
일반 토큰 기반은 과거에 많이 사용하던 방식으로, 주로 의미 없는 문자열(Random string)기반으로 구성되어 있으며, 아래와 같이 표현된다.
a9ace025c90c0da2161075da6ddd3492a2fca776
그리고 사용할 때는 아래와 같은 json 형태로 보내는 방식을 이용한다.
{
"code": 0,
"msg": null,
"response":{
"token": "a9ace025c90c0da2161075da6ddd3492a2fca776",
"now": 1512446940,
"expired_at": 1512448740
}
}
그런데, 이런 토큰은 단순한 문자열이기 때문에 정보를 담거나 할 수 없다. 또한 아래와 같은 문제점을 가지고 있다.
클레임이란 사용자 정보나 데이터 속성 등을 의미한다.
그래서 클레임 토큰이라 하면 토큰 안에 아래와 같은 정보를 담고 있는 토큰이라 생각하면 된다.
{
"id":"mhlab",
"role":["admin","hr"],
"company":"hexlant"
}
이러한 클레임 토큰 기반 중 대표적인 것이 바로 JWT이다.

JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있으며, Json 형태인 각 부분은 Base64URL로 인코딩 되어 표기된다. 또한 , 각각의 부분을 이어주기 위해서 . 구분자를 사용해 구분을 하게 된다.
