JWT (JSON WEB TOKEN)
HTTP๋ 2๊ฐ์ง ํน์ง์ด ์กด์ฌํ๋ค. ๋ฌด์ํ์ฑ(Stateless), ๋น์ฐ๊ฒฐ์ฑ(Connectionless)
๋ฌด์ํ์ฑ(Stateless)
HTTP๋ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ์ด๋ง์ ์ฆ, ๋๊ตฌ์ ์์ฒญ์ธ์ง ๊ตฌ๋ถ์ ํ ์ ์๋ค๋ ์๋ฏธ๋ค. ๋ฐ๋ผ์ ์์ฒญ ์ ๋ณด๋ฅผ ํน์ ํ๊ธฐ ์ํด์ Cookie, Session, Token ์ธ์ฆ์ ํตํด ํด๋ผ์ด์ธํธ๋ฅผ ํ์ ํ ์ ์๋ค.
๋น์ฐ๊ฒฐ์ฑ(Connectionless)
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ด ๋๋๋ค ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๋ ์ฑ์ง์ด๋ค. HTTP๋ ์ธํฐ๋ท ์์์ ๋ถํน์ ๋ค์์ ํต์ ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์, ์๋ฒ๊ฐ ๋ค์์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํด์ผ ํ๋ค๋ฉด, ๋ง์ ๋ฆฌ์์ค ์ ์ ๋ฑ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
HTTP์ ์ด๋ฌํ ํน์ง์ผ๋ก ์ธํด ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ํํ ์ ์๋ค.
Cookie, Session, Token
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก Cookie, Session, Token ๋ฐฉ์์ด ์๋ค.
์ฟ ํค(Cookie)
๋ง๋ฃ๊ธฐ๊ฐ์ด ์๋ key-value ํํ์ ์ ์ฅ์


์ฟ ํค์ ๋จ์
๋ณด์์ ์ทจ์ฝํ๋ค. ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฟ ํค์ ์ ์ฅํ ๊ฒฝ์ฐ ๊ทธ๋๋ก ๋ ธ์ถ
4kb์ ์ฉ๋์ ํ
๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค ์ง์ ํํ๊ฐ ๋ฌ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅ
์ธ์
(Session)
๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋
์๋ฒ์์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํจ
์ธ์ ๊ฐ์ฒด
์ธ์ ๊ฐ์ฒด๋ Session ID๋ฅผ key๋ก ๊ฐ๋ key-value๋ก ๊ตฌ์ฑ
value์ ์ธ์ ์์ฑ ์๊ฐ, ๋ง์ง๋ง ์ ๊ทผ ์๊ฐ, ๊ธฐํ ์ ๋ณด๋ค์ด Mapํํ๋ก ์ ์ฅ๋จ


์ธ์
์ ๋จ์
์ฟ ํค์ ์ ์ฅ๋ ์ธ์ ID ์์ฒด๋ ์ ์๋ฏธํ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ง ์์ง๋ง ์ 3์๊ฐ ์ด๋ฅผ ํ์ทจํ์ฌ ์ธ์ฆ๋ ์ ์ ์ธ์ฒ ์์ฅํ ์ ์๋ค.
์๋ฒ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํธ๋ํฝ ์ฆ๊ฐ์ ์๋ฒ ๋ถํ๊ฐ ๋ฐ์ํ๋ค.
ํ ํฐ(Token)
์ ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํ ํฐ ์ธ์ฆ ๋ฐฉ์
ํ ํฐ์ ์์ฒญ ํค๋์ Authorization ํ๋์ ๋ด์ ์ ์กํ๋ค.
Authorization: {type} {credentials}
ํฌ๋ฉง์ผ๋ก ๊ตฌ์ฑ๋๋ค.Bearer ํ์ ์ ๊ฐ๋ JWT ์ด์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ํ ํฐ์ด ์กด์ฌํ๋๋ฐ ๊ฐ ํ ํฐ๋ณ ํ์ ์ด ์กด์ฌํ๋ค.
ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ์ดํ ๋งค ์์ฒญ๋ง๋ค ํค๋์ ํ ํฐ์ด ํฌํจ๋์ด ์ ์ก๋๋ค.

ํ ํฐ์ ๋จ์
ํ ํฐ์ ์ฉ๋์ด ํด ๊ฒฝ์ฐ ๋คํธ์ํฌ ํต์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํ ํฐ์ Payload๋ ์ํธํ๋์ง ์์ผ๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค.
์ 3์๊ฐ ํ ํฐ์ ํ์ทจํ์ ๊ฒฝ์ฐ ๋์ฒ๊ฐ ์ด๋ ต๋ค. (Expires, Refresh Token์ ์ด์ฉํด ์๋ฐฉ)
์ธ์
VS ํ ํฐ
์ธ์
๊ธฐ๋ฐ ์ธ์ฆ
์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ธก ์ธ์ ์ ์ฅ์(๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)์ ์ ์ฅ ๋ฐ ๊ด๋ฆฌํ๋ค.
์๋ฒ ์์์ ์ฌ์ฉํ๋ฏ๋ก ์์ฒญ๋ ์ฆ๊ฐ์ ์๋ฒ ๋ถํ๊ฐ ์ฆ๊ฐํ๋ค.
ํ ํฐ๊ธฐ๋ฐ ์ธ์ฆ
์๋ฒ๋ก ๋ถํฐ ๋ฐ๊ธ๋ ์ ์ ์ ๋ณด๊ฐ ๋ด๊ธด ํ ํฐ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ ๋ฐ ๊ด๋ฆฌํ๋ค.
๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ฏ๋ก ์๋ฒ ์์์ ์๋ ์ ์์ง๋ง ํ ํฐ์ ์ฉ๋์ด ํด ๊ฒฝ์ฐ ๋คํธ์ํฌ ํต์ ์ค๋ฒํค๋ ๋ฐ์
JWT(Json Web Token)
JWT๋ ์์ฒญ์ ํ์ํ ์ ๋ณด๋ฅผ ์ํธํ์ํจ JSON ํ ํฐ์ ์๋ฏธํ๋ค. JWT๋ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ผ๋ก HTTP ํค๋์ ๋ด์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๋ ๋ฐฉ๋ฒ์ด๋ค.JWT๋ JSON ๋ฐ์ดํฐ๋ฅผ base64 URL-safe Encode๋ฅผ ํตํด ์ธ์ฝ๋ฉํ๋ฉฐ, ํ ํฐ ๋ด๋ถ์๋ ์๋ณ์กฐ ๋ฐฉ์ง๋ฅผ ์ํด ๊ฐ์ธํค(secret key)๋ฅผ ํตํ ์ ์์๋ช ์ด ํฌํจ๋์ด์๋ค. ๋ฐ๋ผ์ ํ ํฐ์ ์ ๋ฌ๋ฐ์ ์๋ฒ๋ ๊ฒ์ฆ(verify)์ ํตํด ์๋ฃ๋๋ฉด ์๋ต์ ์ ์กํ๋ค.
JWT ๊ตฌ์กฐ
JWT๋ .
๊ตฌ๋ถ์๋ก ๋๋์ด์ง๋ ์ธ๊ฐ์ง ๋ฌธ์์ด์ ์กฐํฉ์ด๋ค. ๊ฐ๊ฐ ์ผ์ชฝ์์๋ถํฐ Header, Payload, Signature
๋ฅผ ์๋ฏธํ๋ค.

Header
typ: ํ ํฐ ์ ํ
alg: ํด์ ์๊ณ ๋ฆฌ์ฆ
Payload
ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด Claim์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์์คํ ์์ ์ค์ ๋ก ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ๋ด๋๋ค.
Signature
ํค๋, ํ์ด๋ก๋๋ฅผ base64 url๋ฐฉ์ ์ธ์ฝ๋ฉํ ํ Hedaer์ ๋ช ์ํ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๊ณ secret key๋ก ์๋ช ํ ์ ์์๋ช ์ด ๋ด๊ฒจ์๋ค.
์ฐธ๊ณ
JWT Docs JWT ํ ํฐ ์ธ์ฆ ์ด๋? (์ฟ ํค vs ์ธ์ vs ํ ํฐ)
Last updated