HTTP vs Socket

hyunjaeยท2022๋…„ 7์›” 6์ผ
0

network

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

HTTP(HyperText Transfer Protocol)

ํ•˜์ดํผ ํ…์ŠคํŠธ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ทœ์น™(ํ†ต์‹  ๊ทœ์•ฝ)์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ HyperText ๋ž€ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ฌธ์„œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
HTML์˜ <a ํƒœ๊ทธ>๋ฅผ ๋– ์˜ฌ๋ฆฌ๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค. HTTP ๋ผ๋Š” ํ†ต์‹  ๊ทœ์•ฝ์„ ๋งŒ๋“  ๊ฒƒ์€ ์ข‹์ง€๋งŒ ์ •์ž‘ ํ•˜์ดํผ ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ธฐ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“  ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜์ดํผ ํ…์ŠคํŠธ๋ฅผ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์— ํŒ€ ๋ฒ„๋„ˆ์Šค๋ฆฌ๋Š” ์ธํ„ฐ๋„ท ๊ธฐ๋ฐ˜์˜ ํ•˜์ดํผ ํ…์ŠคํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ํ˜„์žฌ์˜ HTML ์ž…๋‹ˆ๋‹ค.

์›น ์„œ๋น„์Šค์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ •๋ณด๋ฅผ ์š”์ฒญ(request)ํ•˜๊ณ  ์‘๋‹ต(response) ๋ฐ›๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์„ ๋งํ•œ๋‹ค.
์ดˆ๊ธฐ์—๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” GET์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋งŒ ์žˆ์—ˆ๋‹ค. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต์€ ๋ฌด์กฐ๊ฑด HTML ๋ฌธ์„œ์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœํ† ์ฝœ ํ™•์žฅ์˜ ํ•„์š”์„ฑ์œผ๋กœ HTTP/1.0์—์„œ๋Š” ๋ฉ”์†Œ๋“œ์™€ ํ—ค๋”๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ , ํ˜„์žฌ๋Š” HTTP/1.1์„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
HTTP/2์—์„œ๋Š” ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๊ณ , HTTP/3์€ TCP ๋Œ€์‹  UDP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„  ์ค‘์ด๋‹ค.

HTTP์˜ ํŠน์ง•

1. ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งŒ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์œผ๋กœ, ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ์š”์ฒญ์„ ํ•  ์ˆ˜ ์—†๊ณ  ๋ฌด์กฐ๊ฑด ์š”์ฒญ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์˜ ๋‹จ์ ์€?

A(ํด๋ผ์ด์–ธํŠธ)์™€ B(์„œ๋ฒ„)๊ฐ€ ์ฑ„ํŒ…์„ ํ•˜๋Š”๋ฐ, B๊ฐ€ Aํ•œํ…Œ ๋จผ์ € ํ†ก์„ ๋ณด๋‚ผ ์ˆœ ์—†์Šต๋‹ˆ๋‹ค.

2. ๋ฌด์ƒํƒœ(stateless) ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ/์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฆ‰, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „ ์š”์ฒญ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋‹ค์‹œ ์„œ๋ฒ„์— ๋™์ผํ•œ ์š”์ฒญ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „์— ์ž์‹ ์ด ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋†“๊ณ  ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด์ฃผ๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด๋„ ์ƒ๊ด€์ด ์—†์–ด์„œ ์„œ๋ฒ„ ํ™•์žฅ์„ฑ์ด ๋†’์€ ์žฅ์ ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŽ์€ ์–‘์˜ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋กœ๊ทธ์ธ ๊ฐ™์€ ์ƒํƒœ ์ •๋ณด๋Š” ์„œ๋ฒ„์— ์œ ์ง€์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค๋‚˜ ์„ธ์…˜ ๋“ฑ์„ ์ด์šฉํ•ด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ๋น„์—ฐ๊ฒฐ์„ฑ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋ฐ”๋กœ TCP/IP ์—ฐ๊ฒฐ์„ ๋Š์–ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ˆ˜๋งŽ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์—๋„ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. HTTP๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜ ์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ 0.000001์ดˆ๊นŒ์ง€ ๋™์ผํ•œ ์‹œ๊ฐ„์— ๋™์‹œ์— ์š”์ฒญ์„ ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋น„์—ฐ๊ฒฐ์„ฑ์˜ ํ•œ๊ณ„์™€ ํ•ด๊ฒฐ

  • ํ•œ๊ณ„
    ์ƒˆ๋กœ ์—ฐ๊ฒฐ๋  ๋•Œ๋งˆ๋‹ค TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•˜๋ฏ€๋กœ 3-way handshake์— ๋”ฐ๋ฅธ ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
    (HTML์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  ์ข…๋ฃŒ -> ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  ์ข…๋ฃŒ)

  • ํ•ด๊ฒฐ
    HTTP ์ง€์† ์—ฐ๊ฒฐ(Persisten Connections)์„ ํ†ตํ•ด ์ด๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    ์ฒ˜์Œ ์—ฐ๊ฒฐ์ด ๋˜๊ณ  ๋‚˜์„œ, ์—ฌ๋Ÿฌ ํŒŒ์ผ์˜ ์š”์ฒญ/์‘๋‹ต์ด ๋‹ค ๋๋‚œ ๋’ค ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

4. HTTP ๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด ํ†ต์‹ 

HTTP๋ฉ”์„ธ์ง€๋Š” HTTP ์š”์ฒญ๋ฉ”์„ธ์ง€์™€ HTTP ์‘๋‹ต๋ฉ”์„ธ์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
HTTP๋ฉ”์„ธ์ง€์— ๋ชจ๋“  ๊ฒƒ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. HTML, TEXT, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ, JSON, XML ๋“ฑ๋“ฑ

  • ๊ธฐ๋ณธ ๊ตฌ์กฐ
    • start-line : ์‹œ์ž‘ ๋ผ์ธ
    • header : ํ—ค๋”
    • empty line : ๊ณต๋ฐฑ ๋ผ์ธ(CRLF, ํ•„์ˆ˜)
    • message : body


Socket ํ†ต์‹ ์€ ์™œ ํ•„์š”ํ• ๊นŒ์š”?

HTTP๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋จผ์ € ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์ด ์ง€์—ฐ์ด ์งง์•„์•ผ ํ•˜๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Socket ํ†ต์‹ 

์•„๋ž˜๋Š” ์œ„ํ‚ค๋ฐฑ๊ณผ์˜ ์ •์˜์ž…๋‹ˆ๋‹ค.

์†Œ์ผ“(Socket)์ด๋ž€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„ ํ†ต์‹ ์˜ ์ข…์ฐฉ์ (Endpoint), ์ ‘์†์˜ ๋ ๋ถ€๋ถ„์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.
์ข…์ฐฉ์ ์ธ Endpoint๋Š” IP ์ฃผ์†Œ์™€ Port ๋ฒˆํ˜ธ์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ตœ์ข… ๋ชฉ์ ์ง€(PC, ํ•ธ๋“œํฐ ๋“ฑ์˜ ์ ‘์† ์—ฐ๊ฒฐ๋ถ€)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ(ํ”„๋กœ๊ทธ๋žจ 1)์™€ ์„œ๋ฒ„(ํ”„๋กœ๊ทธ๋žจ 2) ์–‘์ชฝ์—์„œ ์„œ๋กœ์—๊ฒŒ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ํ•˜๋Š” ๋ฐฉ์‹์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์œผ๋กœ, ์†Œ์ผ“์—์„œ ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์—ฐ๊ฒฐ์€ 2๊ฐœ์˜ Endpoint๋กœ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜์ž๋ฉด,
์†Œ์ผ“์€ ์‚ฌ์ „์ ์œผ๋กœ '์ „๊ตฌ ๋”ฐ์œ„๋ฅผ ๋ผ์›Œ ๋„ฃ์–ด ์ ‘์†ํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๊ตฌ, ์—ฐ๊ฒฐ๋ถ€'๋ฅผ ์ผ์ปซ๋Š”๋ฐ ์ฝ˜์„ผํŠธ ๊ตฌ๋ฉ์„ ๋– ์˜ฌ๋ฆฌ๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ์˜ ์†Œ์ผ“์€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์—ฐ๊ฒฐ๋ถ€์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํœด๋Œ€ํฐ(ํ”„๋กœ๊ทธ๋žจ A)์„ ์ถฉ์ „ํ•˜๊ธฐ ์œ„ํ•ด ํœด๋Œ€ํฐ ์—ฐ๊ฒฐ๋ถ€ ์†Œ์ผ“๊ณผ ๋ณด์กฐ๋ฐฐํ„ฐ๋ฆฌ(ํ”„๋กœ๊ทธ๋žจ B)์— ์ถฉ์ „์„ ์„ ๊ฝ‚๋Š” ์—ฐ๊ฒฐ๋ถ€ ์†Œ์ผ“์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ „๊ธฐ ์ถฉ์ „์ด ์ œ๋Œ€๋กœ ์ž‘๋™๋˜๋ ค๋ฉด 220v๋ผ๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์†Œ์ผ“ ํ†ต์‹ ๋„ TCP, UDP ๊ทœ์•ฝ์— ๋งž๋Š” ์†Œ์ผ“์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ์†Œ์ผ“์— ๊ฝ‚์•„ ์“ด๋‹ค๋Š” ๊ฐœ๋…์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

profile
ํ•˜๋‚˜์— ๋ฌธ์ œ๋ฅผ! ๋‘˜์— ํ•ด๊ฒฐํ•˜์ž!๐Ÿค“

0๊ฐœ์˜ ๋Œ“๊ธ€