1๏ธโฃ์น(Web)
Last updated
Last updated
์น ์ฌ์ดํธ์ ์ ์ํ ๋๋ ์น ๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ค.
์น ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ
์น ํ์ด์ง๋ฅผ ์๋ฒ์ ์์ฒญ requestํ์ฌ ์๋ฒ์ ์๋ต response์ ์น ๋ฌธ์ ํํ๋ก ๋ฐ๊ธฐ
๋ฐ์ ์น ๋ฌธ์(HTML, CSS ๋ฑ)์ ๋ ๋๋ง ํ์ฌ ๋ชจ๋ํฐ ํ๋ฉด์ ์น ํ์ด์ง๋ฅผ ํ์
Chrome, Firefox, Safari
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๊ฐ ์๋ตํ๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ์ ๋ํ์ ์ธ ์์๊ฐ ์น ์๋น์ค
ํด๋ผ์ด์ธํธ๋ ์ผ์ข ์ ๊ณ ๊ฐ์ผ๋ก,
์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ ๋ค์ ์๋ต์ด ๋์ฐฉํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ผ๋ฉด, ์๋ฒ์ ์๋ต์ ์ฒ๋ฆฌํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธ๋๋ก๋ถํฐ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํด ์๋ต์ ์ ์กํ๋ค.
๊ฒ์ ์๋ฒ, ๋ชจ๋ฐ์ผ ์๋ฒ, ์น ์๋ฒ ๋ฑ
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ ํ ํ์ผ์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ธ๊ฐ?
HTML์ ์น ๋ฌธ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
๋งํฌ์ (Markup): ์น ๋ฌธ์๊ฐ ๋ชจ๋ํฐ ํ๋ฉด์์ ๋ณด์ด๋ ํํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ
HTML ๋ฌธ์: <HTML>
ํ๊ทธ๋ก ์์, </HTML>
ํ๊ทธ๋ก ์ข
๋ฃ
ํ์ดํผํ ์คํธ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ํ๋กํ ์ฝ๋ก ๊ฐํธํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ฒ ํด์ค๋ค.
์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ URL(Uniform Resource Locator)์ ์ ๋ ฅํ ๋ค์ ์ ์์ ์๋ํ๋ค.
URL์ ์ธํฐ๋ท์ ์กด์ฌํ๋ ํน์ ํ ์ ๋ณด ์์์ ์ข ๋ฅ์ ์์น๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด
http(protocol)://dowellcomputer.com(์ธํฐ๋ท ์ฃผ์)
HTTP ํ๋กํ ์ฝ์ ์ด์ฉํด ์์์ด ๋ง์ ํ์ด์ง๋ฅผ ๋งํฌ๋ฅผ ํ๊ณ ์ด๋
์น์์๋ ๋ง์ ํ์ด์ง๊ฐ ๊ฑฐ๋ฏธ์ค ๊ฐ์ ํํ๋ฅผ ๊ฐ๋๋ค.
์น ํด๋ผ์ด์ธํธ๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํ๋ค.
์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด GET ๋ฐฉ์์ผ๋ก ์๋ฒ์ ์น ๋ฌธ์๋ฅผ ์์ฒญํ๋ค.
์น ์๋ฒ๋ ์ ์ ํ ์น ๋ฌธ์๋ฅผ ์ฐพ์์ ์๋ตํ๋ค.
์ดํ์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฌธ์๋ฅผ ํ๋ฉด์ ํ์ํ๋ค.
์ฃผ์ ์ ๋ ฅ (http://www.gitbook.com) ํ ์ํฐ (์น ํด๋ผ์ด์ธํธ)
์น ํด๋ผ์ด์ธํธ๊ฐ ์น ์๋ฒ์ a.html ํ์ด์ง ์์ฒญ
์น ์๋ฒ๋ a.html ํด๋น ๋ฌธ์๋ฅผ ๊ฒ์
a.html ํ์ด์ง ์๋ต
์น ํด๋ผ์ด์ธํธ๊ฐ a.html ํ๋ฉด ์ถ๋ ฅ
์ฌ์ฉ์๊ฐ ํน์ ํ ์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ ๋, ์ฌ์ฉ์ ์ปดํจํฐ์ ์ ์ฅํ๋ ๊ธฐ๋ก ํ์ผ
์๋ฒ์ ์์์ ์ ํ ์ฌ์ฉํ์ง ์๋๋ค.
์ฌ์ฉ ์์: "์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ์๊ฒ ์ต๋๊น?"
ํ ๋ช ์ ์ฌ์ฉ์(๋ธ๋ผ์ฐ์ )์ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ์
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๊ณ ์ ํ Session ID๋ฅผ ๋ถ์ฌํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ ์ํ ๋๋ง๋ค Session ID์ ํจ๊ป ์์ฒญ
์ฌ์ฉ ์์: ์น ์ฌ์ดํธ์ ํ ๋ฒ ๋ก๊ทธ์ธ ํ๋ฉด, ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํด๋ ๊ณ์ ์ ์ ์ํ๊ฐ ์ ์ง
๋ง์ฝ Session ID๋ฅผ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ทจ๋นํ๋ฉด, ๋ค๋ฅธ ์ฌ๋์ด ์์ ์ ํ์ธ ๊ฐ๋ฅ
์ธ์ ๊ฐ์
์๋ฒ์์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ก, ํน์ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค.
์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ๋ค, ์๋ฒ์์๋ ์ธ์ ID์ ๋ฐ๋ฅธ ํ์ ID ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค.
ํด๋ผ์ด์ธํธ๋ ํด๋น ์ธ์ ์ ๊ณ์ ์ ์งํ๋ค. (๋ฉ์ผํจ์ ์ ์ํ ๋๋ ์ธ์ ID๋ฅผ ์๋ฒ์ ์ ์กํ๋ค.)
์ธ์ ์ ์์ ์ด ๋๊ตฌ์ธ์ง ์๋ฒ์ ์๋ ค์ฃผ๋ ์ญํ
์ธ์ ์ธ์ฆ ๋ฐฉ์ ์์
๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ
๋ก๊ทธ์ธ ํ์ด์ง ์๋ต
๋ก๊ทธ์ธ ์์ฒญ (ID, Password)
์ธ์ ์์ฑ ๋ฐ ์ ์ง
์ธ์ ID (Session) ์๋ต
๋ธ๋ผ์ฐ์ ์ ์ธ์ ์ ๋ณด ์ ์ฅ
์ธ์ ID์ ํจ๊ป ์์ฒญ(๊ธ์ฐ๊ธฐ ๋ฑ) ์ํ
์ธ์ ID๋ฅผ ํตํด ํ์ ID ์ ๊ทผ
ํด๋นํ๋ ํ์์ ๋ํ์ฌ ์๋น์ค(๊ธ์ฐ๊ธฐ ์ฒ๋ฆฌ) ์ํ
์ธ์ ๋ฐฉ์์ ํน์ง
โญ๏ธ ์ฅ์
ํด๋ผ์ด์ธํธ์๊ฒ๋ ์ธ์ ID(ํ์ ์๋ณ ๋ชฉ์ )์ ์ ๊ณตํ๊ณ , ํ์์ ๋ํ ์ค์ํ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ค.
๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ง์ ๋ณด๋ด์ง ์๋๋ค.
ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ธ์ ID ์์ฒด์๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ง ์๋ค.
โญ๏ธ ๋จ์
์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ ์ธ์ ID๋ฅผ ํ์ทจํ์ฌ ์ฌ์ฉ์์ธ ์ฒ ์์ฅํ ์ ์๋ค.
์น ์๋ฒ์ ์ธ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ์์ด์ผ ํ๋ฏ๋ก, ์ ์์๊ฐ ๋ง์ ๋ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๊ฐ ์กด์ฌํ ์ ์๋ค.
HyperText Transfer Protocol, ์น์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ
์น ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ์ฌ ์ฌ์ฉ
์น, ๋ชจ๋ฐ์ผ ์ฑ, ๊ฒ์
ํด๋ผ์ด์ธํธ๋ ์์ฒญ(request)์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉ
GET
๋ฐ์ดํฐ ์กฐํ๋ฅผ ์์ฒญ
ํน์ ํ์ด์ง ์ ์, ์ ๋ณด ๊ฒ์
POST
๋ฐ์ดํฐ ์์ฑ์์์ฒญ
ํ์๊ฐ์ , ๊ธ์ฐ๊ธฐ
PUT
๋ฐ์ดํฐ ์์ ์ ์์ฒญ
ํ์ ์ ๋ณด ์์
DELETE
๋ฐ์ดํฐ ์ญ์ ๋ฅผ ์์ฒญ
ํ์ ์ ๋ณด ์ญ์
HTTP ๋ฉ์๋ ์ฌ์ฉ ์์
ํน์ ํ ์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก GET ๋ฐฉ์์ผ๋ก ํธ์ถ
์ํ ์ฝ๋ (status code)๋ฅผ ์ด์ฉํด ๋ณธ์ธ์ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ต ๋ฐ์ ์ ์๋ค.
์น ์ฌ์ดํธ๋ HTML, JavaScript, CSS ์ฝ๋๋ฅผ ๋ฐํํ์ฌ ์น ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
HTTP๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. Stateless
ํด๋ผ์ด์ธํธ๋ HTTP๋ก ์๋ฒ์ ์ฐ๊ฒฐํ ๋ค์, ์๋ต์ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค.
์๋ฒ ์ ์ฅ์์ ์ ์ ์ ์ง์ ๋ํ ์๊ตฌ๊ฐ ์ ์ด, ๋ถํน์ ๋ค์๋ฅผ ๋์์ผ๋ก ํ๋ ์๋น์ค์ ์ ํฉ
์์๋ก, ์ํํ์ธ โ ์ฅ๋ฐ๊ตฌ๋ โ ๊ฒฐ์ ์ ๊ณผ์ ์ด ์์คํ ์ ์ผ๋ก ์ํ ์ ๋ณด๋ก ๊ธฐ๋ก๋์ง ์๋๋ค.
ํ์ง๋ง, ์ธ์ ์ ์ด์ฉํด ์ํ๋ ๊ธฐ๋ฅ์ด ์ํ๋๋๋ก ํ๋ค.
๋ฌด์ํ์ฑ์ผ๋ก ์ธํ ๋ฌธ์ ์ ์ ์ํด ๊ณ ์๋ ๊ธฐ๋ฅ
ํ๋์ ์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ๋ฉด ๋๊ฒ ์์ญ ๊ฐ์ ํ์ผ(CSS, Image, HTML, JS)๋ฅผ ์ ๊ณตํ๋ค.
TCP ํต์ ๊ณผ์ ์์ ์ฐ๊ฒฐ ์ํ/์ฐ๊ฒฐ ํด์ ๊ณผ์ ์์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์์๋๋ค.
keep-alive๋ ์ด๋ฐ ํ์ผ์ ํ๋์ฉ ๋ฐ๊ธฐ ์ํ์ฌ ๋งค๋ฒ ์ฐ๊ฒฐ์ ๋งบ๊ณ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
HTTP 1.1 ๋ฒ์ ๋ถํฐ ์ง์
HTTP๋ ๋ค์ํ ๋ฉ์๋(GET, POST, PUT, DELETE)๋ฅผ ์ง์
์ค์ ๋ก, HTTP ๋ฉ์๋๋ฅผ ๊ธฐ์กด ์ค๋ช ์ ๋ง๊ฒ ์ฌ์ฉํ์ง ์๋๋ผ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋ฐ์ ์ฌ์ด์ ์ํต์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ธฐ์ค์ด ๋๋ ์ํคํ ์ฒ๋ก REST๋ฅผ ์ฑํ
REST ์ดํดํ๊ธฐ
ํน์ ํ ์์์ ๋ํ์ฌ, ์์์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ๋ฐ ๋ฐฉ์
์์: URL๋ฅผ ์ด์ฉ
ํ์: HTTP ๋ฉ์๋๋ฅผ ์ด์ฉ
ํํ: ํ์ด๋ก๋๋ฅผ ์ด์ฉ
ex. ํ์๊ฐ์
API(Application Programming interface): ํ๋ก๊ทธ๋จ์ด ์ํธ์์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค
REST API: REST ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๋ API
REST API ํธ์ถ: REST ๋ฐฉ์์ ๋ฐ๋ฅด๊ณ ์๋ ์๋ฒ์ ํน์ ํ ์์ฒญ(request)๋ฅผ ์ ์กํ๋ ํ์
REST API ์ฐ์ตํ๊ธฐ
๋ชฉํน(moking): ์ด๋ ํ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ฒ๋ผ ํ๋ด๋ด์ด ๊ตฌํํ ๊ฒ
ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ ์ํด ๊ฐ๋จํ ์๋ฒ ๊ธฐ๋ฅ์ ํ ์คํธํ ๋ ์ฌ์ฉ
DB ์ฐ๋์ ์๋์ง๋ง, ์ผ๋จ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ
Google ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ ์ฌ๋ฆฌ์.
์น ์๋ฒ์ Google ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋, Google ๊ณ์ ์ ์ผ๋ถ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค.
SNS ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
Google ๋ก๊ทธ์ธ ์์ฒญ, ๋ฐ์ดํฐ: Google ๊ณ์ ์ ๋ณด๊ฐ ์๋น์ค๋ก ๋์ด๊ฐ๋ค.
์ฌ์ฉ์์ Google ๊ณ์ ๋ก๊ทธ์ธ
์ฌ์ฉ์ ์ ๋ณด ์ป๊ธฐ (์๋น์ค)
๋ก๊ทธ์ธ ์ฑ๊ณต ์๋ต (์ฌ์ฉ์)
โ ์ฌ์ฉ์๊ฐ ์๋ฒ์๊ฒ Google ์์ด๋์ ํจ์ค์๋๋ฅผ ์๋ ค์ค์ผ ํ๋ค.
์ฌ์ฉ์๊ฐ ์ค์ ํ ๊ถํ์ ๋ํด์๋ง Google ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
์ฌ์ฉ์์ ๋ํ Acess Token ์ฃผ๊ธฐ (์๋น์ค โ ๊ตฌ๊ธ)
์ฌ์ฉ์ ์ ๋ณด ์ป๊ธฐ (๊ตฌ๊ธ โ ์๋น์ค)
Resource Owner: ํน์ ํ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์ฌ์ฉ์๋ก, ๊ฐ์ธ์ ๋ณด(Resource)์ ์์ ์
Client: ํน์ ํ ๊ฐ์ธ ํน์ ํ์ฌ๊ฐ ๋ง๋ ์๋น์ค๋ฅผ ์๋ฏธํ๋ค. ์น/์ฑ ์๋ฒ๋ฅผ ์๋ฏธํ์ง๋ง, Client๋ผ๊ณ ๋ถ๋ฅธ๋ค. โ Google ์ ์ฅ์์๋ Client
Resource Server: ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ(Google, ์นด์นด์คํก ๋ฑ), Clinet๋ Access Token์ Resource Server์ ๋ณด๋ด์ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ป๋๋ค.
Authorization Server: ์ค์ง์ ์ผ๋ก ๊ถํ ๋ถ์ฌ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ์๋ฒ. ์ฌ์ฉ์๋ ์์ ์ SNS ๊ณ์ ์ ๋ณด๋ฅผ ๋๊ฒจ Authorization Code๋ฅผ ๋ฐ๋๋ค. Client๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ๋ Authorization Code๋ฅผ ๋๊ฒจ Access Token์ ๋ฐ๋๋ค.
JavaScript Object Notation์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒฝ๋์ ๋ฐ์ดํฐ ํ์ ์ค ํ๋
ํค(key)์ ๊ฐ(value)์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ
๋ก๊ทธ์ธ ํ์ด์ง ์๋ต
๋ก๊ทธ์ธ ์์ฒญ(ID, Password)
ํ ํฐ ์์ฑ
ํ ํฐ ์๋ต
ํ ํฐ ์ ์ฅ
(๋์ค์) ํ ํฐ๊ณผ ํจ๊ป ์ ๋ณด ์์ฒญ
ํ ํฐ ๊ฒ์ฆ ๋ฐ ์๋ต
ํ ํฐ์ ์์ฒญํ ์ฌ๋์ ์ ๋ณด๊ฐ ํฌํจ๋๋ฉฐ, ์๋ฒ๋ DB๋ฅผ ์กฐํํ์ง ์๊ณ ํ ํฐ์ ๊ฒ์ฆํ ์ ์๋ค.
์๋ฒ ๋ด๋ถ์์๋ ๋น๋ฐํค(key) ํ๋๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด, ํ ํฐ ๊ฒ์ฆ์ ์ํํ ์ ์๋ค.
JWT๋ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ฅผ ์ํธํํ JSON ํ์์ ํ ํฐ
JWT ํ ํฐ์ HTTP ํค๋์ ์ค์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ ์ ์๋๋ก ํ๋ค.
์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์ํํ๋ฉด, ์๋ฒ๋ ๋ค์์ ์ ๋ณด๋ฅผ ๊ฐ์ง JWT ํ ํฐ์ ๋ฐ๊ธํ๋ค.
๊ตฌ์ฑ ์์
Header: ์ฌ์ฉํ ํด์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ๋ฉํ ์ ๋ณด๋ฅผ ํฌํจ
Payload: ํค(key)์ ๊ฐ(value) ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ ๋ณด(claim)์ ๊ตฌ์ฑ โ ์ด ๊ฐ์ ์๋ฒ๋ก ์ ๋ฌ
Signature: (ํค๋ + ํ์ด๋ก๋ + ํค(key)) ์ ๋ณด๋ฅผ ํด์ฑํ์ฌ Client์๊ฒ ํจ๊ป ์ ๋ฌํ๋ค.
xxxxxx[Header].yyyyy[Payload].zzzzz[Signature]
ex.
Header: {"alg": "HS256", "typ": "JWT"}
Payload: {"sub": "user", "id": "admin"}
Signature: ์ ๋ ๋ด์ฉ์ ๋ํ์ฌ ์ ์ ํ ์๋ฒ ํค(key) ๊ฐ์ ๋ํด ํด์ฑํ ๊ฐ
๋์ค์ ์ฌ์ฉ์(client)๋ ์์ ์ด ๋ฐ์๋ JWT ํ ํฐ์ ๋ค์ ์๋ฒ์ ์ ๋ฌํ๋ค.
์๋ฒ๋ (ํค๋ + ํ์ด๋ก๋ + ์๋ฒ ๋ด์ ์๋ ํค(Key))๋ฅผ ํด์ฑํ ๊ฐ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฒ๊ณผ ์ผ์นํ๋์ง ์ฒดํฌํ๋ค.
์ด ๊ณผ์ ์์ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋น๋ฐํค(secret key)๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ์ฉ์๋ ์๋ฒ๊ฐ ์ฒ์์ ๋ถ์ฌํ๋ ๊ถํ๋งํผ์ ์์ ์ ์์ฒญํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํด์ ๊ฐ์ด ๋ณ๊ฒฝ โ ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ Payload๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ
Payload ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ์๋ฒ์ ํค๋ฅผ ๋ชจ๋ฅด๋ฏ๋ก ์๋ช ๊ฐ์ด ์ผ์นํ์ง ์์ ์๋ฒ๊ฐ ์์กฐ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
๏ปฟ๏ปฟ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋นํด ์๋ฒ(Server)๊ฐ DB์ ์ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์๊ฐ ์๋ค.
๏ปฟ๏ปฟ๊ฐ ํด์ ๊ฐ์ด ์ด๋ค Header์ Payload๋ฅผ ๊ฐ์ง๋์ง ์ผ์ผ์ด ์๋ฒ DB์์ ์ ์ฅํ ์ด์ ๊ฐ ์๋ค.
๏ปฟ๏ปฟ์๋ฒ์์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์์๋ ๋๋ฏ๋ก, ๋ฌด์ํ์ฑ(stateless)์ด ์ ์ง๋๋ค.
๏ปฟ๏ปฟํ ํฐ ๊ธฐ๋ฐ์ด๋ฏ๋ก, ์๋ก ๋ค๋ฅธ ์น ์๋ฒ์ ๋ํด์๋ ๋์ํ ์ ์๋ค. (์น ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ๋ค๋ฅธ ์ )
๏ปฟ๏ปฟ์ธ์ ์ ๋นํ์ฌ ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ ๊ธธ๋ค.
๏ปฟ๏ปฟํ์ด๋ก๋(payload)๋ ์ํธํ๋์ง ์์ผ๋ฏ๋ก, ์ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ ์ ํ์ง ์์ ์ ์๋ค.
๏ปฟ๏ปฟํ ํฐ์ ํ์ทจ๋นํ๋ ๊ฒฝ์ฐ ๋ณด์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. (๋๋ฌธ์ ํ ํฐ์ ์ฌ์ฉ ๊ธฐํ์ ๋ถ์ฌํ๋ค.)
Payload ์์ฒด๋ ์ค๊ฐ์ ๊ณต๊ฒฉ์ ์ํด ๋ ธ์ถ ๋ ์ ์์ผ๋ฏ๋ก, ํ์ด๋ก๋์๋ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ๋ฃ์ง ์๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก JWT์ ๋ชฉ์ ์ ์ ๋ณด ๋ณดํธ๋ณด๋ค๋
์์กฐ ๋ฐฉ์ง
์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฉ ์ด์ (DB ์กฐํ ํ์ ์์)
์ค์ ์ธ์ฆ ๋ฐฉ์
ID์ Password๋ฅผ ์ด์ฉํด ๋ก๊ทธ์ธ
ํ ํฐ ๋ฐ๊ธ
Access Token์ ์ด์ฉํด API ์์ฒญ
Access Token์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ ์๋ต
์ถํ Refresh Token์ผ๋ก Access Token ์ฌ์์ฒญ
Access Token ์ฌ๋ฐ๊ธ