JWTํ ํฐ์ด๋?
JWT(JSON Web Token)์ ์น ํ์ค์ผ๋ก์, ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํ ๊ตฌ์กฐ๋ฅผ ์ ์ํ ํ ํฐ์ด๋ค. ์ฃผ๋ก ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ๊ฑฐ์ณ ์ ๋ณด ๊ตํ์ ์ํด ์ฌ์ฉ๋๋ฉฐ, ํนํ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ธ์ฆ/์ธ๊ฐ๋ฅผ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
JWT์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ก๋ Header, Payload, Verify signature๊ฐ ์๋๋ฐ. ๋ค์ ์ฌ์ง์ ๋ณด๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๋ค.
ํค๋์๋ ํ ํฐ์ ํ์
๊ณผ ์ฌ์ฉํ๋ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ด ๋ค์ด๊ฐ ์๋ค.
ํ์ด๋ก๋์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๋๋ฐ ๊ฐ ๋ฐ์ดํฐ๋ฅผ Claim์ด๋ผ๊ณ ํ๋ค.
์ธ์ฆ ์๋ช
์๋ ํค๋์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ๋ณ์กฐ ๋ฐฉ์ง๋ฅผ ์ํ ์๋ช
์ด ๋ค์ด๊ฐ์์ด์ ํค๋์ ํ์ด๋ก๋๋ฅผ ํฉ์น ํ ์ํฌ๋ฆฟ ํค ํค๋์ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ธ์ฝ๋ฉํ๋ค.
JWT์ ์ธ์ฆ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฟ ํค์ ์ธ์
์ด ์๋๋ฐ Web Token์ด ์ ํ์ํ๊ฐ?
ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ์ ์ธ์
๊ณผ ์ฟ ํค ๊ธฐ๋ฐ์ ์ธ์ฆ ๋ฐฉ์์ ๋นํด ๋ค์ํ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๊ณ , ๋ค์ํ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์ ๋์ผํ ํ ํฐ์ ์ฌ์ฉํ ์ ์์ด ํธ๋ฆฌํ๋ค. ์ฅ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ํ ์ ์ฅ ํ์ ์์(Stateless): ์น ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋ฉฐ ์๋ฒ ์ธก์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ์ด๋ก์จ ์๋ฒ๋ ์ฌ์ฉ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ณต์กํ ์์
์์ด ๊ฐํธํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฒ ํ์ฅ์ฑ๊ณผ ๋ถ์ฐ ์์คํ
: ์ธ์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์ฌ์ฉ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ์๋ฒ ํ์ฅ์ด ์ด๋ ค์ธ ์ ์๋ค. ๋ฐ๋ฉด ์น ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ์ฌ๋ฌ ์๋ฒ ๊ฐ์ ํ ํฐ์ ๊ณต์ ํ๊ฑฐ๋ ๋๊ธฐํํ ํ์๊ฐ ์์ด ์๋ฒ ํ์ฅ์ฑ์ด ์ข๋ค.
- ๋ค์ํ ํด๋ผ์ด์ธํธ ์ง์: ์น ํ ํฐ์ ์น ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ ์ฑ, ๋ฐ์คํฌํฑ ์ฑ ๋ฑ์์๋ ๋์ผํ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
- CORS ๋ฌธ์ ํด๊ฒฐ: ์น ํ ํฐ์ ํ ํฐ์ ํค๋์ ํฌํจํ์ฌ ์์ฒญ์ ๋ณด๋ด๋ฏ๋ก, ๋ณด๋ค ์ ์ฐํ CORS ์ค์ ์ด ๊ฐ๋ฅํด ๋ค์ํ ๋๋ฉ์ธ์์๋ ๋์ผํ ํ ํฐ์ ์ฌ์ฉํ์ฌ API ํธ์ถ์ ์ํํ ์ ์๋ค.
- ๋ณด์ ๊ฐํ: ์น ํ ํฐ์ ํ ํฐ ์์ฒด๊ฐ ์ํธํ๋๊ฑฐ๋ ์๋ช
๋์ด ๋ฐ์ดํฐ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์ ๊ฐํํ ์ ์๋ค. JWT(JSON Web Token) ๊ฐ์ ํ์ค์ ์ฌ์ฉํ์ฌ ํ ํฐ์ ์์ฑํ๊ณ ๊ฒ์ฆํ ์ ์๋ค. (์ฌ์ค base64 ๋์ฝ๋ฉ์ผ๋ก ํด์์ด ๊ฐ๋ฅํ๋ฐ ์ด๊ฒ ๋ง๋ ์ถ๋ค.)
- ํด๋ผ์ด์ธํธ ์ธก ์ฒ๋ฆฌ ๊ฐ์: ์ธ์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ฐ ์์ฒญ๋ง๋ค ์๋ฒ์์ ์ธ์
์ ๋ณด๋ฅผ ํ์ธํด์ผ ํ๋ค. ํ์ง๋ง ์น ํ ํฐ์ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ ์ธก์์ ํ ํฐ์ ๊ด๋ฆฌํ๊ณ ์์ฒญ์ ํฌํจ์์ผ ๋ณด๋ด๋ฏ๋ก ์๋ฒ ์์ฒญ์ ๋ถ๋ด์ด ์ค์ด๋ ๋ค.(Preflight -> ํ ํฐ ๊ถํ ํ์ธ ๋ฐ ์ค์ ์์ฒญ)
์น ํ ํฐ์ ์ข๊ธฐ๋ง ํ๊ฐ?
์น ํ ํฐ์ ๋ง์ ์ฅ์ ์ ๊ฐ์ง์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด ๋ช ๊ฐ์ง ๋จ์ ๋ ๊ฐ์ง๊ณ ์๋ค.
- ํ ํฐ ํฌ๊ธฐ์ ๋ณด์ ์ทจ์ฝ์ฑ: ์น ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ๋คํธ์ํฌ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค. ๋ํ, ํ ํฐ์ด ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋ฏ๋ก ๋ณด์์ ์ทจ์ฝํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ธก์์ ํ ํฐ์ ํ์ทจ๋นํ๋ฉด ํจ๊ณผ์ ์ธ ๋ณด์ ์กฐ์น ์์ด ๋
ธ์ถ๋ ์ ์๋ค.
- ์ค์ ๊ด๋ฆฌ์ ์ด๋ ค์: ์ธ์
๊ณผ ๋ฌ๋ฆฌ ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด๋ฏ๋ก, ํด๋ผ์ด์ธํธ ์ธก์์ ํ ํฐ์ ๊ด๋ฆฌํ๊ณ ๋ณด์์ ๊ฐํํด์ผ ํ๋ค. ์ด๋ก ์ธํด ์ค์ ์ง์ค์ ์ธ์
๊ด๋ฆฌ์ ๋น๊ตํ์ ๋ ๋ ๋ณต์กํด์ง ์ ์๋ค. ํ ํฐ์ ๋ฌด์ํ์ฑ์ด๋ฏ๋ก ํ ํฐ์ ๊ผญ ๋ง๋ฃ์๊ฐ์ ๋ฃ์ด๋๋๊ฒ ์ข๋ค.
Reference