๐ช ์ฟ ํค
์ฟ ํค๋ ์น ์ฌ์ดํธ ์๋ฒ์์ ์ ์ ์ ์ปดํจํฐ๋ก ๋ณด๋ด๋ ์์ ์์ ํ์ผ์ ๋๋ค. ํด๋น ์น์ ํ์ํ ์ ๋ณด๋ค์ ๊ฐ์ง๊ณ ์๋ค๊ฐ ํ์ํ ์ด๋ฒคํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
์ฒ์ ์ฟ ํค๊ฐ ๋ง๋ค์ด์ง ๊ฑด, ์ ํํ ํต๊ณ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์ ์๋ค๊ณ ํฉ๋๋ค. ๋ฐฉ๋ฌธ์๊ฐ ์ด์ ์๋ ์๋ ๋ฐฉ๋ฌธ์์ธ์ง, ์ฒ์ ์จ ๋ฐฉ๋ฌธ์์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํจ์ด์๋ค๊ณ ํด์. ์ฟ ํค๊ฐ ์๋ ์ด์ ์๋ ํ ๋ช ์ ์ ์ ๊ฐ index ํ์ด์ง๋ฅผ 100๋ฒ reload ํ๋ฉด 100๋ช ์ด ๋ฐฉ๋ฌธํ๋ ๊ฒ์ผ๋ก ํํ๋์๋ค๊ณ ํด์. ๋ฐฉ๋ฌธ์๋ฅผ ํ์ธํ๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๊ตฌ๋ถํ ์ ์๊ฒ ๋ ๊ฑฐ์ฃ . ๋จน๊ณ ๋จ์ ์ฟ ํค ๋ถ์ค๋ฌ๊ธฐ ๋ง๋ฅ ์์ ํ์ผ๋ค์ด๋ผ ํ์ฌ cookie๋ผ๋ ์ด๋ฆ์ด ๋ถ์๋ค๊ณ ํฉ๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง cookie๋ ๋จ์ํ ํต๊ณ๊ฐ๋ง ๋ด๋ ๊ฒ์ผ๋ก ๋๋์ง ์์์ต๋๋ค. ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธ์ด ์ง์ ๋๋ ๊ฒ๋, ํ๋ฃจ ๋์ ๊ด๊ณ ๊ธ์ ์จ๊ธฐ๋ ๊ฒ๋, ์ฅ๋ฐ๊ตฌ๋์ ์ํ๋ค์ด ๊ณ์ ์ ์ฅ๋์ด ์๋ ๊ฒ๋ ๋ชจ๋ cookie ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด์ฃ . ์ ์ ๊ฐ ์ฌ์ฉํ ๊ฒ์์ ๋ณด๋ ๊ตฌ๋งค ์์ดํ ์ ์ ์ฅํด๋๋ค๋ฉด ์ ์ ๊ฐ ์ด๋ค ๊ฒ์ ๋ง์ด ์ฐพ๊ณ ์๋์ง, ๋ฌด์์ ์ข์ํ๋ ์ง ๋ฑ์ ์ ์ ์๊ฒ ์ฃ ? ๊ทธ๋งํผ ์น ํ์ด์ง์์ cookie ๋ ๋งค์ฐ ์ค์ํ๊ณ ์ ์ฉํ ๊ฒ์ ๋๋ค.
ํ์ง๋ง cookie ์๋ ๋จ์ ์ ์กด์ฌํ์ต๋๋ค. cookie ์ ํ์ผ๋ค์ ๋ชจ๋ ์ ์ ์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ์ด ๋ฉ๋๋ค. ์ฆ ์ ์ ๊ฐ ์ํ๋ค๋ฉด ์ญ์ ๋ ํ๊ณ , ๋ณ๊ฒฝํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฑฐ์ฃ . ๋จ์ ๋ฐ์ดํฐ์ผ ๊ทธ๋ ๋ค ์น๋๋ผ๋ ๊ฐ์ธ์ ๋ณด ๋ฑ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ cookie ์ ๋ ์ ์๊ฒ ๋ ๊ฑฐ์ฃ . ๊ทธ๋ ๊ฒ session ๊ณผ cookie ๋ฅผ ํจ๊ป ๋ณ์ฉํ์ฌ ์ฐ๋ ์ธ์ ์ฟ ํค ๋ฐฉ์์ด ๊ตฌํ๋์์ต๋๋ค.
ไท ์ธ์
session ์ญ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๋ค๋ ์ ์์๋ cookie ์ ๊ฐ์ต๋๋ค. cookie ๊ฐ client-side ์ ๋ฐ์ดํฐ ์ ์ฅ์๋ผ๋ฉด, session ์ server-side ์ ๋ฐ์ดํฐ ์ ์ฅ์์ด์ฃ .
๊ฐ์ธ์ ๋ณด์ ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ session ์ ๋ชจ์๋๊ณ ์ธ์ฆ ์ ์ฐจ๊ฐ ์๋ฃ๋๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ ์ฐจ๊ฐ ์๋ฃ๋์๋ค๋ ํ์ธ ๋ฐ์ดํฐ๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ด์ฃ . ๋ฌผ๋ก cookie ์๋ ๋๊ตฌ๋ ์์๋ณด์ง ๋ชปํ๋๋ก ํด์ํ ๋ ๊ฐ์ผ๋ก์. ์ด๋ฅผ ํตํด cookie ์ ์ฅ์ ์ ๊ณ์ ์ด์ด๊ฐ๋ฉด์, ๋จ์ ์ ๋ณด์ํ ์ ์๊ฒ ๋์์ต๋๋ค.
session ์ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋๋์คํฌ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ๋ค์ํ๊ฒ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๋ชจ๋ ์ฅ๋จ์ ์ด ์กด์ฌํ์ด์. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ฐ์๋ก ์ฉ๋ ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง๋ง ์์ฒญ-์๋ต์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋์ด๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ๋๋ก ์์ฒญ-์๋ต์ ๋น ๋ฅด์ง๋ง ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์๊ฐ ์์ฃ .
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋ํ๋ ๊ฒ์ด JWT ์ ๊ฐ์ token ๋ฐฉ์์ ๋๋ค. token ์ ์ธ์ฆ ๊ณผ์ ์ ์ธ์ ์ฟ ํค์ ๋น์ทํ์ง๋ง, ์๋ฒ์ ํ์ธ ๋ฐ์ดํฐ๋ฅผ ๋จ๊ธฐ์ง ์์ต๋๋ค. ๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ์ดํ ์ธ์ฆ ๊ณผ์ ์ cookie ์ ๋จ๊ฒจ์ง ํด์ ํ ํฐ๋ง์ผ๋ก๋ ํ์ธ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์์ฒญ-์๋ต ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ง๋๋ค.
๐ค ๊ทธ๋ผ ์ด์ JWT๋ง ์ฐ๋ฉด ๋๋๊ฐ.
์๋์. ์ผ๋จ JWT ๋ฅผ ํตํด cookie ๋ง์ผ๋ก ์ฅ๊ธฐ์ ์ธ ๋ก๊ทธ์ธ ์ ์ง๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์ด๊ฒ๋ ์๋ฒฝํ๋ค๊ณ ๋ณผ ์๋ ์์ต๋๋ค.
๋ทํ๋ฆญ์ค๋ฅผ ์๊ฐํด๋ณผ๊น์? ์ค๋งํธํฐ์ผ๋ก ๋ณด๋ ๊ฒ์ ์ข ๋ ํฐ ํ๋ฉด์์ ๋ณด๊ธฐ ์ํด ํ๋ธ๋ฆฟ์ผ๋ก ํ๋กํ ์ ์์ ํ๋ค๊ณ ํฉ์๋ค. ๋ทํ๋ฆญ์ค๋ ์ ์ ์ ํ๊ฒฝ์ ๋ณํ๊ฐ ์์์ ์บ์นํ๊ณ ํ๋ธ๋ฆฟ์ ์ ์์ด ์๋ฃ๋จ๊ณผ ๋์์ ๋ชจ๋ฐ์ผ์ ๋ก๊ทธ์์ ํ๋ฉด์ผ๋ก ๋ณํ๊ฒ ๋์ฃ . ์ด๋ฌํ ์ฑ์์๋ server ์ ํ๊ฒฝ์ด ๋ณํ๋์๋ค๋ ๋ฐ์ดํฐ๋ฅผ ๋จ๊ฒจ์ผ ํ๊ธฐ ๋๋ฌธ์ JWT ๋ณด๋ค๋ ์ธ์ -์ฟ ํค ๋ฐฉ์์ด ํจ์ฌ ์ ํฉํฉ๋๋ค. ์ด๋ป๊ฒ ํด์ token ๋ฐ์ดํฐ๊ฐ ํ์ทจ๋๋ค๋ฉด server ์์ ์ปจํธ๋กค ํ ์ ์๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ง๋ฃ๋ ์ง๊ฐ ๋ง๋ฅ ๊ธฐ๋ค๋ฆด ์ ๋ฐ์ ์๋ ๊ฒ๋ ๋จ์ ์ ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ๋ ์ธ์ -์ฟ ํคserver ์์ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ต๊ทผ์๋ ๋ฉ๋ชจ๋ฆฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ access, refresh ํ ํฐ ๋ฑ์ ํตํด ํด๋น ์ธ์ฆ๊ณผ์ ์ ๋ถ์กฑํ ๋ถ๋ถ๋ค์ ์ฐจ์ธฐ ๊ฐ์ ํ๊ณ ์๋ ์ํฉ์ ๋๋ค. ๋ฌผ๋ก ๋ช ํํ ๋จ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ ์๋๊ธฐ์ ๊ฐ ์ธ์ฆ ๋ฐฉ์์ ์ด๋ก ์ ์ผ๋ก ๊ณต๋ถํ๊ณ ๊ตฌํํ๋ ์ฑ์ ๋ง๋ ๋ฐฉ์์ ์ฑํํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ค์.
๐ ์คํฐํค ์ธ์
- ์ฟ ํค ๋๋ ์ธ์ ์ ์ฌ์ฉํ์ฌ ํธ๋ํฝ์ ๋ถ์ฐํ๋ ๊ธฐ๋ฅ์ ๋๋ค
- Sticky Session์ด ๋์ค๊ฒ ๋ ๋ฐฐ๊ฒฝ
- ์ผ๋ฐ์ ์ผ๋ก ๋์ฉ๋ ํธ๋ํฝ์ ์ฅ์ ์์ด ์ฒ๋ฆฌํ๊ธฐ์ํด ์ฌ๋ฌ ๋์ ์๋ฒ์ ์ ์ ํ ํธ๋ํฝ์ ๋ถ๋ฐฐํ๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ํ์ํ ์๋น์ค์๋ ์ธ์ ๊ด๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์๋ ์์ต๋๋ค.
- ๋จผ์ ๋ก๊ทธ์ธ ์์ฒญ์ A ์๋ฒ๋ก ๋ณด๋ ๋๋ค.
- A ์๋ฒ์ ์ธ์ ์๋ martin์ด๋ผ๋ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
- A ์๋ฒ์์๋ ๋ก๊ทธ์ธ ์ฑ๊ณต์ด๋ผ๋ ์๋ต์ ๋ณด๋ ๋๋ค.
- ๋์ผํ ํด๋ผ์ด์ธํธ๋ ๋ก๋ ๋ฐธ๋ฐ์์ ์๋ก์ด ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ๊ทธ๋ฌ๋ ์ด ์์ฒญ์ C ์๋ฒ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- C ์๋ฒ์ ์ธ์ ์๋ ์ด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๋ผ๋ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์, ์กฐํ ์คํจ ํ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋๋ก ์๋ต์ ๋ณด๋ ๋๋ค.
์์ ์ค๋ช ๊ณผ ๊ฐ์ด, ๋ฐฉ๊ธ ๋ก๊ทธ์ธ์ ํ๋๋ฐ ๋ค์ ๋ก๊ทธ์ธ์ ํ๋ผ๋ ์ฌํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ธ์ ๊ด๋ฆฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Sticky Session์ ์ฌ์ฉํฉ๋๋ค.
Sticky Session์ ๊ฐ๋
Sticky Session์ด๋ ํน์ ์ธ์ ์ ์์ฒญ์ ์ฒ์ ์ฒ๋ฆฌํ ์๋ฒ๋ก๋ง ์ ์กํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฒซ ์์ฒญ ์ดํ์ ๋ชจ๋ ์์ฒญ์ ํน์ฑ ์๋ฒ๋ก ๊ณ ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ ์ ๊ด๋ฆฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Sticky Session์ ์ ์งํ๊ธฐ ์ํด Cookie๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํด๋ผ์ด์ธํธ์ IP trackingํ๋ ๋ฐฉ์์ด ์์ต๋๋ค.
Sticky Session์ ๋จ์
- ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ์๋ํ๋๋ก ์ ๋์ํ์ง ์์ ์๋ ์์ต๋๋ค.
- ํน์ ์๋ฒ๋ง ๊ณผ๋ถํ๊ฐ ์ฌ ์ ์์ต๋๋ค.
- ํน์ ์๋ฒ Fail์ ํด๋น ์๋ฒ์ ๋ถ์ด์๋ ์ธ์ ๋ค์ด ๋ชจ๋ ์์ค๋ ์ ์์ต๋๋ค.
Sticky Session์ ๋จ์ ์ ํด๊ฒฐํ๋ ๋ฐฉ์
Session๋ค์ ํ๋๋ก ๋ฌถ์ด ํด๋ฌ์คํฐ๋ก ๊ด๋ฆฌ
๊ฐ WAS๋ค์ ์ธ์ ์ ๊ฐ๊ฐ ๊ฐ์ง๊ณ ์์ง๋ง, ์ด๋ฅผ ํ๋๋ก ๋ฌต์ด ํ๋์ ํด๋ฌ์คํฐ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ์ํ์์ ํ๋์ WAS๊ฐ fail์ด ๋ฐ์ํ๋ฉด ํด๋น WAS๊ฐ ๋ค๊ณ ์๋ ์ธ์ ์ ๋ค๋ฅธ WAS๋ก ์ด๋๋์ด ๊ด๋ฆฌ๋ฉ๋๋ค. ๋ค๋ง, ๊ฐ ์๋ฒ๋ง๋ค ์ธ์ ํด๋ฌ์คํฐ๋ง ๋ฐฉ์์ด ๋ค๋ฅด๊ณ ์ง์ํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ WAS์ session clusturing ๋ถ๋ถ์ ๋ณด๊ณ ํ์ธํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฉ์์ ์๋ก์ด ์๋ฒ๊ฐ ํ๋ ์ถ๊ฐ๋ ๋๋ง๋ค ๊ธฐ์กด์ ์กด์ฌํ๋ WAS์ ์๋ก์ด ์๋ฒ์ IP/PORT๋ฅผ ์ ๋ ฅํด์ ํด๋ฌ์คํฐ๋ง ํด์ค์ผ ํ๋ ๋จ์ ์ด ์์ต๋๋ค.
Session Server ๋ถ๋ฆฌ
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ฐฉ์์ ์๋ก์ด ์๋ฒ๋ฅผ ์์ฑํ๋๋ผ๋ ํด๋น ์๋ฒ์๋ง ์ธ์ ์๋ฒ์ ์ ๋ณด๋ฅผ ์ ์ด์ฃผ๊ณ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ์๋ฒ์ ์์ ์ด ๋ฐ์ํ์ง ์๋๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋ค๋ง ์ธ์ ์๋ฒ์ ์ค์์ฑ์ด ์ฌ๋ผ๊ฐ๊ณ , ์ธ์ ์๋ฒ๊ฐ ์ฃฝ๋ ์๊ฐ ๋ชจ๋ ์ธ์ ์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ธ์ ์๋ฒ์ ๋ค์คํ๋ ๊ณ ๋ คํด๋ณด์์ผ ํ ์ ์ ๋๋ค.
Reference : https://kchanguk.tistory.com/146
๐ฎ JWT
JWT๋ JSON Web Token์ ์ฝ์๋ก ์ ์ ์๋ช ๋ URL-safe (URL๋ก ์ด์ฉํ ์์๋ ๋ฌธ์ ๋ง ๊ตฌ์ฑ๋)์ JSON์ ๋๋ค.
์ ์ ์๋ช ์ JSON ์ ๋ณ์กฐ๋ฅผ ์ฒดํฌ ํ ์ ์๊ฒ ๋์ด ์์ต๋๋ค.
JWT๋ ์์ฑ ์ ๋ณด (Claim)๋ฅผ JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ํํํ ํ ํฐ์ผ๋ก RFC7519 ํ์ค ์ ๋๋ค.
JWT๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ Http ๋ฆฌํ์คํธ ํค๋์ JSON ํ ํฐ์ ๋ฃ์ ํ ์๋ฒ๋ ๋ณ๋์ ์ธ์ฆ ๊ณผ์ ์์ด ํค๋์ ํฌํจ๋์ด ์๋ JWT ์ ๋ณด๋ฅผ ํตํด ์ธ์ฆํฉ๋๋ค.
์ด๋ ์ฌ์ฉ๋๋ JSON ๋ฐ์ดํฐ๋ URL-Safe ํ๋๋ก URL์ ํฌํจํ ์ ์๋ ๋ฌธ์๋ง์ผ๋ก ๋ง๋ญ๋๋ค.
JWT๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋น๋ฐํค ๋๋ RSA๋ฅผ ์ด์ฉํ Public Key/ Private Key ์์ผ๋ก ์๋ช ํ ์ ์์ต๋๋ค.
JWT๋ ์ธ ํํธ๋ก ๋๋์ด์ง๋ฉฐ, ๊ฐ ํํธ๋ ์ ๋ก ๊ตฌ๋ถํ์ฌ xxxxx.yyyyy.zzzzz ์ด๋ฐ์์ผ๋ก ํํ๋ฉ๋๋ค. ์์๋๋ก ํค๋ (Header), ํ์ด๋ก๋ (Payload), ์๋ช (Sinature)๋ก ๊ตฌ์ฑํฉ๋๋ค. Base64 ์ธ์ฝ๋ฉ์ ๊ฒฝ์ฐ “+”, “/”, “=”์ด ํฌํจ๋์ง๋ง JWT๋ URI์์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก URL-Safe ํ Base64url ์ธ์ฝ๋ฉ์ ์ฌ์ฉํฉ๋๋ค.
Header๋ ํ ํฐ์ ํ์ ๊ณผ ํด์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ฒซ์งธ๋ ํ ํฐ์ ์ ํ (JWT)์ ๋ํ๋ด๊ณ , ๋ ๋ฒ์งธ๋ HMAC, SHA256 ๋๋ RSA์ ๊ฐ์ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ๋ด๋ ๋ถ๋ถ์ ๋๋ค. Payload๋ ํ ํฐ์ ๋ด์ ํด๋ ์(claim) ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. Payload ์ ๋ด๋ ์ ๋ณด์ ํ ‘์กฐ๊ฐ’ ์ ํด๋ ์์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด๋ name / value ์ ํ ์์ผ๋ก ์ด๋ค์ ธ์์ต๋๋ค. ํ ํฐ์๋ ์ฌ๋ฌ๊ฐ์ ํด๋ ์ ๋ค์ ๋ฃ์ ์ ์์ต๋๋ค.ํด๋ ์์ ์ ๋ณด๋ ๋ฑ๋ก๋ (registered) ํด๋ ์, ๊ณต๊ฐ (public) ํด๋ ์, ๋น๊ณต๊ฐ (private) ํด๋ ์์ผ๋ก ์ธ ์ข ๋ฅ๊ฐ ์์ต๋๋ค.๋ง์ง๋ง์ผ๋ก Signature๋ secret key๋ฅผ ํฌํจํ์ฌ ์ํธํ๋์ด ์์ต๋๋ค.
1. ์ฌ์ฉ์๊ฐ id์ password๋ฅผ ์ ๋ ฅํ์ฌ ๋ก๊ทธ์ธ์ ์๋ํฉ๋๋ค.
2. ์๋ฒ๋ ์์ฒญ์ ํ์ธํ๊ณ secret key๋ฅผ ํตํด Access token์ ๋ฐ๊ธํฉ๋๋ค.
3. JWT ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ ํฉ๋๋ค.
4. ํด๋ผ์ด์ธํธ์์ API ์ ์์ฒญํ ๋ ํด๋ผ์ด์ธํธ๊ฐ Authorization header์ Access token์ ๋ด์์ ๋ณด๋ ๋๋ค.
5. ์๋ฒ๋ JWT Signature๋ฅผ ์ฒดํฌํ๊ณ Payload๋ก๋ถํฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ธํด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
6. ํด๋ผ์ด์ธํธ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ํฐ๊ธฐ๋ฐ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์ธ์ฆ์ด ํ์ํ ๊ฒฝ๋ก์ ์ ๊ทผํ ๋ ์๋ฒ ์ธก์ Authorization ํค๋์ ์ ํจํ JWT ๋๋ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
JWT์๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ ํฐ์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ณผ ๊ฐ์ ์๋ฒ์์ ์ปค๋ฎค๋์ผ์ด์ ์ค๋ฒ ํค๋๋ฅผ ์ต์ํ ํ ์ ์์ต๋๋ค.
Cross-Origin Resource Sharing (CORS)๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ JWT๋ฅผ ์ฑ์ฉ ํ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ ๋๋ฉ์ธ์์ API๋ฅผ ์ ๊ณตํ๋๋ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก JWT ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ ์ ์์ ๊ฐ์ ํ๋ก์ธ์ค๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ฒ์ ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ ๋ Access token๊ณผ Refresh token์ด ๋ชจ๋ ๋ฐ๊ธ๋์ด์ผ ํฉ๋๋ค.
JWT ์ฅ์
JWT ์ ์ฃผ์ํ ์ด์ ์ ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ ํ ํฐ ์์ฒด์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ธ์ฆ ์ ์ฅ์๊ฐ ํ์์๋ค๋ ๊ฒ์ ๋๋ค. ๋ถ์ฐ ๋ง์ดํฌ๋ก ์๋น์ค ํ๊ฒฝ์์ ์ค์ ์ง์ค์ ์ธ์ฆ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ์ง ์๋ ์ฌ์ด ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋ณ ๋ง์ดํฌ๋ก ์๋น์ค์๋ ํ ํฐ ๊ฒ์ฆ๊ณผ ๊ฒ์ฆ์ ํ์ํ ๋น๋ฐ ํค๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ํ ๋ฏธ๋ค์จ์ด๊ฐ ํ์ํฉ๋๋ค. ๊ฒ์ฆ์ ์๋ช ๋ฐ ํด๋ ์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋งค๊ฐ ๋ณ์๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ๊ณผ ํ ํฐ์ด ๋ง๋ฃ๋๋ ๊ฒฝ์ฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.ํ ํฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ช ๋์๋์ง ํ์ธํ๋ ๊ฒ์ CPU ์ฌ์ดํด์ ํ์๋กํ๋ฉฐ IO ๋๋ ๋คํธ์ํฌ ์ก์ธ์ค๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ ์ต์ ์น ์๋ฒ ํ๋์จ์ด์์ ํ์ฅํ๊ธฐ๊ฐ ์ฝ์ต๋๋ค.
JSON ์น ํ ํฐ์ ์ฌ์ฉ์ ๊ถ์ฅํ๋ ๋ช ๊ฐ์ง ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
• URL ํ๋ผ๋ฏธํฐ์ ํค๋๋ก ์ฌ์ฉ
• ์ํ ์ค์ผ์ผ์ด ์ฉ์ด
• ๋๋ฒ๊น ๋ฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ด
• ํธ๋ํฝ ๋ํ ๋ถ๋ด์ด ๋ฎ์
• REST ์๋น์ค๋ก ์ ๊ณต ๊ฐ๋ฅ
• ๋ด์ฅ๋ ๋ง๋ฃ
• ๋ ๋ฆฝ์ ์ธ JWT
JWT ๋จ์
• ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐ์ํ๋๋ผ๋ ํ ํฐ์ ์ง์ ์ ์ฉํ ์ ์์ต๋๋ค.
• ๋ ๋ง์ ํ๋๊ฐ ์ถ๊ฐ๋๋ฉด ํ ํฐ์ด ์ปค์ง ์ ์์ต๋๋ค.
• ๋น์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ํฐ์ ๊ฑฐ์ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ ์ก๋๋ฏ๋ก ๋ฐ์ดํฐ ํธ๋ํฝ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ JWT ๊ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๋ ์ ์์ต๋๋ค.
• ํ์ ์ธ์ฆ:
JWT ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํํ ์๋๋ฆฌ์ค ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด, ์๋ฒ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.๊ทธ ํ, ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์์ฒญ์ ํ ๋ ๋ง๋ค JWT๋ฅผ ํฌํจํ์ฌ ์ ๋ฌํฉ๋๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ ๋ฐ์๋ ๋ง๋ค, ํด๋น ํ ํฐ์ด ์ ํจํ๊ณ ์ธ์ฆ๋๋์ง ๊ฒ์ฆ์ ํ๊ณ , ์ฌ์ฉ์๊ฐ ์์ฒญํ ์์ ์ ๊ถํ์ด ์๋์ง ํ์ธํ์ฌ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฒ์์๋ ์ฌ์ฉ์์ ๋ํ ์ธ์ ์ ์ ์ง ํ ํ์๊ฐ ์์ต๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋์ด์๋์ง ์๋์ด์๋์ง ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๊ณ , ์ฌ์ฉ์๊ฐ ์์ฒญ์ ํ์๋ ํ ํฐ๋ง ํ์ธํ๋ฉด ๋๋ฏ๋ก ์ธ์ ๊ด๋ฆฌ๊ฐ ํ์ ์์ด์ ์๋ฒ ์์๊ณผ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
• ์ ๋ณด ๊ต๋ฅ:
JWT๋ ๋ ๊ฐ์ฒด ์ฌ์ด์์ ์์ ์ฑ ์๊ฒ ์ ๋ณด๋ฅผ ๊ตํํ๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ทธ ์ด์ ๋, ์ ๋ณด๊ฐ ์๋ช ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ ๋ณด๋ฅผ ๋ณด๋ธ์ด๊ฐ ๋ฐ๋์ง ์์๋์ง, ๋ ์ ๋ณด๊ฐ ๋์ค์ ์กฐ์๋์ง๋ ์์๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค.
'Engineering WIKI > Docs' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Gradle ๊ฐ๋ (0) | 2023.05.29 |
---|---|
SOLID 5๊ฐ์ง ์ค๊ณ ์์น (0) | 2023.05.27 |
ํผ์ฌ๋ ํจํด (Facade Pattern) ๊ฐ๋ ๋ฐ ์ฝ๋ ์์ (0) | 2022.12.30 |
Redis ๋ฟ์๊ธฐ! (0) | 2022.12.30 |
Jenkins (์ ํจ์ค) ์์ฝ (0) | 2022.12.20 |
HTTP ๋ฉ์๋ (0) | 2022.12.18 |
์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก - ์ ์์ผ(Agile) ๋ฐฉ๋ฒ๋ก (0) | 2022.12.18 |
IntelliJ Gradle import ์, ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ : Unable to find method (2) | 2022.12.11 |