๋ชฉ์ฐจ
- ์ธ์ ๋ฐฉ์์ ํ๊ณ
- JWT๋ ๋ฌด์์ธ๊ฐ?
- JWT์ ๊ตฌ์กฐ
- JWT ์ธ์ฆ ๋์ ๋ฐฉ์
- ์ธ์ ๋ฐฉ์ vs JWT ๋ฐฉ์ ๋น๊ต
- JWT์ ์ฅ์ ๊ณผ ๋จ์
- JWT ์ฌ์ฉ ์ ์ฃผ์ํด์ผ ํ ๋ณด์ ์ฌํญ
- ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
1. ์ธ์ ๋ฐฉ์์ ํ๊ณ
์์ ์ธ์ ๋ฐฉ์์ ๋ก๊ทธ์ธ์ ๋ฐฐ์ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ฉด ์๋ฒ๊ฐ ์ธ์ ์ ์์ฑํ๊ณ , ์ธ์ ID๋ฅผ ์ฟ ํค๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค.
์ธ์ ๋ฐฉ์์ ์ ๋์ํ์ง๋ง ํ ๊ฐ์ง ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ก ๋์ด๋๋ฉด ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
์๋ฅผ ๋ค์ด ์๋ฒ A์์ ๋ก๊ทธ์ธํด์ ์ธ์ ์ด ์๋ฒ A์ ์ ์ฅ๋๋๋ฐ, ๋ค์ ์์ฒญ์ด ์๋ฒ B๋ก ์ ๋ฌ๋๋ฉด ์๋ฒ B์๋ ๊ทธ ์ธ์ ์ ๋ณด๊ฐ ์์ด์ ๋ก๊ทธ์ธ์ด ํ๋ฆฌ๋ ํ์์ด ์๊น๋๋ค. ํธ๋ํฝ์ด ๋ง์ ๋ํ ์๋น์ค์์๋ ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋ ์ด์ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๊ธฐ ๋๋ฌธ์, ์ด ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด JWT ํ ํฐ ๋ฐฉ์์ ๋๋ค.
2. JWT๋ ๋ฌด์์ธ๊ฐ?
**JWT(JSON Web Token)**๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ ํฐ ์์ฒด์ ๋ด์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ ์ธ์ฆ ๋ฐฉ์์ ๋๋ค.
์ธ์ ๋ฐฉ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ณ ID๋ง ์ฃผ๋ ๋ฐฉ์์ด๋ผ๋ฉด, JWT๋ ์ ๋ณด ์์ฒด๋ฅผ ์ํธํํด์ ํ ํฐ์ผ๋ก ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
์ฌ์ด ๋น์ ๋ก ์ค๋ช ํ๋ฉด, ์ธ์ ์ ๋ฌผํ ๋ณด๊ดํจ ๋ฒํธํ์ ๊ฐ์ต๋๋ค. ๋ฒํธํ๋ง ์๊ณ ์ค์ ๋ฌผ๊ฑด์ ์๋ฒ(๋ณด๊ดํจ)์ ์์ต๋๋ค. ๋ฐ๋ฉด JWT๋ ์ ๋ถ์ฆ๊ณผ ๊ฐ์ต๋๋ค. ์ ๋ถ์ฆ ์์ฒด์ ์ด๋ฆ, ์๋ ์์ผ, ์ฌ์ง ๋ฑ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์์ต๋๋ค.
3. JWT์ ๊ตฌ์กฐ
JWT๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋ถ๋ถ์ ์ (.)์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
์ค์ JWT ํ ํฐ์ ๋ค์์ฒ๋ผ ์๊ฒผ์ต๋๋ค.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
์ด ์ธ ๋ถ๋ถ์ ์์๋๋ก ํค๋(Header), ํ์ด๋ก๋(Payload), ์๋ช (Signature)์ ๋๋ค. ๊ฐ ๋ถ๋ถ์ Base64๋ก ์ธ์ฝ๋ฉ๋์ด ์์ต๋๋ค.
ํค๋(Header) ํ ํฐ์ ํ์ (JWT)๊ณผ ์ฌ์ฉ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
ํ์ด๋ก๋(Payload) ์ค์ ๋ด๊ณ ์ถ์ ๋ฐ์ดํฐ(์ฌ์ฉ์ ID, ๊ถํ, ๋ง๋ฃ ์๊ฐ ๋ฑ)๋ฅผ ๋ด๋ ๋ถ๋ถ์ ๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ **ํด๋ ์(Claim)**์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
{
"userId": 123,
"email": "hong@example.com",
"role": "admin",
"exp": 1746000000
}
์๋ช (Signature) ํค๋์ ํ์ด๋ก๋๋ฅผ ํฉ์น ๋ค ์๋ฒ๋ง ์๊ณ ์๋ ๋น๋ฐ ํค๋ก ์ํธํํ ๊ฐ์ ๋๋ค. ์ด ์๋ช ๋๋ถ์ ํ ํฐ์ด ์์กฐ๋์ง ์์์์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
ํ์ด๋ก๋๋ Base64๋ก ์ธ์ฝ๋ฉ๋ ๊ฒ์ด๋ผ ๋๊ตฌ๋ ๋์ฝ๋ฉํด์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋น๋ฐ๋ฒํธ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ ๋ ํ์ด๋ก๋์ ๋ฃ์ผ๋ฉด ์ ๋ฉ๋๋ค.
4. JWT ์ธ์ฆ ๋์ ๋ฐฉ์
JWT๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ณผ์ ์ ์์๋๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ก ์ฌ์ฉ์๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ ๋๋ค.
๋ ๋ฒ์งธ๋ก ์๋ฒ๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๊ณ ์ผ์นํ๋ฉด, ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ด๊ธด JWT ํ ํฐ์ ์์ฑํด์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํฉ๋๋ค.
์ธ ๋ฒ์งธ๋ก ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ๋๋ ์ฑ)๋ ํ ํฐ์ ์ ์ฅํฉ๋๋ค. ์ฃผ๋ก ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ ์ฟ ํค์ ์ ์ฅํฉ๋๋ค.
๋ค ๋ฒ์งธ๋ก ์ดํ API ์์ฒญ ์๋ง๋ค HTTP ํค๋์ ํ ํฐ์ ๋ด์ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. Authorization: Bearer ํ ํฐ๊ฐ ํํ๋ก ์ ๋ฌํฉ๋๋ค.
๋ค์ฏ ๋ฒ์งธ๋ก ์๋ฒ๋ ํ ํฐ์ ์๋ช ์ ๊ฒ์ฆํด ์ ํจํ ํ ํฐ์ธ์ง ํ์ธํฉ๋๋ค. ์ ํจํ๋ฉด ํ ํฐ ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊บผ๋ด ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด ๊ณผ์ ์์ ์๋ฒ๋ ํ ํฐ์ ์ด๋์๋ ์ ์ฅํ์ง ์์ต๋๋ค. ์๋ช ๊ฒ์ฆ๋ง์ผ๋ก ํ ํฐ์ ์ ํจ์ฑ์ ํ๋จํฉ๋๋ค.
5. ์ธ์ ๋ฐฉ์ vs JWT ๋ฐฉ์ ๋น๊ต
| ์ ๋ณด ์ ์ฅ ์์น | ์๋ฒ | ํด๋ผ์ด์ธํธ(ํ ํฐ ์) |
| ์๋ฒ ๋ถํ | ์์ (์ธ์ ์ ์ฅ ํ์) | ์์ |
| ๋ค์ค ์๋ฒ ํ๊ฒฝ | ๋ณ๋ ์ฒ๋ฆฌ ํ์ | ๊ฐํธ |
| ํ ํฐ ๊ฐ์ ๋ง๋ฃ | ๊ฐ๋ฅ | ์ด๋ ค์ |
| ๋ณด์ | ์๋์ ์ผ๋ก ์์ | ํ ํฐ ํ์ทจ ์ ์ํ |
| ์ฃผ์ ์ฌ์ฉ์ฒ | ์ผ๋ฐ ์น์ฌ์ดํธ | ๋ชจ๋ฐ์ผ ์ฑ, SPA, MSA |
6. JWT์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
์๋ฒ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ ์๋ฒ ํ์ฅ์ด ์์ ๋กญ์ต๋๋ค. ์๋ฒ ์ฌ๋ฌ ๋๋ฅผ ์ด์ํด๋ ์ด๋ค ์๋ฒ์์๋ ํ ํฐ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค. ๋ชจ๋ฐ์ผ ์ฑ์ด๋ ๋ค์ํ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํฉ๋๋ค.
๋จ์
ํ ํฐ์ด ํ์ทจ๋๋ฉด ๋ง๋ฃ ์ ๊น์ง ๋ง์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ธ์ ์ฒ๋ผ ์๋ฒ์์ ์ฆ์ ๋ก๊ทธ์์ ์ฒ๋ฆฌ๊ฐ ์ด๋ ต์ต๋๋ค. ํ์ด๋ก๋์ ๋ง์ ์ ๋ณด๋ฅผ ๋ด์์๋ก ํ ํฐ ํฌ๊ธฐ๊ฐ ์ปค์ ธ ๋งค ์์ฒญ๋ง๋ค ์ ์ก ๋ฐ์ดํฐ๊ฐ ๋์ด๋ฉ๋๋ค.
7. JWT ์ฌ์ฉ ์ ์ฃผ์ํด์ผ ํ ๋ณด์ ์ฌํญ
๋ง๋ฃ ์๊ฐ ์ค์ ํ์ JWT๋ ํ ํฐ์ ๋ง๋ฃ ์๊ฐ(exp)์ ์ค์ ํด์ผ ํฉ๋๋ค. ๋ง๋ฃ ์๊ฐ์ด ์์ผ๋ฉด ํ ๋ฒ ๋ฐ๊ธ๋ ํ ํฐ์ด ์์ํ ์ ํจํด์ ธ ๋ณด์ ์ฌ๊ณ ์ ๋์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ก์ธ์ค ํ ํฐ์ 15๋ถ~1์๊ฐ, ๋ฆฌํ๋ ์ ํ ํฐ์ 7~30์ผ๋ก ์ค์ ํฉ๋๋ค.
HTTPS ์ฌ์ฉ ํ์ ํ ํฐ์ด ๋คํธ์ํฌ์์ ํ์ทจ๋์ง ์๋๋ก ๋ฐ๋์ HTTPS๋ก ํต์ ํด์ผ ํฉ๋๋ค.
๋ฏผ๊ฐํ ์ ๋ณด ํ์ด๋ก๋์ ๋ฃ์ง ์๊ธฐ ํ์ด๋ก๋๋ ๋๊ตฌ๋ ๋์ฝ๋ฉํด์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋น๋ฐ๋ฒํธ, ์นด๋ ๋ฒํธ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ ๋ ๋ด์ผ๋ฉด ์ ๋ฉ๋๋ค.
8. ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
์ค๋ ๋ฐฐ์ด ํต์ฌ์ ์ ๋ฆฌํฉ๋๋ค.
- JWT๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ ํฐ ์์ฒด์ ๋ด์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋๋ค.
- ํค๋, ํ์ด๋ก๋, ์๋ช ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์๋ช ์ผ๋ก ์์กฐ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
- ์๋ฒ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ ๋ค์ค ์๋ฒ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค.
- ํ์ด๋ก๋๋ ๋์ฝ๋ฉ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด์ผ๋ฉด ์ ๋ฉ๋๋ค.
- ๋ฐ๋์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ๊ณ HTTPS์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ค์ ๊ธ์์๋ CORS๋ ๋ฌด์์ธ์ง, ๋ธ๋ผ์ฐ์ ์์ API ์์ฒญ์ด ๋งํ๋ ์ด์ ๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.