Network

HTTP ๊ธฐ์ดˆ [URL/Stateless/๋น„์—ฐ๊ฒฐ์„ฑ]

DAHLIA CHOI 2021. 7. 21. 23:11

 

HTTP๋ฅผ ๋ณด๊ธฐ ์ „์— ๋จผ์ € ๊ฐ„๋‹จํžˆ URL์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

โœURL์˜ ๋ฌธ๋ฒ•

scheme://[userinfo@]host[:port][/path][?query/[#fragment]

ex ) https://www.google.com:433/search?q=hello&hl=ko

  

ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ๋ช…, ํฌํŠธ๋ฒˆํ˜ธ, ํŒจ์Šค, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

 

[ scheme ]

  • ์ฃผ๋กœ ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ (http, https ...)
  • http๋Š” 80ํฌํŠธ, https๋Š” 433 ํฌํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, http์™€ https๋Š” ๋Œ€์ค‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค.

โž• https๋Š” http์— ๋ณด์•ˆ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.

โž• ํ”„๋กœํ† ์ฝœ์ด๋ž€? ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€ ํ•˜๋Š” ์•ฝ์† ๊ทœ์น™์ด๋‹ค.

 

[ userinfo ]

  • URL์— ์‚ฌ์šฉ์ž์ •๋ณด๋ฅผ ํฌํ•จํ•ด์„œ ์ธ์ฆ
  • ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

[ host ]

  • ํ˜ธ์ŠคํŠธ๋ช…
  • ๋„๋ฉ”์ธ๋ช… ๋˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. (www.google.com)

[ PORT ]

  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ƒ๋žตํ•˜๊ณ , ์ƒ๋žต์‹œ http๋Š” 80, https๋Š” 433์ด๋‹ค.

[ path ]

  • ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ, ๊ณ„์ธต์  ๊ตฌ์กฐ
ex ) /items/iphone8

[ query ]

  • key = value ํ˜•ํƒœ
  • ?๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, &๋กœ ์—ฌ๋Ÿฌ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • query parameter, query string ์œผ๋กœ ๋ถˆ๋ฆฐ๋‹ค. ( ๋‹ค ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— )

[ fragment ]

  • html ๋‚ด๋ถ€ ๋ถ๋งˆํฌ ๋“ฑ์— ์‚ฌ์šฉ
  • ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

 


HTTP๋Š” HyperText Transfer Protocol์˜ ์•ฝ์ž์ด๋‹ค.

์ฃผ๋กœ HTML๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ‘‰HTTP์˜ ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ
  • ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(stateless), ๋น„์—ฐ๊ฒฐ์„ฑ
  • HTTP ๋ฉ”์„ธ์ง€
  • ๋‹จ์ˆœํ•จ, ํ™•์žฅ๊ฐ€๋Šฅ

[ ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ ]

  • Request Response ๊ตฌ์กฐ
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ๋Œ€๊ธฐํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‘๋‹ตํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ui/ux๋ฅผ ๊ทธ๋ฆฌ๋Š”๋ฐ ์ง‘์ค‘ํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ๋ณต์žกํ•œ ๋น„์ง€๋‹ˆ์Šค๋กœ์ง๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‚˜๋ˆ„๊ฒŒ ๋  ๊ฒฝ์šฐ์—๋Š” ์–‘์ชฝ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[ ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ (Stateless) ]

๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ด๋ž€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

 

Stateful ๐Ÿ†š Stateless 

 

๐Ÿ’œStateful๐Ÿ’œ

 

๋งŒ์•ฝ ๊ฐ€๊ฒŒ์— ๊ฐ”๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž

์†๋‹˜ : ์‚ฌ๊ณผ ์ฃผ์„ธ์š”.
A : ๋ช‡ ๊ฐœ ๋“œ๋ฆด๊นŒ์š”?

์†๋‹˜ : 2๊ฐœ ์ฃผ์„ธ์š”
A : 2์ฒœ์›์ž…๋‹ˆ๋‹ค.

์ค‘๊ฐ„์— ์ ์›์ด ๋ฐ”๋€๋‹ค๋ฉด?

์†๋‹˜ : ์‚ฌ๊ณผ ์ฃผ์„ธ์š”.
A : ๋ช‡ ๊ฐœ ๋“œ๋ฆด๊นŒ์š”?

์†๋‹˜ : 2๊ฐœ ์ฃผ์„ธ์š”.
B : ๋ฌด์—‡์„ 2๊ฐœ ๋“œ๋ฆด๊นŒ์š”?

์ƒํƒœ๋ฅผ ์œ ์ง€ํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„์— ์ ์›์ด ๋ฐ”๋€Œ๋ฉด ์˜์‚ฌ์†Œํ†ต์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

๐Ÿ’œStateless๐Ÿ’œ

 

๋ฐ˜๋Œ€๋กœ ๋ฌด์ƒํƒœ๋กœ ์œ ์ง€ํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„์— ์ ์›์ด ๋ฐ”๊ปด๋„ ์˜์‚ฌ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์†๋‹˜ : ์‚ฌ๊ณผ ์ฃผ์„ธ์š”.
A : ๋ช‡ ๊ฐœ๋“œ๋ฆด๊นŒ์š”?

์†๋‹˜ : ์‚ฌ๊ณผ 2๊ฐœ ์ฃผ์„ธ์š”.
B : 2์ฒœ์› ์ž…๋‹ˆ๋‹ค.

์ƒํƒœ๋ฅผ ์œ ์ง€ํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„์— ์„œ๋ฒ„๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋ฌด์ƒํƒœ๋Š” ์„œ๋ฒ„๊ฐ€ ์ค‘๊ฐ„์— ๋ฐ”๋€Œ์–ด๋„ ๊ดœ์ฐฎ๋‹ค ๐Ÿ‘‰ ๋ฌดํ•œํ•œ ์„œ๋ฒ„ ์ฆ์„ค ๊ฐ€๋Šฅ

 

โœ ํ•œ๊ณ„

  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ์ธํ–ˆ๋‹ค๋Š” ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์— ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค.

์ด๋Ÿด๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค์™€ ์„œ๋ฒ„ ์„ธ์…˜ ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

์ด๋Ÿฐ๊ฒƒ๋“ค์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ตœ๋Œ€ํ•œ ๋ฌด์ƒํƒœ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

โž• ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” stateless

00์‹œ ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ๋ฅผ ํ•  ๊ฒฝ์šฐ์—๋Š” ์ˆ˜๋งŒ๋ช…์ด ๋™์‹œ์— ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด๋Ÿด ๊ฒฝ์šฐ ์™„์ „ํžˆ ์„œ๋ฒ„์— ๋™์‹œ์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€ ์œ„ํ•ด์„œ, ์ดˆ๊ธฐ ํŽ˜์ด์ง€๋Š” ์ •์  HTML ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

์ •์  ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋Š” ๋ฒ„ํŠผ์„ ๋งŒ๋“ ๋‹ค๋ฉด, ๊ทธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์™„์ „ํžˆ ๋™์‹œ์— ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[ ๋น„์—ฐ๊ฒฐ์„ฑ (connectionless) ]

 

๐Ÿค ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ชจ๋ธ ๐Ÿค

 

๐Ÿค์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ ๐Ÿค

  • HTTP๋Š” ๊ธฐ๋ณธ์ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์ด๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ดˆ ๋‹จ์œ„ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ตํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์€ ์‚ฌ๋žŒ์ด ์™„์ „ํžˆ ๋™์‹œ๊ฐ„๋Œ€์— ์ ‘์†ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทนํžˆ ๋“œ๋ฌผ๋‹ค.
  • ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ํ•œ๊ณ„

  • TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผํ•œ๋‹ค. (3 way handshake ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ๋“ฆ)
  • HTML๋ฟ๋งŒ ์•„๋‹ˆ๋ผ CSS, ์ด๋ฏธ์ง€, ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๋“ฑ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด ๋งŽ๋‹ค. 

์ด ๋ฌธ์ œ๋ฅผ HTTP์ง€์† ์—ฐ๊ฒฐ(Persistent Connections)๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

http ์ง€์† ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์›๋ž˜ ์ด๋žฌ๋˜ ๊ณผ์ •์ด,

 

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

[ HTTP ๋ฉ”์„ธ์ง€ ]

 

๊ธฐ๋ณธ์ ์ธ HTTP ๋ฉ”์„ธ์ง€ ๊ตฌ์กฐ๋Š” ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” HTTP ์š”์ฒญ๋ฉ”์„ธ์ง€๋ฅผ ์„œ๋ฒ„์—๊ฒŒ, ์„œ๋ฒ„๋Š” HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

 

์ด๋Ÿฐ HTTP ๋ฉ”์„ธ์ง€๋Š” TCP/IP ํŒจํ‚ท์œผ๋กœ ๊ฐ์‹ธ์ ธ์„œ ๋ณด๋‚ธ๋‹ค. 
๊ตฌ๊ธ€ ์„œ๋ฒ„์— ๋„์ฐฉํ•˜๋ฉด, ํŒจํ‚ท์˜ TCP/IP ํŒจํ‚ท์„ ๋‹ค ๊นŒ์„œ ๋ฒ„๋ฆฌ๊ณ  HTTP๋ฅผ ํ™•์ธํ•œ๋‹ค.
๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , ์„œ๋ฒ„์—์„œ HTTP์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ํŒจํ‚ท์„ ์‹ธ์„œ ๋ณด๋‚ธ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋งŒ๋“ค์–ด๋‚ธ ์‘๋‹ต๋ฉ”์„ธ์ง€๋ฅผ ๋ Œ๋”๋งํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.

 

๐Ÿ’› ์š”์ฒญ ๋ฉ”์„ธ์ง€ ๐Ÿ’›

 

GET/search?q=hello@hl=ko HTTP/1.1
Host: www.google.com

 

HTTP ๋ฉ”์„œ๋“œ

์ข…๋ฅ˜

  • GET : ๋ฆฌ์†Œ์Šค ์กฐํšŒ
  • POST : ์š”์ฒญ ๋‚ด์—ญ ์ฒ˜๋ฆฌ
  • PUT
  • DELETE

์š”์ฒญ๋Œ€์ƒ

  • ์ ˆ๋Œ€๊ฒฝ๋กœ ="/"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ๋กœ

HTTP ๋ฒ„์ „

 

๐Ÿ’› ์‘๋‹ต๋ฉ”์„ธ์ง€ ๐Ÿ’›

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
<body>...</body>
</html>

HTTP ๋ฒ„์ „

 

HTTP ์ƒํƒœ ์ฝ”๋“œ : ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ํ‘œ์‹œํ•จ

  • 200 : ์„ฑ๊ณต
  • 400 : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์˜ค๋ฅ˜
  • 500: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜

์ด์œ  ๋ฌธ๊ตฌ : ์ˆซ์ž๋งŒ ์žˆ์œผ๋ฉด ํ—ท๊ฐˆ๋ฆด๊นŒ๋ด ์งง์€ ์ƒํƒœ ์ฝ”๋“œ ์„ค๋ช… ๋ฌธ๊ตฌ

 

 

HTTP ํ—ค๋”

  • HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด
  • ๋ฉ”์„ธ์ง€ body ๋นผ๊ณ  ํ•„์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋‹ค ๋“ค์–ด์žˆ๋‹ค. ( ex) ๋ฉ”์„ธ์ง€ ๋ฐ”๋”” ๋‚ด์šฉ, ๋ฐ”๋”” ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ...)

HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””

  • ์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ
  • HTML ๋ฌธ์„œ, ์ด๋ฏธ์ง€, ์˜์ƒ, JSON ๋“ฑ๋“ฑ byte๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ
  • ์••์ถ•ํ•ด์„œ ๋ณด๋‚ด๋ฉด ์••์ถ•๋œ ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋‹ค.

 


์ด ํฌ์ŠคํŒ…์€ ์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹์„ ๋“ฃ๊ณ  ์ž‘์„ฑ๋œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.