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 ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„์— ์›น ๋ฌธ์„œ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

  • ์›น ์„œ๋ฒ„๋Š” ์ ์ ˆํ•œ ์›น ๋ฌธ์„œ๋ฅผ ์ฐพ์•„์„œ ์‘๋‹ตํ•œ๋‹ค.

  • ์ดํ›„์— ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฌธ์„œ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค.

  1. ์ฃผ์†Œ ์ž…๋ ฅ (http://www.gitbook.com) ํ›„ ์—”ํ„ฐ (์›น ํด๋ผ์ด์–ธํŠธ)

  2. ์›น ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์— a.html ํŽ˜์ด์ง€ ์š”์ฒญ

  3. ์›น ์„œ๋ฒ„๋Š” a.html ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰

  4. a.html ํŽ˜์ด์ง€ ์‘๋‹ต

  5. ์›น ํด๋ผ์ด์–ธํŠธ๊ฐ€ a.html ํ™”๋ฉด ์ถœ๋ ฅ

๐Ÿ”— ์ฟ ํ‚ค

  • ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ •ํ•œ ์›น ์‚ฌ์ดํŠธ์— ๋ฐฉ๋ฌธํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋ก ํŒŒ์ผ

  • ์„œ๋ฒ„์˜ ์ž์›์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์‚ฌ์šฉ ์˜ˆ์‹œ: "์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"

๐Ÿ”— ์„ธ์…˜

  • ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž(๋ธŒ๋ผ์šฐ์ €)์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ 

  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๊ณ ์œ ํ•œ Session ID๋ฅผ ๋ถ€์—ฌํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค Session ID์™€ ํ•จ๊ป˜ ์š”์ฒญ

  • ์‚ฌ์šฉ ์˜ˆ์‹œ: ์›น ์‚ฌ์ดํŠธ์— ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธ ํ•˜๋ฉด, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด๋„ ๊ณ„์† ์ ‘์† ์ƒํƒœ๊ฐ€ ์œ ์ง€

  • ๋งŒ์•ฝ Session ID๋ฅผ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํƒˆ์ทจ๋‹นํ•˜๋ฉด, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ํ–‰์„ธ ๊ฐ€๋Šฅ

์„ธ์…˜ ๊ฐœ์š”

  • ์„œ๋ฒ„์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋กœ, ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›น ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ํ•œ ๋’ค, ์„œ๋ฒ„์—์„œ๋Š” ์„ธ์…˜ ID์— ๋”ฐ๋ฅธ ํšŒ์› ID ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์„ธ์…˜์„ ๊ณ„์† ์œ ์ง€ํ•œ๋‹ค. (๋ฉ”์ผํ•จ์— ์ ‘์†ํ•  ๋•Œ๋„ ์„ธ์…˜ ID๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค.)

  • ์„ธ์…˜์€ ์ž์‹ ์ด ๋ˆ„๊ตฌ์ธ์ง€ ์„œ๋ฒ„์— ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 

์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹ ์˜ˆ์‹œ

  1. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์š”์ฒญ

  2. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์‘๋‹ต

  3. ๋กœ๊ทธ์ธ ์š”์ฒญ (ID, Password)

  4. ์„ธ์…˜ ์ƒ์„ฑ ๋ฐ ์œ ์ง€

  5. ์„ธ์…˜ ID (Session) ์‘๋‹ต

  6. ๋ธŒ๋ผ์šฐ์ €์— ์„ธ์…˜ ์ •๋ณด ์ €์žฅ

  7. ์„ธ์…˜ ID์™€ ํ•จ๊ป˜ ์š”์ฒญ(๊ธ€์“ฐ๊ธฐ ๋“ฑ) ์ˆ˜ํ–‰

  8. ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ํšŒ์› ID ์ ‘๊ทผ

  9. ํ•ด๋‹นํ•˜๋Š” ํšŒ์›์— ๋Œ€ํ•˜์—ฌ ์„œ๋น„์Šค(๊ธ€์“ฐ๊ธฐ ์ฒ˜๋ฆฌ) ์ˆ˜ํ–‰

์„ธ์…˜ ๋ฐฉ์‹์˜ ํŠน์ง•

โญ๏ธ ์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” ์„ธ์…˜ ID(ํšŒ์› ์‹๋ณ„ ๋ชฉ์ )์„ ์ œ๊ณตํ•˜๊ณ , ํšŒ์›์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ง์ ‘ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„ธ์…˜ ID ์ž์ฒด์—๋Š” ๊ฐœ์ธ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

โญ๏ธ ๋‹จ์ 

  • ์•…์˜์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ์„ธ์…˜ ID๋ฅผ ํƒˆ์ทจํ•˜์—ฌ ์‚ฌ์šฉ์ž์ธ ์ฒ™ ์œ„์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›น ์„œ๋ฒ„์— ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ ‘์†์ž๊ฐ€ ๋งŽ์„ ๋•Œ ์„œ๋ฒ„์— ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ•˜๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3. HTTP

  • HyperText Transfer Protocol, ์›น์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ

  • ์›น ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉ

  • ์›น, ๋ชจ๋ฐ”์ผ ์•ฑ, ๊ฒŒ์ž„

๐Ÿ”— HTTP ๋ฉ”์„œ๋“œ (Method)

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ(request)์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

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 ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ธ์ฆ ๋ฐฉ์‹ ์˜ˆ์‹œ

  1. Google ๋กœ๊ทธ์ธ ์š”์ฒญ, ๋ฐ์ดํ„ฐ: Google ๊ณ„์ • ์ •๋ณด๊ฐ€ ์„œ๋น„์Šค๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

  2. ์‚ฌ์šฉ์ž์˜ Google ๊ณ„์ • ๋กœ๊ทธ์ธ

  3. ์‚ฌ์šฉ์ž ์ •๋ณด ์–ป๊ธฐ (์„œ๋น„์Šค)

  4. ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‘๋‹ต (์‚ฌ์šฉ์ž)

โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ Google ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

Acess Token ์ด์šฉํ•˜๊ธฐ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๊ถŒํ•œ์— ๋Œ€ํ•ด์„œ๋งŒ Google ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  1. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ Acess Token ์ฃผ๊ธฐ (์„œ๋น„์Šค โ†’ ๊ตฌ๊ธ€)

  2. ์‚ฌ์šฉ์ž ์ •๋ณด ์–ป๊ธฐ (๊ตฌ๊ธ€ โ†’ ์„œ๋น„์Šค)

๐Ÿ”— 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 ์ธ์ฆ ๋ฐฉ์‹

  1. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์š”์ฒญ

  2. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์‘๋‹ต

  3. ๋กœ๊ทธ์ธ ์š”์ฒญ(ID, Password)

  4. ํ† ํฐ ์ƒ์„ฑ

  5. ํ† ํฐ ์‘๋‹ต

  6. ํ† ํฐ ์ €์žฅ

  7. (๋‚˜์ค‘์—) ํ† ํฐ๊ณผ ํ•จ๊ป˜ ์ •๋ณด ์š”์ฒญ

  8. ํ† ํฐ ๊ฒ€์ฆ ๋ฐ ์‘๋‹ต

  • ํ† ํฐ์— ์š”์ฒญํ•œ ์‚ฌ๋žŒ์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ์„œ๋ฒ„๋Š” 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 ์กฐํšŒ ํ•„์š” ์—†์Œ)

์‹ค์ œ ์ธ์ฆ ๋ฐฉ์‹

  1. ID์™€ Password๋ฅผ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ

  2. ํ† ํฐ ๋ฐœ๊ธ‰

  3. Access Token์„ ์ด์šฉํ•ด API ์š”์ฒญ

  4. Access Token์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์‘๋‹ต

  5. ์ถ”ํ›„ Refresh Token์œผ๋กœ Access Token ์žฌ์š”์ฒญ

  6. Access Token ์žฌ๋ฐœ๊ธ‰

Last updated