

JWT์ JSON Web Token์ ์ค์ธ ๋ง๋ก JSON ํํ๋ฅผ ์ํธํํ์ฌ URL-safe๋ก ํํํ ์ธํฐ๋ท ํ์ค ์ธ์ฆ ๋ฐฉ์์ด๋ค.
์ด์ ์๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ์๋ค.
๊ทธ๋ฌ๋ ๋ช๊ฐ์ง ๋ฌธ์ ์ ์ด ์๊ฒผ๋ค.
๐ฅ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ๋ก ์ฟ ํค์ ๊ฐ์ ์กฐ์ ๊ฐ๋ฅ
๐ฅ ๋คํธ์ํฌ ์ ์ก ๊ตฌ๊ฐ์์ ์ฟ ํค ํ์ทจ ๊ฐ๋ฅ
๐ฅ ํ ๊ฐ์ ์ฟ ํค๋ ์ต๋ 4KB๋ก ์ ํ๋์ด ์์ด ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ๋ด๊ธฐ์ง ์์ ์ ์์
์ฟ ํค๋ฅผ ํตํด ์ธ์ฆ์ ํ๋ ๊ฒ์ ๋ํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์ ๋์จ ๊ฒ์ด ์ธ์
์ด๋ค.
์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ์ ํ๊ณ ์๋ฒ์์ ์ธ์ ID๋ฅผ ๋ฐ๊ธํด ํด๋ผ์ด์ธํธ ์ฟ ํค์ ์ ์ฅ์ ํ๋ค. ๊ทธ ํ ์๋ฒ์ ์์ฒญํ ๋ ์ฟ ํค์ ์ธ์ ID๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ ์๋ฒ์์ ์ธ์ ID๋ฅผ ๊ฒ์ฌ ํ ์๋ต์ ํ๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋ฌธ์ ์ ์ด ์๊ฒผ๋ค.
๐ฅ ์ธ์ ์ ์ฅ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ธ์ฆ ๋ถ๊ฐ
๐ฅ ์ธ์ ์ ์ฅ์๊ฐ ์๋ฒ์ ๋ฐ๋ก ์กด์ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋น์ฉ ๋ฐ์
๐ฅ ๋งค ์์ฒญ๋ง๋ค ์ธ์ ์ ์ฅ์๋ฅผ ์กฐํํ๋ ๋ฒ๊ฑฐ๋ก์ ๋ฐ์
Stateless: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค.
Stateful: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ๋ค.
HTTP ํต์ ์ ๋ฌด์ํ์ฑ(Stateless)์ ์งํฅํ๋ค. ์ด๋ ์๋ฒ์ ํธ๋ํฝ์ด ์ฆ๊ฐํด๋ ๋์ฒ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์๋ฒ ์ค ํ๋๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด ๋ค๋ฅธ ์๋ฒ์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
JWT์ ๊ฒฝ์ฐ Stateless ํ์ง๋ง, Session์ ๊ฒฝ์ฐ Statefulํ๋ค.

Header: ํ ํฐ์ ํ์ ์ด๋, ์ํธํ ์๋ก๊ธฐ์ฆ์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์ ธ ์๋ค.
{
"typ": "JWT", // ํ ํฐ ํ์
(Type)
"alg" : "HS256" // ํ ํฐ ์ํธํ ์๊ณ ๋ฆฌ์ฆ(Algorithm)
}
Payload: ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด Claim์ด ๋ด๊ฒจ ์๋ค.
{
"iss": "http://localhost:3000", //ํ ํฐ ๋ฐ๊ธ์(Issuer)
"sub" : "ACCESS", // ํ ํฐ ์ ๋ชฉ(Subject)
"aud" : "aa", // ํ ํฐ ๋์์(Audience)
"exp" : "1234567890", // ํ ํฐ ๋ง๋ฃ์๊ฐ(Expiration Time)
"nbf" : "1234567890", // ํ ํฐ ํ์ฑ ๋ ์ง(Not Before)
"iat" : "1234567890", // ํ ํฐ ๋ฐ๊ธ ์๊ฐ(Issued At)
"jtl" : "aa" // JWT ํ ํฐ ์๋ณ์(JWT id)
}
Signature: Header์ Payload์ ๋ฌธ์์ด์ ํฉ์น๊ณ , Header์ ์ ์ธํ alg์ key๋ฅผ ์ด์ฉํด ์ํธํ ๊ฐ, ํ ํฐ์ ์์กฐ ๋ฐ ๋ณ์กฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋๋ฐ ์ฌ์ฉํ๋ค.
JWT๋ก ํ๋ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.

JWT๋ ์ ๊ณผ์ ์์ Access-Token๊ณผ Refresh-Token ๋ ๊ฐ๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ฐ๋๋ฐ ์ด๋ ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ Access-token์ ์งง๊ฒ Refresh-token์ ๋น๊ต์ ๊ธธ๊ฒ ํ์ฌ JWT ํ ํฐ์ ํ์ทจ ์ํ์ ์ต์ํํ์๋ค.
1) ๋ ๊ฐ์ Access-token๊ณผ Refresh-token์ ๋ฐ๊ธ์ ๋ฐ์ ํ์์๋ Access-token์ ํค๋์ ๋ด์ ์๋ฒ์ ํต์ ์ ํ๋ค.
2) Access-token ๋ง๋ฃ๋๋ฉด ํค๋์ Refresh-token์ ๋ด์ ์๋ฒ์ ํต์ ํ ์๋ก์ด Access-token์ ๋ฐ๊ธ๋ฐ๋๋ค.
3) ๋ง์ฝ Refresh-token์ด ๋ง๋ฃ๋๋ฉด ํด๋ผ์ด์ธํธ๋ ์ฌ๋ก๊ทธ์ธ์ ํตํด ์๋ก์ด ๋ ๊ฐ์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๋๋ค.