๐พ [CS] JWT(JSON Web Token) ํ ํฐ์ด๋ ๋ฌด์์ผ๊น์?
-
JWT(JSON Web Token) ํ ํฐ์ ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํ JSON ๊ธฐ๋ฐ์ ํ ํฐ์
๋๋ค.
- ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ๋ฅผ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- JWT(JSON Web Token)๋ ๋์งํธ ์๋ช ์ ํตํด ๋ณ์กฐ ๋ฐฉ์ง๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ด ์์ ํ๊ฒ ์ด๋ฃจ์ด์ง๋๋ค.
1๏ธโฃ JWT์ ๊ตฌ์กฐ.
- JWT(JSON Web Token)๋ ์ธ ๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
-
- ํค๋(Header)
-
- ํ์ด๋ก๋(Payload)
-
- ์๋ช (Signature)
-
1๏ธโฃ ํค๋(Header)
- ํ ํฐ์ ํ์ (JWT-JSON Web Token)๊ณผ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด(์: HMAC, SHA256)๋ฅผ ํฌํจํฉ๋๋ค.
- ์์:
{"alg": "HS256", "typ": "JWT"}
๐ค JWT์ ํค๋์์ ํ ๊ทผ์ ํ์ ์ ํฌํจํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
JWT(JSON Web Token)์ ํค๋(Header)์ ํ ํฐ์ ํ์ ์ ํฌํจํ๋ ์ด์ ๋ ์์ ์๊ฐ ํ ํฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๊ธฐ ์ํด์ ์ ๋๋ค.
๐ค ํ ํฐ์ ํ์ (Token Type)์ด๋ ๋ฌด์์ผ๊น?
ํ ํฐ์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ ํํ๋ฅผ ๊ตฌ๋ถํ๋ ์ ๋ณด์ ๋๋ค.
์ด ์ ๋ณด๋ ์ฃผ๋ก ํ ํฐ์ด ์ด๋ค ์ธ์ฆ ๋๋ ์ ์ก ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋์ง๋ฅผ ๋ช ์ํ๋ฉฐ, ์์ ์ธก์์ ํด๋น ํ ํฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
๐ค JWT์ ํค๋์์ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
JWT(JSON Web Token)์ ํค๋(Header)์ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ด์ ๋ ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌด์์ธ์ง ์์ ์ธก์์ ์ ํํ ์ ์ ์๋๋ก ํ๊ธฐ ์ํด์์ ๋๋ค.
๐ค ํด์๊ฐ(Hash Value), ๋๋ ํด์ ์ฝ๋(Hash Code)๋ ๋ฌด์์ผ๊น?
ํด์๊ฐ(Hash Value), ๋๋ ํด์ ์ฝ๋(Hash Code)๋ ์์์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฌธ์์ด์ด๋ ์ซ์๋ก ๋ณํํ ๊ฐ์ ๋๋ค.
ํด์๊ฐ(Hash Value)์ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ์์ฑ๋๋ฉฐ, ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ผ๋ฉด ํญ์ ๊ฐ์ ํด์๊ฐ(Hash Value)์ ์์ฑํ์ง๋ง, ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์์ ํ ๋ค๋ฅธ ํด์๊ฐ(Hash Value)์ด ์์ฑ๋ฉ๋๋ค.
๐ค ํด์ฑ ์๊ณ ๋ฆฌ์ฆ(Hashing Algorithm)์ด๋ ๋ฌด์์ผ๊น?
์์์ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ํด์๊ฐ(Hash Value), ๋๋ ํด์ ์ฝ๋(Hash Code)์ผ๋ก ๋ณํํ๋ ํจ์์ ๋๋ค.
ํด์ฑ ์๊ณ ๋ฆฌ์ฆ(Hashing Algorithm)์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ, ๋น๋ฐ๋ฒํธ ์ ์ฅ, ๋ฐ์ดํฐ ๊ฒ์ ๋ฑ์ ์ฉ๋๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
ํด์ ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ฝ๊ฐ๋ง ๋ฐ๋์ด๋ ์์ ํ ๋ค๋ฅธ ํด์๊ฐ(Hash Value)์ ์์ฑํ๋ ํน์ง์ด ์์ต๋๋ค.
๐ค ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๋ ๋ฌด์์ผ๊น์?
ํด์ฑ ์๊ณ ๋ฆฌ์ฆ(Hashing Algorithm)์ ์ข ๋ฅ์ ๋ฐฉ์์ ๋ํ๋ด๋ ์ ๋ณด๋ก, ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๊ฑฐ๋ ์ํธํ๋ ํํ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
ํด์ฑ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์์ ํ์ธํ๋ ๋ฐ ์ ์ฉํ๋ฉฐ, ํนํ ๋น๋ฐ๋ฒํธ ์ ์ฅ, ๋์งํธ ์๋ช , ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฑ ๋ค์ํ ๋ณด์ ๋ถ์ผ์์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ํ์ด๋ก๋(Payload)
- ํ ํฐ์ ์ค์ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ถ๋ถ์ผ๋ก, ์ฌ์ฉ์ ์ ๋ณด์ ๊ฐ์ ํด๋ ์(Claim)์ ๋ด๊ณ ์์ต๋๋ค.
๐ค ํ ํฐ์ ์ค์ ์ ๋ณด๋ ๋ฌด์์ผ๊น์?
ํ ํฐ์ ์ค์ ์ ๋ณด๋ ํ ํฐ์ ํฌํจ๋ ๋ฐ์ดํฐ์ ํต์ฌ์ ์ธ ๋ด์ฉ์ผ๋ก, ์ฃผ๋ก ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ ์ธ์ฆ, ๊ถํ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
์ด ์ ๋ณด๋ JWT(JSON Web Token) ํ ํฐ์ ํ์ด๋ก๋(Payload) ๋ถ๋ถ์ ์ ์ฅ๋๋ฉฐ, ํด๋ ์(Claim)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
ํ ํฐ์ ์ค์ ์ ๋ณด๋ ์ธ์ฆ์ด ํ์ํ ์์คํ ์์ ์๋ฒ๊ฐ ํด๋น ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๊ฑฐ๋ ํน์ ๊ถํ์ ๋ถ์ฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
๐ค ํด๋ ์(Claim)์ด๋ ๋ฌด์์ผ๊น์?
JWT(JSON Web Token)์ ํ์ด๋ก๋(Payload) ๋ถ๋ถ์ ๋ด๊ธฐ๋ ์ ๋ณด๋ก, ์ฌ์ฉ์ ๋๋ ํ ํฐ๊ณผ ๊ด๋ จ๋ ์์ฑ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ ๋๋ค.
ํด๋ ์(Claim)์ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ๋ํ ์ ์, ๊ถํ, ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ ๋ฑ์ ํ์ธ ํ ์ ์๊ฒ ํ๋ ์ญํ ์ ํฉ๋๋ค.
JWT(JSON Web Token)์ ํต์ฌ ์์๋ก, ํด๋ ์(Claim)์ ํตํด ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ์ ํ์ํ ๋ค์ํ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
๐ค ํ์ด๋ก๋(Payload)๊ฐ ํ ํฐ์ ์ค์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
ํ ํฐ์ ํตํด ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ์ ํ์ํ ์ฌ์ฉ์ ์ ๋ณด์ ๊ธฐํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด์์ ๋๋ค.
JWT(JSON Web Token)๋ ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์กํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ฏ๋ก, ํ์ํ ์ ๋ณด๋ฅผ ํ์ด๋ก๋(Payload)์ ํฌํจํ์ฌ ์๋ฒ๊ฐ ์ถ๊ฐ ์์ฒญ ์์ด ์ฌ์ฉ์ ์ํ๋ฅผ ํ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
- ํด๋ ์(Claim)์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์๋ณ์(id), ์ฌ์ฉ์ ๊ถํ(role), ํ ํฐ์ ์ ํจ ์๊ฐ(expiration) ๋ฑ์ ํฌํจํฉ๋๋ค.
- ์์:
{"sub": "1234567890", "name": "Kobe", "admin": true}
๐ค ํด๋ ์(Claim)์์์ ์ฌ์ฉ์ ์๋ณ์(id)๋ ๋ฌด์์ผ๊น์?
์ฌ์ฉ์ ์๋ณ์(id)๋ JWT(JSON Web Token) ํ ํฐ ๋ด์์ ์ฌ์ฉ์๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
์ด ์๋ณ์๋ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ณํ๋ ์ฃผ์ ์ ๋ณด๋ก ์ฌ์ฉ๋๋ฉฐ, ์๋ฒ๊ฐ ํน์ ์ฌ์ฉ์๋ฅผ ์ธ์ํ๊ณ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ๋ฅผ ์ํํ ๋ ๊ธฐ์ค์ด ๋๋ ์ ๋ณด์ ๋๋ค.
๐ค ํด๋ ์(Claim)์์์ ์ฌ์ฉ์ ๊ถํ(role)์ด๋ ๋ฌด์์ผ๊น์?
์ฌ์ฉ์๊ฐ ์์คํ ์์ ์ด๋ค ์ญํ ์ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ๋ณด์ ๋๋ค.
์ด๋ JWT(JSON Web Token) ํ ํฐ์ ํด๋ ์(Claim) ํ๋์ ํฌํจ๋์ด ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ๋ ๊ถํ ์์ค์ ๋ช ์ํ๋ฉฐ, ์๋ฒ๋ ์ด ๊ถํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์์๊ฒ ํ์ฉ๋ ์์ ์ด๋ ์ ๊ทผ ๊ถํ์ ๊ฒฐ์ ํฉ๋๋ค.
๐ค ํด๋ ์(Claim)์์์ ํ ํฐ์ ์ ํจ ์๊ฐ(expiration)์ด๋ ๋ฌด์์ผ๊น์?
ํ ํฐ์ ์ ํจ ์๊ฐ(expiration)์ JWT(JSON Web Token) ํ ํฐ์ด ์ ํจํ ๊ธฐ๊ฐ์ ์ค์ ํ๋ ์์ฑ์ผ๋ก, ํ ํฐ์ ๋ง๋ฃ ์์ ์ ๋ํ๋ ๋๋ค.
์ด ์์ฑ์ JWT(JSON Web Token)์exp
ํด๋ ์(Claim)์ ํฌํจ๋๋ฉฐ, ์ด ๊ฐ์ด ์ง๋๋ฉด ํ ํฐ์ ๋ ์ด์ ์ ํจํ์ง ์๋ค๊ณ ๊ฐ์ฃผ๋์ด ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ ์์ฒญ ์ ๊ฑฐ๋ถ๋ฉ๋๋ค.
๐ค ํด๋ ์(Claim)์์ ์ฌ์ฉ์ ์๋ณ์(id), ์ฌ์ฉ์ ๊ถํ(role), ํ ํฐ์ ์ ํจ ์๊ฐ(expiration) ๋ฑ์ ํฌํจํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
์๋ฒ๊ฐ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์ํํ ์ ์๋๋ก ํ์ํ ์ ๋ณด๋ฅผ ํ ๊ณณ์ ๋ชจ์ ๋๊ธฐ ์ํจ์ ๋๋ค.
์ด๋ฌํ ์ ๋ณด๋ฅผ ํตํด ์๋ฒ๋ ๋ณ๋์ ์ถ๊ฐ ์์ ์์ด ์ฌ์ฉ์์ ์ ์๊ณผ ๊ถํ, ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ธ์ฆ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
3๏ธโฃ ์๋ช (Signature)
- ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์๋ช ์ผ๋ก, ํค๋(Header)์ ํ์ด๋ก๋(Payload)๋ฅผ ํฉ์น ํ ๋น๋ฐ ํค๋ก ํด์ฑ(Hashing)ํ์ฌ ์์ฑ๋ฉ๋๋ค.
๐ค ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ(Token Integrity)
ํ ํฐ์ ๋ด์ฉ์ด ๋ฐ๊ธ๋ ์ดํ ๋ณ๊ฒฝ๋์ง ์์์์ ๋ณด์ฅํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฌด๊ฒฐ์ฑ์ด ์ ์ง๋ ํ ํฐ์ ๋ฐ๊ธ ์์ ์ ์ ๋ณด๋ฅผ ์ ๋ขฐํ ์ ์๋ ์ํ๋ก ์ ์งํ๋ฉฐ, ๊ทธ ๋ด์ฉ์ด ์ค๊ฐ์ ์กฐ์๋์ง ์์์์ ํ์ ํ ์ ์์ต๋๋ค.
๋ฌด๊ฒฐ์ฑ์ ํ ํฐ์ ์์ ํ ์ธ์ฆ๊ณผ ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด ํ์์ ์ธ ์์์ ๋๋ค.
๐ค ๋น๋ฐ ํค(Secret Key)
๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ฑฐ๋ ์ธ์ฆํ ๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฐ ์ ๋ณด๋ก, ์ค์ง ์ก์ ์์ ์์ ์๋ง ์๊ณ ์์ด์ผ ํ๋ ํค์ ๋๋ค.
๋น๋ฐ ํค๋ ๋์นญ ์ํธํ์ HMAC ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ณ ์ ์ก ์ค ๋ฐ์ดํฐ์ ์์ ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์๋ช ์ ํด๋ผ์ด์ธํธ๊ฐ ํ์ด๋ก๋(Payload)์ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์์:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
- JWT๋ ์์ ์ธ ๊ฐ์ง๋ฅผ ํฉ์ณ์ ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ค๊ณ , ๊ฐ ๋ถ๋ถ์
.
์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
- JWT๋ ์์ ์ธ ๊ฐ์ง๋ฅผ ํฉ์ณ์ ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ค๊ณ , ๊ฐ ๋ถ๋ถ์
2๏ธโฃ JWT์ ์์.
- JWT(JSON Web Token)๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๋ถ๋ถ์ด ํฉ์ณ์ง ํํ์ ๋ฌธ์์ด์ ๋๋ค.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- ์ด ๋ฌธ์์ด์ ํค๋(header), ํ์ด๋ก๋(payload), ์๋ช (signature)์ด ๊ฒฐํฉ๋ ๊ฒ์ด๋ฉฐ, ๊ฐ ๋ถ๋ถ์ Base64URL๋ก ์ธ์ฝ๋ฉ๋์ด ์์ต๋๋ค.
๐ค Base64URL์ด๋ ๋ฌด์์ผ๊น์?
Base64URL์ Base64 ์ธ์ฝ๋ฉ ๋ฐฉ์์ URL ๋ฐ ํ์ผ ์์คํ ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ณํํ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋๋ค.
์ผ๋ฐ์ ์ธ Base64 ์ธ์ฝ๋ฉ์ ๋ฌธ์์ด์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก๋ถํฐ ASCII ํ ์คํธ๋ก ๋ณํํ์ง๋ง, ๋ณํ๋ ๊ฒฐ๊ณผ์๋ URL์์ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋ฌธ์(+
,/
,=
)๊ฐ ํฌํจ๋ ์ ์์ด URL ์ธ์ฝ๋ฉ์ ์ถ๊ฐ๋ก ํด์ผ ํ๋ ๋ถํธํจ์ด ์์ต๋๋ค.
Base64URL์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ, Base64 ์ธ์ฝ๋ฉ์ URL๊ณผ ํ์ผ ๊ฒฝ๋ก์์ ์ฌ์ฉํ ์ ์๋๋ก ์์ ํ๊ฒ ๋ณ๊ฒฝํ ๋ฐฉ์์ ๋๋ค.
๐ค ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(Binary Data)
์ปดํจํฐ๊ฐ 2์ง์(0๊ณผ 1)๋ก ํํํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ํ ์คํธ ๋ฐ์ดํฐ์ ๋ฌ๋ฆฌ ์ฌ๋์ด ์ง์ ์ฝ๊ฑฐ๋ ํด์ํ๊ธฐ ์ด๋ ค์ด ๋ฐ์ดํฐ ํ์์ ๋๋ค.
์ปดํจํฐ ์์คํ ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๊ถ๊ทน์ ์ผ๋ก 0๊ณผ 1์ ์ด์ง์ ํํ๋ก ์ ์ฅ๋๊ณ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค, ์คํ ํ์ผ ๋ฑ ๋ค์ํ ํ์ผ ํ์์ด ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ํํ๋ฉ๋๋ค.
๐ค Base64๋ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ํ์์ผ๋ก ์ธ์ฝ๋ฉํ๊ธฐ ์ํ ๋ฐฉ์์ ๋๋ค.
์ปดํจํฐ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(์: ์ด๋ฏธ์ง, ์ค๋์ค ๋ฑ)๋ฅผ ASCII ๋ฌธ์๋ง๋๋ก ํํํ์ฌ ์ ์กํ๊ฑฐ๋ ์ ์ฅํ ์ ์๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
Base64๋ ์ฃผ๋ก ์ด๋ฉ์ผ, ์น API, URL์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
3๏ธโฃ JWT์ ํน์ง.
1๏ธโฃ ์๊ธฐ ํฌํจ ํ ํฐ.
- JWT(JSON Web Token)๋ ๋ชจ๋ ํ์ํ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ํฌํจํ๋ฏ๋ก, ์๋ฒ๊ฐ ํ ํฐ๋ง ํ์ธํด๋ ์ธ์ฆ ๋ฐ ๊ถํ ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์ธ์ ์ ์ฅ์ ์์ด๋ ์ฌ์ฉ์ ์ธ์ฆ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ค ์ธ์ ์ ์ฅ์(Session Store)๋ ๋ฌด์์ผ๊น์?
์ฌ์ฉ์ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์ฅ์๋ก, ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ๋ฆฐํ ์ํ๋ฅผ ์ ์งํ๊ฑฐ๋ ์ฌ์ฉ์์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ๋ณด๊ดํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์ธ์ ์ ์ฅ์(Session Store)๋ ์๋ฒ๊ฐ ์ฌ์ฉ์๋ณ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํ๋ฉฐ, ํ์ด์ง ๊ฐ ์ด๋์ด๋ ์๋ฒ ๊ฐ ์์ฒญ๊ฐ์๋ ์ฌ์ฉ์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ ์งํ ์ ์๋๋ก ๋์ต๋๋ค.
๐ค ์ธ์ ์ ๋ณด(Session Information)์ด๋ ๋ฌด์์ผ๊น์?
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํน์ ์ฌ์ฉ์์ ๊ด๋ จ๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋งํฉ๋๋ค.
์ธ์ ์ ๋ณด(Session Information)๋ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ์ ๋๋ถํฐ ๋ก๊ทธ์์ํ ๋๊น์ง ์ฌ์ฉ์์ ํ๋์ด๋ ์ํ๋ฅผ ์ ์งํ๊ณ ์ถ์ ํ๊ธฐ ์ํด ์๋ฒ์ ์ ์ฅ๋๋ฉฐ, ํ์ด์ง ์ด๋์ด๋ ์๋ก์ด ์์ฒญ์ด ๋ฐ์ํ๋๋ผ๋ ์ฌ์ฉ์ ์ํ๊ฐ ์ง์๋๋๋ก ๋์ต๋๋ค.
๐ค ์ธ์ (Session)์ด๋ ๋ฌด์์ผ๊น์?
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํน์ ์ฌ์ฉ์์ ์๋ฒ ๊ฐ์ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ๊ฐ์ ์๋ฏธํฉ๋๋ค.
์๋ฒ๊ฐ ์ฌ์ฉ์์ ์์ฒญ๋ค์ ํ๋์ ์ฐ์์ ์ธ ํ๋ฆ์ผ๋ก ์๋ณํ๊ณ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ถ์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ๊ณ ๋ก๊ทธ์์ํ๊ฑฐ๋ ์ผ์ ์๊ฐ ๋์ ํ๋์ด ์์ผ๋ฉด ์ธ์ (Session)์ด ์ข ๋ฃ๋๋ ๋ฐฉ์์ผ๋ก, ์ธ์ (Session)์ ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํด ์๋ ๋์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
2๏ธโฃ ๋ณ์กฐ ๋ฐฉ์ง.
- JWT(JSON Web Token)๋ ์๋ช (Signature)์ ํฌํจํ๊ณ ์์ด, ํ ํฐ์ด ๋ณ์กฐ๋์ง ์์์์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- ํ ํฐ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ์๋ช ๊ฒ์ฆ์ด ์คํจํ๋ฏ๋ก ์ ํจํ์ง ์์ ํ ํฐ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
3๏ธโฃ ์งง์ ์๋ช .
- JWT(JSON Web Token)๋ ๋ณด์์์ ์ด์ ๋ก ์ผ๋ฐ์ ์ผ๋ก ์งง์ ์ ํจ ๊ธฐ๊ฐ์ ๊ฐ์ต๋๋ค.
- ๋ง๋ฃ๋ ํ ํฐ์ ๋ค์ ์ธ์ฆ์ ์์ฒญํด์ผ ํ๋ฏ๋ก, ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ๋ฐ๊ธ์ ํตํด ๋ณด์์ ์ ์งํ ์ ์์ต๋๋ค.
4๏ธโฃ ๋น์ํ์ฑ(Stateless)
- JWT(JSON Web Token)๋ ์๋ฒ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋ ๋น์ํ์ฑ(Stateless) ํ ํฐ์ด๋ฏ๋ก, ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ด ์๊ตฌ๋๋ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ ๋๋ค.
๐ค ๋น์ํ์ฑ(Stateless)๋ ๋ฌด์์ผ๊น์?
๊ฐ ์์ฒญ์ด ์ด์ ์์ฒญ์ด๋ ์ดํ ์์ฒญ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ํน์ฑ์ ์๋ฏธํฉ๋๋ค.
๋น์ํ์ ์ธ ์์คํ ์์๋ ๊ฐ ์์ฒญ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์์ฒญ ์์ฒด์ ํฌํจ ๋์ด์ผ ํ๋ฉฐ, ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ด์ ์ํ๋ ์ธ์ (Session)์ ๊ธฐ์ตํ์ง ์๊ณ ๋งค๋ฒ ์๋ก์ด ์์ฒญ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ์๋ฒ๋ ํ ํฐ์ ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก, ์ธ์ (Session) ๊ด๋ฆฌ๊ฐ ํ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
4๏ธโฃ JWT์ ๋จ์ .
1๏ธโฃ ์๋ฒ์์ ํ ํฐ ๋ฌดํจํ๊ฐ ์ด๋ ต๋ค.
- JWT(JSON Web Token)๋ ์๋ฒ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์์ผ๋ฏ๋ก, ํ ํฐ์ ๋ฐ๊ธํ ํ ํน์ ํ ํฐ์ ์๋ฒ์์ ๋ฌดํจํํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๐ค ํ ํฐ ๋ฌดํจํ(Token Invalidation)๋ ๋ฌด์์ผ๊น์?
๊ธฐ์กด์ ๋ฐ๊ธ๋ ํ ํฐ์ ๋ ์ด์ ์ ํจํ์ง ์๋๋ก ๋ง๋๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
๋ฌดํจํ๋ ํ ํฐ์ ์ฌ์ฉ์๊ฐ ํด๋น ํ ํฐ์ ํตํด ์ธ์ฆ์ด๋ ๊ถํ์ ์์ฒญํ ๋ ๊ฑฐ๋ถ๋๋ฉฐ, ์ฃผ๋ก ๋ก๊ทธ์์ ์ฒ๋ฆฌ, ๋ณด์์์ ์ด์ , ํ ํฐ ์ฌ๋ฐ๊ธ ์์ ์ฌ์ฉ๋ฉ๋๋ค
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ธ๋๋ฆฌ์คํธ๋ ์งง์ ๋ง๋ฃ ๊ธฐ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
๐ค ๋ธ๋๋ฆฌ์คํธ(Blacklist)
ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํด ์ ๊ทผ์ด ์ ํ๋ ๋ชฉ๋ก์ผ๋ก, ํ์ฉ๋์ง ์๋ ํญ๋ชฉ์ด๋ ์ฌ์ฉ์๋ฅผ ์ฐจ๋จํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
IT ๋ณด์, ๋คํธ์ํฌ, ์ธ์ฆ ์์คํ ๋ฑ์์ ์์ฃผ ํ์ฉ๋๋ฉฐ, ๋ณด์๊ณผ ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ถ๋ฒ์ ์ด๊ฑฐ๋ ์ ๋ขฐํ ์ ์๋ ๋์์ ์๋ณํ๊ณ ์ฐจ๋จํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.JWT์์์ ๋ธ๋๋ฆฌ์คํธ(Blacklist)๋ ํน์ JWT ํ ํฐ์ ๋ฌดํจํํ๊ธฐ ์ํด ์ฐจ๋จ ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค.
๋ธ๋๋ฆฌ์คํธ์ ์ถ๊ฐ๋ ํ ํฐ์ ๋ ์ด์ ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด, ํด๋น ํ ํฐ์ผ๋ก ์ธ์ฆ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ธ์ฆ์ด ๊ฑฐ๋ถ๋๊ฑฐ๋ ์ ๊ทผ์ด ์ ํ๋ฉ๋๋ค.
์ด๋ ๋ก๊ทธ์์ ์ฒ๋ฆฌ, ํ ํฐ ์ ํจ๊ธฐ๊ฐ ์ด๋ด์ ๊ฐ์ ๋ฌดํจํ, ๋ณด์์ ์ด์ ๋ก ํ์ทจ๋ ํ ํฐ์ ์ฐจ๋จํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
2๏ธโฃ ํ ํฐ์ ํฌ๊ธฐ๊ฐ ํฌ๋ค.
- JWT(JSON Web Token)๋ ์๋ช
(Signature)๊ณผ ํ์ด๋ก๋(Payload)๋ฅผ ํฌํจํ๋ฏ๋ก ํฌ๊ธฐ๊ฐ ํฐ ํธ์
๋๋ค.
- ์ด๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๐ค ๋คํธ์ํฌ ํธ๋ํฝ(Network Traffic)์ด๋ ๋ฌด์์ผ๊น์?
๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์๋ฏธํฉ๋๋ค.
์ด๋ ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท์ ํตํด ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ํต์ , ์๋ฒ ๊ฐ ๋ฐ์ดํฐ ๊ตํ ๋ฑ ๋คํธ์ํฌ ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ฉฐ,
๋ณดํต ์ด๋น ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ผ๋ก ์ธก์ ํฉ๋๋ค.
๐ค ๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ ๋ฌด์์ผ๊น์?
๋คํธ์ํฌ ํธ๋ํฝ(Network Traffic)์์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋คํธ์ํฌ ์์์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๊ณผ์ ๊ณผ ๋ฐฉํฅ์ ์๋ฏธํฉ๋๋ค.
๋คํธ์ํฌ์ ๊ฐ ์ฅ์น๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์ด๋ํ๋ ๊ฒฝ๋ก๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฐ์ ํต์ , ๋ฐ์ดํฐ ์์ฒญ, ํ์ผ ์ ์ก ๋ฑ์ด ์ด๋ฃจ์ด์ง๋๋ค.
์ด ๋ฐ์ดํฐ ํ๋ฆ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ป๊ฒ ๋ฐ์ดํฐ๊ฐ ์ค๊ฐ๋์ง ๋ณด์ฌ์ฃผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ํจํท(Packet)์ด๋ผ๋ ๋จ์๋ก ๋ถํ ๋์ด ์ ์ก๋ฉ๋๋ค.
๐ค ๋ฐ์ดํฐ ํ๋ฆ ๋ฐฉํฅ์ด๋ ๋ฌด์์ผ๊น์?
๋ฐ์ดํฐ ํ๋ฆ์ ์ํฅ ํ๋ฆ(upload)๊ณผ ํํฅ ํ๋ฆ(download)์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
์ํฅ ํ๋ฆ(Upload)๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ฉฐ, ํ์ผ์ ์ ๋ก๋๋ฅผ ์๋ก ๋ค ์ ์์ต๋๋ค.
ํํฅ ํ๋ฆ(Download)๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ฉฐ, ์นํ์ด์ง ๋ก๋ฉ, ํ์ผ ๋ค์ด๋ก๋ ๋ฑ์ ์๋ก ๋ค ์ ์์ต๋๋ค.
๐ค ๋คํธ์ํฌ ์์์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๊ณผ์ ์ด๋ ๋ฌด์์ผ๊น์?
๋คํธ์ํฌ ์์์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๊ณผ์ ์ ๋ฐ์ ์(์ถ๋ฐ์ง)์์ ์์ ์(๋ชฉ์ ์ง)๊น์ง ๋ฐ์ดํฐ๋ฅผ ํจํท(Packet)์ผ๋ก ๋๋๊ณ , ์ด๋ฅผ ์ฌ๋ฌ ๋คํธ์ํฌ ์ฅ์น๋ฅผ ๊ฑฐ์ณ ์ ๋ฌํ๋ ์ผ๋ จ์ ์ ์ฐจ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด ๊ณผ์ ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋๋ฉฐ, ํ๋กํ ์ฝ ์คํ์ ํตํด ๋ฐ์ดํฐ๊ฐ ์ก์ ์ฅ์น์์ ์์ ์ฅ์น๋ก ์์ ํ๊ณ ์ ํํ๊ฒ ์ ์ก๋๋๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
๐ค ํ๋กํ ์ฝ ์คํ(Protocol Stack)์ด๋ ๋ฌด์์ผ๊น์?
๋คํธ์ํฌ ํต์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ ์ํด ๊ณ์ธต๋ณ๋ก ์ญํ ์ ๋๋ ํ๋กํ ์ฝ์ ๊ตฌ์ฑํ ์งํฉ์ ๋๋ค.
์ด ์คํ์ ๋คํธ์ํฌ ํต์ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์์ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋๋๊ณ , ๊ฐ ๊ณ์ธต์ ํน์ ์ญํ ์ ๋ถ์ฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ก, ์ฒ๋ฆฌ, ์์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ์ํธ ์์ฉ์ ํตํด ์ต์ข ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง์ ๋๋ฌํฉ๋๋ค.
3๏ธโฃ ํ์ทจ๋ ํ ํฐ์ ์ ์ฉ ๊ฐ๋ฅ์ฑ.
- ๋ง๋ฃ๋์ง ์์ JWT(JSON Web Token)๊ฐ ํ์ทจ๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ก ์์ฅํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด HTTPS๋ฅผ ํตํ ์ ์ก ๋ฐ ์งง์ ์ ํจ ๊ธฐ๊ฐ ์ค์ ์ด ์ค์ํฉ๋๋ค.
๐ค HTTPS๋ฅผ ํตํ ์ ์ก์ด๋ ๋ฌด์์ผ๊น์?
์น ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ํต์ ์ด ์ํธํ๋ ์ํ๋ก ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ ๋๋ค.
HTTPS๋ HTTP์ SSL(Secure Sockets Layer) ๋๋ TLS(Transport Layer Security) ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํ ํ๋กํ ์ฝ๋ก,
์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ฃผ๊ณ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ 3์๊ฐ ๋ณผ ์ ์๋๋ก ๋ณดํธํฉ๋๋ค.
์ด๋ฅผ ํตํด, ์น์ฌ์ดํธ ๋ก๊ทธ์ธ ์ ๋ณด, ์ ์ฉ์นด๋ ๋ฒํธ, ๊ฐ์ธ ์ ๋ณด ๋ฑ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ์์ ํ๊ฒ ์ ์ก๋ ์ ์์ต๋๋ค.
๐ค HTTP(HyperText Transfer Protocol)์ด๋ ๋ฌด์์ผ๊น์?
์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ๊ฐ์ ํ์ดํผํ ์คํธ(HyperText)๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ๋ก, ์ธํฐ๋ท ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ํ์ค ๊ท์ฝ์ ๋๋ค.
HTTP(HyperText Transfer Protocol)๋ ์น ํ์ด์ง, ์ด๋ฏธ์ง, ๋น๋์ค์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ ์กํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํฉ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ๊ณ , ์น ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
๐ค ํ์ดํผํ ์คํธ(HyperText)๋ ๋ฌด์์ผ๊น์?
ํน์ ๋จ์ด, ๋ฌธ์ฅ, ์ด๋ฏธ์ง ๋ฑ์ ํด๋ฆญํ๋ฉด ๊ด๋ จ๋ ๋ค๋ฅธ ๋ฌธ์๋ ํ์ด์ง๋ก ์ฐ๊ฒฐ๋๋ ๋ฐฉ์์ ํ ์คํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
์น์ ํต์ฌ์ ์ธ ๊ฐ๋ ์ผ๋ก, ํ์ดํผํ ์คํธ(HyperText)๋ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ์๋ก ๊ด๋ จ๋ ์ ๋ณด๋ ํ์ด์ง๋ก ์์ ๋กญ๊ฒ ์ด๋ํ ์ ์๊ฒ ๋์์ค๋๋ค.
์ผ๋ฐ ํ ์คํธ์ ๋ฌ๋ฆฌ, ํ์ดํผํ ์คํธ(HyperText)๋ ๋ฌธ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ์ฐ๊ฒฐํ๊ณ ์ฐธ์กฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋น์ ํ์ ์ธ ์ ๋ณด ํ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๐ค SSL(Secure Sockets Layer)๋ ๋ฌด์์ผ๊น์?
๋คํธ์ํฌ ์์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํ ๋ณด์ ํ๋กํ ์ฝ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ํต์ ์ ์ํธํํ์ฌ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐ์ฑ, ๋ฌด๊ฒฐ์ฑ, ์ธ์ฆ์ ๋ณด์ฅํฉ๋๋ค.
SSL(Secure Sockets Layer)์ ์น์ฌ์ดํธ๊ฐ HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ฉฐ, ์ฃผ๋ก ์ธํฐ๋ท ์์ ๋ฏผ๊ฐํ ์ ๋ณด(์: ๋ก๊ทธ์ธ ์ ๋ณด, ๊ฒฐ์ ์ ๋ณด) ๋ณดํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
๐ค TLS(Transport Layer Security)๋ ๋ฌด์์ผ๊น์?
์ธํฐ๋ท ์์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํ ๋ณด์ ํ๋กํ ์ฝ๋ก, SSL(Secure Sockets Layer)์ ํ์ ๋ฒ์ ์ ๋๋ค.
TLS(Transport Layer Security)๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํธํํ์ฌ ๊ธฐ๋ฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ํ์ฌ ๋๋ถ๋ถ์ HTTPS ์ฐ๊ฒฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
TLS(Transport Layer Security)๋ ๋ฐ์ดํฐ๊ฐ ์ค๊ฐ์ ํ์ทจ๋๊ฑฐ๋ ์กฐ์๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์กํ ์ ์๋๋ก ๋์ต๋๋ค.
5๏ธโฃ JWT์ ์ฌ์ฉ ์์(Java)
- Java์์ JWT๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, JJWT(Java JWT) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ์ ์์ฑํ๊ณ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;
public class JwtExample {
private static final String SECRET_KEY = "mySecreKey";
// JWT ํ ํฐ ์์ฑ
public static String createToken(String subject) {
return Jwts.builder()
.setSubject(subject) // ์ฌ์ฉ์ ์๋ณ์(id)
.setIssuedAt(new Date()) // ๋ฐํ ์๊ฐ
.setExpiration(new Date(System.currentTimeMillis() * 3600000)) // ๋ง๋ฃ ์๊ฐ(expiration)-1์๊ฐ ํ
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) // ์๋ช
์๊ณ ๋ฆฌ์ฆ ๋ฐ ํค
.compact();
}
// JWT ํ ํฐ ๊ฒ์ฆ ๋ฐ ์ ๋ณด ์ถ์ถ
public static Claims parseToken(String token) {
return Jwts.parse()
.setSigningKey(SECRET_KEY)
.parseClaimsJwt(token)
.getBody();
}
public static void main(String[] args) {
// ํ ํฐ ์์ฑ
String token = createToken("user123");
System.out.println("JWT Token: " + token);
// ํ ํฐ ๊ฒ์ฆ ๋ฐ ์ ๋ณด ์ถ์ถ
Claims claims = parseToken(token);
System.out.println("Subject: " + clamis.getSubject());
}
}
๐ ์ค๋ช .
- createToken ๋ฉ์๋๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก JWT ํ ํฐ์ ์์ฑํฉ๋๋ค.
- parseToken ๋ฉ์๋๋ ์์ฑ๋ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ํ์ด๋ก๋์ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
- ์ด ์์ ์์๋
user123
์ด๋ผ๋ ์ฌ์ฉ์ ์๋ณ์๋ก ํ ํฐ์ ์์ฑํ๊ณ , ์์ฑ๋ ํ ํฐ์์ ์ฌ์ฉ์ ์๋ณ์(subject)๋ฅผ ์ถ์ถํฉ๋๋ค.
6๏ธโฃ JWT์ ์ฌ์ฉ ์ฌ๋ก.
1๏ธโฃ ์ฌ์ฉ์ ์ธ์ฆ.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ธํ๋๋ฐ JWT๋ฅผ ์ฌ์ฉํ์ฌ, ์ถ๊ฐ์ ์ธ ์ธ์ ๊ด๋ฆฌ ์์ด ์ธ์ฆ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
2๏ธโฃ API ์ธ์ฆ.
- RESTful API์์๋ ํด๋ผ์ด์ธํธ๊ฐ JWT๋ฅผ ํฌํจํ์ฌ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ํ ํฐ์ ๊ฒ์ฆํ์ฌ ํด๋ผ์ด์ธํธ์ ๊ถํ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ค RESTful API๋ ๋ฌด์์ผ๊น์?
REST(Representational State Transfer) ์ํคํ ์ฒ ์คํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋ API๋ก, ์น์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๊ท์น๊ณผ ์์น์ ๋ฐ๋ฅด๋ API์ ๋๋ค.
RESTful API๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์น์ ๋ฆฌ์์ค(Resource)๋ฅผ URL์ ํตํด ์ ๊ทผํ๊ณ , HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ์ฌ์ฉํด ํด๋น ๋ฆฌ์์ค๋ฅผ ์กฐ์ํฉ๋๋ค.
๐ค REST(Representational State Transfer) ์ํคํ ์ฒ๋ ๋ฌด์์ผ๊น์?
์น ๊ธฐ๋ฐ์ ๋ถ์ฐ ์์คํ ์ ์ค๊ณํ๊ธฐ ์ํ ์ํคํ ์ฒ ์คํ์ผ๋ก, ๋ฆฌ์์ค(Resource)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ๋๋ค.
REST๋ HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์น์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ๊ฒ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๊ถ์ฅ๋๋ ์์น๊ณผ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค.
REST ์ํคํ ์ฒ ์คํ์ผ์ ์ฃผ๋ก ์น API ์ค๊ณ์ ์ ์ฉ๋๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
REST๋ ํน์ ํ ํ์ค์ด๋ ํ๋กํ ์ฝ์ด ์๋๋ฉฐ, ์ค๊ณ ์์น์ ๋ฐ๋ฅธ ์น ์๋น์ค ๊ตฌ์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
๐ค REST์์์ ๋ฆฌ์์ค(Resource)๋ ๋ฌด์์ผ๊น์?
์น์์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
REST ์ํคํ ์ฒ์์๋ ๋ฆฌ์์ค(Resource)๋ฅผ ํตํด ์น ์๋น์ค๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ์ถ์ํํ ๊ฐ์ฒด๋ก, ๋ฆฌ์์ค๋ URI(Uniform Resource Identifier)๋ฅผ ํตํด ๊ณ ์ ํ๊ฒ ์๋ณ๋ฉ๋๋ค.
RESTful API์์๋ ์ด๋ฌํ ๋ฆฌ์์ค(Resource)์ ๋ํ ๋ฐ์ดํฐ๋ฅผ HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ํตํด ์ ๊ทผํ๊ณ ์กฐ์ํฉ๋๋ค.
๐ค URI(Uniform Resource Identifier)๋ ๋ฌด์์ผ๊น์?
์น์์ ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ณ ์์น๋ฅผ ์ง์ ํ๋ ๊ณ ์ ํ ๋ฌธ์์ด์ ๋๋ค.
์น ๋ฆฌ์์ค๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ์ฌ ์ ๊ทผํ ์ ์๋๋ก ์ค๊ณ๋ URI(Uniform Resource Identifier)๋ ์น ์ฃผ์๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ,
์ฐ๋ฆฌ๊ฐ ํํ ์ ํ๋ URL๋ URI์ ํ ์ข ๋ฅ์ ๋๋ค.
URI๋ RESTful API์์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ์ค์ํ ์์๋ก, ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ ์ฐพ์ ์ ์๊ฒ ํฉ๋๋ค.
๐ค ๋ถ์ฐ ์์คํ (Distributed System)์ด๋ ๋ฌด์์ผ๊น์?
์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ ์๋ฒ๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด ํ๋์ ์์คํ ์ฒ๋ผ ๋์ํ๋ ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค.
๋ถ์ฐ ์์คํ (Distributed System)์์๋ ํ๋์ ์์ ์ ์ฌ๋ฌ ์ฅ์น์์ ๋๋์ด ์ฒ๋ฆฌํ์ฌ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋์ ํจ์จ์ฑ์ ๋์ด๊ณ , ๋จ์ผ ์ฅ์ ์ง์ ์ ์ค์ฌ ์์คํ ์ ์ ๋ขฐ์ฑ์ ๊ฐํํ ์ ์์ต๋๋ค.
3๏ธโฃ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ .
- JWT๋ ์๋ฒ ๊ฐ ์ธ์ฆ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ๊ฐ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก JWT๋ฅผ ๊ฒ์ฆํ ์ ์์ผ๋ฏ๋ก, ์์ ํ๊ณ ํจ์จ์ ์ธ ์ธ์ฆ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๐ค ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ(Microservices Architecture)๋ ๋ฌด์์ผ๊น์?
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋๋ ์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค.
๊ฐ ๋ง์ดํฌ๋ก์๋น์ค(Microservices)๋ ํน์ ๊ธฐ๋ฅ์ด๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํํ๋ฉฐ, ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ๋ฐฐํฌ, ํ์ฅ, ์ ์ง๋ณด์ํ ์ ์๋ ํน์ฑ์ด ์์ต๋๋ค.
์ด ์ํคํ ์ฒ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฐ์ ๊ณผ ํ์ฅ์ฑ์ ๊ทน๋ํํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
7๏ธโฃ ์์ฝ.
- JWT(JSON Web Token)์ ์์ ํ๊ณ ๊ฐํธํ ์ธ์ฆ๊ณผ ์ ๋ณด ์ ์ก์ ์ํ ํ ํฐ์ผ๋ก, ๋์งํธ ์๋ช ์ ํตํด ํ ํฐ์ด ๋ณ์กฐ๋์ง ์์์์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- JWT๋ ์ฃผ๋ก ์ฌ์ฉ์ ์ธ์ฆ๊ณผ API ์ ๊ทผ ์ ์ด ๋ฑ์ ์ฌ์ฉ๋๋ฉฐ, ์๊ธฐ ํฌํจ ํ ํฐ์ด๋ฏ๋ก ๋ณ๋์ ์ธ์ ์ ์ฅ์๊ฐ ํ์ํ์ง ์์ต๋๋ค.
- Java์์ JWT๋ฅผ ์์ฑํ๊ณ ๊ฒ์ฆํ๋ ค๋ฉด JJWT ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐํธํ๊ฒ ํ ํฐ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.