1๏ธโฃ์น(Web)
1. ์น ๋ธ๋ผ์ฐ์ ์ ๋์ ๋ฐฉ์
๐งท ๋ค์ํ ์น ๋ธ๋ผ์ฐ์  Web Browser
- ์น ์ฌ์ดํธ์ ์ ์ํ ๋๋ ์น ๋ธ๋ผ์ฐ์  ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ค. 
- ์น ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ - ์น ํ์ด์ง๋ฅผ ์๋ฒ์ ์์ฒญ requestํ์ฌ ์๋ฒ์ ์๋ต response์ ์น ๋ฌธ์ ํํ๋ก ๋ฐ๊ธฐ 
- ๋ฐ์ ์น ๋ฌธ์(HTML, CSS ๋ฑ)์ ๋ ๋๋ง ํ์ฌ ๋ชจ๋ํฐ ํ๋ฉด์ ์น ํ์ด์ง๋ฅผ ํ์ 
- Chrome, Firefox, Safari 
 
๐งท ์๋ฒ(Server)์ ํด๋ผ์ด์ธํธ(Client)
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๊ฐ ์๋ตํ๋ค. 
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ์ ๋ํ์ ์ธ ์์๊ฐ ์น ์๋น์ค 
- ํด๋ผ์ด์ธํธ๋ ์ผ์ข ์ ๊ณ ๊ฐ์ผ๋ก, 
- ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ ๋ค์ ์๋ต์ด ๋์ฐฉํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. 
- ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ผ๋ฉด, ์๋ฒ์ ์๋ต์ ์ฒ๋ฆฌํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ค. 

- ์๋ฒ๋ ํด๋ผ์ด์ธ๋๋ก๋ถํฐ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํด ์๋ต์ ์ ์กํ๋ค. 
- ๊ฒ์ ์๋ฒ, ๋ชจ๋ฐ์ผ ์๋ฒ, ์น ์๋ฒ ๋ฑ  
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ ํ ํ์ผ์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ธ๊ฐ? 
๐งท HTML(Hypertext Markup Language)
- HTML์ ์น ๋ฌธ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด 
- ๋งํฌ์ (Markup): ์น ๋ฌธ์๊ฐ ๋ชจ๋ํฐ ํ๋ฉด์์ ๋ณด์ด๋ ํํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ 
- HTML ๋ฌธ์: - <HTML>ํ๊ทธ๋ก ์์,- </HTML>ํ๊ทธ๋ก ์ข ๋ฃ
๐งท HTTP(Hypertext Transfer Protocol)
- ํ์ดํผํ ์คํธ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ํ๋กํ ์ฝ๋ก ๊ฐํธํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ฒ ํด์ค๋ค. 
- ์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ URL(Uniform Resource Locator)์ ์ ๋ ฅํ ๋ค์ ์ ์์ ์๋ํ๋ค. 
- URL์ ์ธํฐ๋ท์ ์กด์ฌํ๋ ํน์ ํ ์ ๋ณด ์์์ ์ข ๋ฅ์ ์์น๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด 
- http(protocol)://dowellcomputer.com(์ธํฐ๋ท ์ฃผ์) 
๐งท ์น (Web)
- HTTP ํ๋กํ ์ฝ์ ์ด์ฉํด ์์์ด ๋ง์ ํ์ด์ง๋ฅผ ๋งํฌ๋ฅผ ํ๊ณ ์ด๋ 
- ์น์์๋ ๋ง์ ํ์ด์ง๊ฐ ๊ฑฐ๋ฏธ์ค ๊ฐ์ ํํ๋ฅผ ๊ฐ๋๋ค. 
๐งท ์น  ๋ธ๋ผ์ฐ์ ์ ๊ตฌ์กฐ

๐งท ์น  ๋ธ๋ผ์ฐ์ ์  ๋์ ๋ฐฉ์
- ์น ํด๋ผ์ด์ธํธ๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํ๋ค. 
- ์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด GET ๋ฐฉ์์ผ๋ก ์๋ฒ์ ์น ๋ฌธ์๋ฅผ ์์ฒญํ๋ค. 
- ์น ์๋ฒ๋ ์ ์ ํ ์น ๋ฌธ์๋ฅผ ์ฐพ์์ ์๋ตํ๋ค. 
- ์ดํ์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฌธ์๋ฅผ ํ๋ฉด์ ํ์ํ๋ค. 
- ์ฃผ์ ์ ๋ ฅ (http://www.gitbook.com) ํ ์ํฐ (์น ํด๋ผ์ด์ธํธ) 
- ์น ํด๋ผ์ด์ธํธ๊ฐ ์น ์๋ฒ์ a.html ํ์ด์ง ์์ฒญ 
- ์น ์๋ฒ๋ a.html ํด๋น ๋ฌธ์๋ฅผ ๊ฒ์ 
- a.html ํ์ด์ง ์๋ต 
- ์น ํด๋ผ์ด์ธํธ๊ฐ a.html ํ๋ฉด ์ถ๋ ฅ 
2. ์ฟ ํค(Cookie)์ ์ธ์
(Session)
๐ ์ฟ ํค
- ์ฌ์ฉ์๊ฐ ํน์ ํ ์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ ๋, ์ฌ์ฉ์ ์ปดํจํฐ์ ์ ์ฅํ๋ ๊ธฐ๋ก ํ์ผ 
- ์๋ฒ์ ์์์ ์ ํ ์ฌ์ฉํ์ง ์๋๋ค. 
- ์ฌ์ฉ ์์: "์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ์๊ฒ ์ต๋๊น?" 
๐ ์ธ์
- ํ ๋ช ์ ์ฌ์ฉ์(๋ธ๋ผ์ฐ์ )์ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ์ 
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๊ณ ์ ํ Session ID๋ฅผ ๋ถ์ฌํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ ์ํ ๋๋ง๋ค Session ID์ ํจ๊ป ์์ฒญ 
- ์ฌ์ฉ ์์: ์น ์ฌ์ดํธ์ ํ ๋ฒ ๋ก๊ทธ์ธ ํ๋ฉด, ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํด๋ ๊ณ์ ์ ์ ์ํ๊ฐ ์ ์ง 
- ๋ง์ฝ Session ID๋ฅผ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ทจ๋นํ๋ฉด, ๋ค๋ฅธ ์ฌ๋์ด ์์ ์ ํ์ธ ๊ฐ๋ฅ 
์ธ์  ๊ฐ์
- ์๋ฒ์์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ก, ํน์  ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค. 
- ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ๋ค, ์๋ฒ์์๋ ์ธ์  ID์ ๋ฐ๋ฅธ ํ์ ID ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค. 
- ํด๋ผ์ด์ธํธ๋ ํด๋น ์ธ์ ์ ๊ณ์ ์ ์งํ๋ค. (๋ฉ์ผํจ์ ์ ์ํ ๋๋ ์ธ์  ID๋ฅผ ์๋ฒ์ ์ ์กํ๋ค.) 
- ์ธ์ ์ ์์ ์ด ๋๊ตฌ์ธ์ง ์๋ฒ์ ์๋ ค์ฃผ๋ ์ญํ  
์ธ์  ์ธ์ฆ ๋ฐฉ์ ์์
- ๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ 
- ๋ก๊ทธ์ธ ํ์ด์ง ์๋ต 
- ๋ก๊ทธ์ธ ์์ฒญ (ID, Password) 
- ์ธ์  ์์ฑ ๋ฐ ์ ์ง 
- ์ธ์  ID (Session) ์๋ต 
- ๋ธ๋ผ์ฐ์ ์ ์ธ์  ์ ๋ณด ์ ์ฅ 
- ์ธ์  ID์ ํจ๊ป ์์ฒญ(๊ธ์ฐ๊ธฐ ๋ฑ) ์ํ 
- ์ธ์  ID๋ฅผ ํตํด ํ์ ID ์ ๊ทผ 
- ํด๋นํ๋ ํ์์ ๋ํ์ฌ ์๋น์ค(๊ธ์ฐ๊ธฐ ์ฒ๋ฆฌ) ์ํ 

์ธ์  ๋ฐฉ์์ ํน์ง
โญ๏ธ ์ฅ์ 
- ํด๋ผ์ด์ธํธ์๊ฒ๋ ์ธ์  ID(ํ์ ์๋ณ ๋ชฉ์ )์ ์ ๊ณตํ๊ณ , ํ์์ ๋ํ ์ค์ํ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ค. 
- ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ง์  ๋ณด๋ด์ง ์๋๋ค. 
- ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ธ์  ID ์์ฒด์๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ง ์๋ค. 
โญ๏ธ ๋จ์ 
- ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ ์ธ์  ID๋ฅผ ํ์ทจํ์ฌ ์ฌ์ฉ์์ธ ์ฒ ์์ฅํ ์ ์๋ค. 
- ์น ์๋ฒ์ ์ธ์  ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ์์ด์ผ ํ๋ฏ๋ก, ์ ์์๊ฐ ๋ง์ ๋ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๊ฐ ์กด์ฌํ ์ ์๋ค. 
3. HTTP
- HyperText Transfer Protocol, ์น์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ 
- ์น ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ์ฌ ์ฌ์ฉ 
- ์น, ๋ชจ๋ฐ์ผ ์ฑ, ๊ฒ์ 
๐ HTTP ๋ฉ์๋ (Method)
- ํด๋ผ์ด์ธํธ๋ ์์ฒญ(request)์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉ 
GET
๋ฐ์ดํฐ ์กฐํ๋ฅผ ์์ฒญ
ํน์  ํ์ด์ง ์ ์, ์ ๋ณด ๊ฒ์
POST
๋ฐ์ดํฐ ์์ฑ์์์ฒญ
ํ์๊ฐ์ , ๊ธ์ฐ๊ธฐ
PUT
๋ฐ์ดํฐ ์์ ์ ์์ฒญ
ํ์ ์ ๋ณด ์์ 
DELETE
๋ฐ์ดํฐ ์ญ์ ๋ฅผ ์์ฒญ
ํ์ ์ ๋ณด ์ญ์ 
HTTP ๋ฉ์๋ ์ฌ์ฉ ์์
- ํน์ ํ ์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก GET ๋ฐฉ์์ผ๋ก ํธ์ถ 
- ์ํ ์ฝ๋ (status code)๋ฅผ ์ด์ฉํด ๋ณธ์ธ์ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ต ๋ฐ์ ์ ์๋ค. 
- ์น ์ฌ์ดํธ๋ HTML, JavaScript, CSS ์ฝ๋๋ฅผ ๋ฐํํ์ฌ ์น ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค. 
๐ HTTP ์ํ๊ด๋ฆฌ์ ์ธ์
- HTTP๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. Stateless 
- ํด๋ผ์ด์ธํธ๋ HTTP๋ก ์๋ฒ์ ์ฐ๊ฒฐํ ๋ค์, ์๋ต์ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค. - ์๋ฒ ์ ์ฅ์์ ์ ์ ์ ์ง์ ๋ํ ์๊ตฌ๊ฐ ์ ์ด, ๋ถํน์  ๋ค์๋ฅผ ๋์์ผ๋ก ํ๋ ์๋น์ค์ ์ ํฉ 
 
- ์์๋ก, ์ํํ์ธ โ ์ฅ๋ฐ๊ตฌ๋ โ ๊ฒฐ์ ์ ๊ณผ์ ์ด ์์คํ ์ ์ผ๋ก ์ํ ์ ๋ณด๋ก ๊ธฐ๋ก๋์ง ์๋๋ค. 
- ํ์ง๋ง, ์ธ์ ์ ์ด์ฉํด ์ํ๋ ๊ธฐ๋ฅ์ด ์ํ๋๋๋ก ํ๋ค. 
๐ Keep Alive ๊ธฐ๋ฅ
- ๋ฌด์ํ์ฑ์ผ๋ก ์ธํ ๋ฌธ์ ์ ์ ์ํด ๊ณ ์๋ ๊ธฐ๋ฅ 
- ํ๋์ ์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ๋ฉด ๋๊ฒ ์์ญ ๊ฐ์ ํ์ผ(CSS, Image, HTML, JS)๋ฅผ ์ ๊ณตํ๋ค. 
- TCP ํต์ ๊ณผ์ ์์ ์ฐ๊ฒฐ ์ํ/์ฐ๊ฒฐ ํด์  ๊ณผ์ ์์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์์๋๋ค. 
- keep-alive๋ ์ด๋ฐ ํ์ผ์ ํ๋์ฉ ๋ฐ๊ธฐ ์ํ์ฌ ๋งค๋ฒ ์ฐ๊ฒฐ์ ๋งบ๊ณ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. 
- HTTP 1.1 ๋ฒ์ ๋ถํฐ ์ง์ 
4. REST API
๐ REST(Representational State Transfer) ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- HTTP๋ ๋ค์ํ ๋ฉ์๋(GET, POST, PUT, DELETE)๋ฅผ ์ง์ 
- ์ค์ ๋ก, HTTP ๋ฉ์๋๋ฅผ ๊ธฐ์กด ์ค๋ช ์ ๋ง๊ฒ ์ฌ์ฉํ์ง ์๋๋ผ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋ฐ์ ์ฌ์ด์ ์ํต์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. 
- ๊ธฐ์ค์ด ๋๋ ์ํคํ ์ฒ๋ก REST๋ฅผ ์ฑํ 
REST ์ดํดํ๊ธฐ
ํน์ ํ ์์์ ๋ํ์ฌ, ์์์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ๋ฐ ๋ฐฉ์
- ์์: URL๋ฅผ ์ด์ฉ 
- ํ์: HTTP ๋ฉ์๋๋ฅผ ์ด์ฉ 
- ํํ: ํ์ด๋ก๋๋ฅผ ์ด์ฉ 
ex. ํ์๊ฐ์

๐ REST API
- API(Application Programming interface): ํ๋ก๊ทธ๋จ์ด ์ํธ์์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค 
- REST API: REST ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๋ API 
- REST API ํธ์ถ: REST ๋ฐฉ์์ ๋ฐ๋ฅด๊ณ ์๋ ์๋ฒ์ ํน์ ํ ์์ฒญ(request)๋ฅผ ์ ์กํ๋ ํ์ 
REST API ์ฐ์ตํ๊ธฐ
- ๋ชฉํน(moking): ์ด๋ ํ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ฒ๋ผ ํ๋ด๋ด์ด ๊ตฌํํ ๊ฒ 
- ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ ์ํด ๊ฐ๋จํ ์๋ฒ ๊ธฐ๋ฅ์ ํ ์คํธํ ๋ ์ฌ์ฉ - DB ์ฐ๋์ ์๋์ง๋ง, ์ผ๋จ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ 
 
5. OAuth
- Google ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ ์ฌ๋ฆฌ์. 
- ์น ์๋ฒ์ Google ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋, Google ๊ณ์ ์ ์ผ๋ถ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค. 
- SNS ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ 
์์ ํ์ง ์์ ์ธ์ฆ ๋ฐฉ์ ์์
- Google ๋ก๊ทธ์ธ ์์ฒญ, ๋ฐ์ดํฐ: Google ๊ณ์  ์ ๋ณด๊ฐ ์๋น์ค๋ก ๋์ด๊ฐ๋ค. 
- ์ฌ์ฉ์์ Google ๊ณ์  ๋ก๊ทธ์ธ 
- ์ฌ์ฉ์ ์ ๋ณด ์ป๊ธฐ (์๋น์ค) 
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์๋ต (์ฌ์ฉ์) 
โ ์ฌ์ฉ์๊ฐ ์๋ฒ์๊ฒ Google ์์ด๋์ ํจ์ค์๋๋ฅผ ์๋ ค์ค์ผ ํ๋ค.
Acess Token ์ด์ฉํ๊ธฐ
- ์ฌ์ฉ์๊ฐ ์ค์ ํ ๊ถํ์ ๋ํด์๋ง Google ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค. 
- ์ฌ์ฉ์์ ๋ํ Acess Token ์ฃผ๊ธฐ (์๋น์ค โ ๊ตฌ๊ธ) 
- ์ฌ์ฉ์ ์ ๋ณด ์ป๊ธฐ (๊ตฌ๊ธ โ ์๋น์ค) 
๐ OAuth 2.0 ๊ตฌ์ฑ ์์
- 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์ ๋ฐ๋๋ค. 

6. JWT(JSON Web Token)
๐ JSON ํ์
- JavaScript Object Notation์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒฝ๋์ ๋ฐ์ดํฐ ํ์ ์ค ํ๋ 
- ํค(key)์ ๊ฐ(value)์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ 
{
    "id": "koko",
    "password" : "1234",
    "age" : 30,
    "job" : [
        "programmer",
        "dancer"
    ]
}๐ Token ์ธ์ฆ ๋ฐฉ์
- ๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ 
- ๋ก๊ทธ์ธ ํ์ด์ง ์๋ต 
- ๋ก๊ทธ์ธ ์์ฒญ(ID, Password) 
- ํ ํฐ ์์ฑ 
- ํ ํฐ ์๋ต 
- ํ ํฐ ์ ์ฅ 
- (๋์ค์) ํ ํฐ๊ณผ ํจ๊ป ์ ๋ณด ์์ฒญ 
- ํ ํฐ ๊ฒ์ฆ ๋ฐ ์๋ต  
- ํ ํฐ์ ์์ฒญํ ์ฌ๋์ ์ ๋ณด๊ฐ ํฌํจ๋๋ฉฐ, ์๋ฒ๋ DB๋ฅผ ์กฐํํ์ง ์๊ณ ํ ํฐ์ ๊ฒ์ฆํ ์ ์๋ค. 
- ์๋ฒ ๋ด๋ถ์์๋ ๋น๋ฐํค(key) ํ๋๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด, ํ ํฐ ๊ฒ์ฆ์ ์ํํ ์ ์๋ค. 
๐ JWT (JSON Web Token)
- 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) ๊ฐ์ ๋ํด ํด์ฑํ ๊ฐ 
 
๐ JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ
- ๋์ค์ ์ฌ์ฉ์(client)๋ ์์ ์ด ๋ฐ์๋ JWT ํ ํฐ์ ๋ค์ ์๋ฒ์ ์ ๋ฌํ๋ค. 
- ์๋ฒ๋ (ํค๋ + ํ์ด๋ก๋ + ์๋ฒ ๋ด์ ์๋ ํค(Key))๋ฅผ ํด์ฑํ ๊ฐ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฒ๊ณผ ์ผ์นํ๋์ง ์ฒดํฌํ๋ค. 
- ์ด ๊ณผ์ ์์ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋น๋ฐํค(secret key)๋ฅผ ์ฌ์ฉํ๋ค. 
JWT ์ธ์ฆ ์๋ฆฌ
- ์ฌ์ฉ์๋ ์๋ฒ๊ฐ ์ฒ์์ ๋ถ์ฌํ๋ ๊ถํ๋งํผ์ ์์ ์ ์์ฒญํ ์ ์๋ค. 
- ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํด์ ๊ฐ์ด ๋ณ๊ฒฝ โ ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ Payload๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ - Payload ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ์๋ฒ์ ํค๋ฅผ ๋ชจ๋ฅด๋ฏ๋ก ์๋ช ๊ฐ์ด ์ผ์นํ์ง ์์ ์๋ฒ๊ฐ ์์กฐ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค. 
 
๐ JWT ๋ฐฉ์์ ํน์ง
์ฅ์ 
- ๏ปฟ๏ปฟ์ธ์  ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋นํด ์๋ฒ(Server)๊ฐ DB์ ์ธ์  ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์๊ฐ ์๋ค. 
- ๏ปฟ๏ปฟ๊ฐ ํด์ ๊ฐ์ด ์ด๋ค Header์ Payload๋ฅผ ๊ฐ์ง๋์ง ์ผ์ผ์ด ์๋ฒ DB์์ ์ ์ฅํ ์ด์ ๊ฐ ์๋ค. 
- ๏ปฟ๏ปฟ์๋ฒ์์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์์๋ ๋๋ฏ๋ก, ๋ฌด์ํ์ฑ(stateless)์ด ์ ์ง๋๋ค. 
- ๏ปฟ๏ปฟํ ํฐ ๊ธฐ๋ฐ์ด๋ฏ๋ก, ์๋ก ๋ค๋ฅธ ์น ์๋ฒ์ ๋ํด์๋ ๋์ํ ์ ์๋ค. (์น ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ๋ค๋ฅธ ์ ) 
๋จ์ 
- ๏ปฟ๏ปฟ์ธ์ ์ ๋นํ์ฌ ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ ๊ธธ๋ค. 
- ๏ปฟ๏ปฟํ์ด๋ก๋(payload)๋ ์ํธํ๋์ง ์์ผ๋ฏ๋ก, ์ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ ์ ํ์ง ์์ ์ ์๋ค. 
- ๏ปฟ๏ปฟํ ํฐ์ ํ์ทจ๋นํ๋ ๊ฒฝ์ฐ ๋ณด์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. (๋๋ฌธ์ ํ ํฐ์ ์ฌ์ฉ ๊ธฐํ์ ๋ถ์ฌํ๋ค.) 
JWT ํ ํฐ์ ์ ์์ฌํญ
- Payload ์์ฒด๋ ์ค๊ฐ์ ๊ณต๊ฒฉ์ ์ํด ๋ ธ์ถ ๋ ์ ์์ผ๋ฏ๋ก, ํ์ด๋ก๋์๋ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ๋ฃ์ง ์๋๋ค. 
- ๊ธฐ๋ณธ์ ์ผ๋ก JWT์ ๋ชฉ์ ์ ์ ๋ณด ๋ณดํธ๋ณด๋ค๋ - ์์กฐ ๋ฐฉ์ง 
- ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฉ ์ด์  (DB ์กฐํ ํ์ ์์) 
 
์ค์  ์ธ์ฆ ๋ฐฉ์
- ID์ Password๋ฅผ ์ด์ฉํด ๋ก๊ทธ์ธ 
- ํ ํฐ ๋ฐ๊ธ 
- Access Token์ ์ด์ฉํด API ์์ฒญ 
- Access Token์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ ์๋ต 
- ์ถํ Refresh Token์ผ๋ก Access Token ์ฌ์์ฒญ 
- Access Token ์ฌ๋ฐ๊ธ 
Last updated