[Daily morning study] HTTP/1.1, HTTP/2, HTTP/3์˜ ์ฐจ์ด์ 

#daily morning study

Image


HTTP/1.1, HTTP/2, HTTP/3์˜ ์ฐจ์ด์ 

์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ธ HTTP(ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ)๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์ด ์กด์žฌํ•˜๋ฉฐ, ๊ฐ ๋ฒ„์ „๋งˆ๋‹ค ์„ฑ๋Šฅ๊ณผ ๊ธฐ๋Šฅ์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค. ์ด๋ฒˆ ๋ฌธ์„œ์—์„œ๋Š” HTTP/1.1, HTTP/2, HTTP/3์˜ ์ฃผ์š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

HTTP/1.1

ํŠน์ง•

  • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜: ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๋ชจ๋‘ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง.
  • ์—ฐ๊ฒฐ ๊ด€๋ฆฌ: ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด TCP ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฆฝํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. Keep-Alive ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„๋™๊ธฐ์„ฑ ๋ถ€์กฑ: ํ•œ ์—ฐ๊ฒฐ์—์„œ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋™์‹œ์— ์ด๋ฃจ์–ด์งˆ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์š”์ฒญ์ด ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

์˜ˆ์‹œ

GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive

HTTP/2

๊ฐœ์„ ๋œ ์ 

  • ์ด์ง„ ํ”„๋กœํ† ์ฝœ: ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์ด์ง„ ํ˜•์‹์œผ๋กœ ์ „์†ก๋˜์–ด, ํ•ด์„ ๋ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • Multiplexing: ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํ—ค๋” ์••์ถ•: HPACK์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ—ค๋” ์ •๋ณด๋ฅผ ์••์ถ•ํ•ด ์ „์†ก ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ด.
  • ์„œ๋ฒ„ ํ‘ธ์‹œ(Server Push): ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์—†์ด๋„ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด ๋กœ๋”ฉ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค.

์˜ˆ์‹œ

:method: GET
:path: /index.html
:scheme: https
:authority: example.com

HTTP/3

ํ˜์‹ ์ ์ธ ๋ณ€ํ™”

  • QUIC ํ”„๋กœํ† ์ฝœ: UDP ๊ธฐ๋ฐ˜์˜ QUIC(Quick UDP Internet Connections) ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค.
  • 0-RTT ํ•ธ๋“œ์‰์ดํฌ: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค.
  • Multiplexing ํ™•์ธ: HTTP/2์˜ Multiplexing ๊ธฐ๋Šฅ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•˜์—ฌ, ํŒจํ‚ท ์†์‹ค์ด ๋ฐœ์ƒํ•  ๋•Œ ํŠน์ • ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์˜ํ–ฅ์„ ์ค„์ธ๋‹ค.

์ˆ˜์‹  ์‘๋‹ต ์˜ˆ์‹œ

QUIC์„ ์‚ฌ์šฉํ•˜๋Š” HTTP/3์˜ ์ˆ˜์‹  ์‘๋‹ต์€ ์ด์ง„ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ๋˜์–ด TCP์™€๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”๋œ๋‹ค. ์‹ค์ œ HTTP/3 ์š”์ฒญ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

GET /index.html HTTP/3

์ข…ํ•ฉ ๋น„๊ตํ‘œ

ํŠน์„ฑHTTP/1.1HTTP/2HTTP/3
ํ”„๋กœํ† ์ฝœ ํ˜•์‹ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์ด์ง„ ๊ธฐ๋ฐ˜QUIC(UDP) ๊ธฐ๋ฐ˜
๋‹ค์ค‘ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ถˆ๊ฐ€๋Šฅ / ๋Œ€๊ธฐ๊ฐ€๋Šฅ๊ฐ€๋Šฅ
์„œ๋ฒ„ ํ‘ธ์‹œ๋ถˆ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ
ํ—ค๋” ์••์ถ•์—†์ŒHPACK ์‚ฌ์šฉQPACK ์‚ฌ์šฉ
ํ•ธ๋“œ์‰์ดํฌ1RTT1RTT0-RTT

๊ฒฐ๋ก 

HTTP ํ”„๋กœํ† ์ฝœ์˜ ๋ฐœ์ „์€ ์›น ํ™˜๊ฒฝ์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค. HTTP/1.1์—์„œ HTTP/2, HTTP/3๋กœ์˜ ๋ณ€ํ™”๋Š” ์†๋„์™€ ํšจ์œจ์„ฑ์„ ๋†’์˜€๊ณ , ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์›น ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œ์ผฐ๋‹ค. ๊ฐ๊ฐ์˜ ํ”„๋กœํ† ์ฝœ์˜ ํŠน์ง•์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜์—ฌ, ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ์‹œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋Œ์–ด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž.