HTTP/1.0, HTTP/1.1, HTTP/2.0

์•ˆ์žฌ๋ฏผยท2024๋…„ 9์›” 9์ผ

๋„คํŠธ์›Œํฌ

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

HTTP

๐Ÿ“’ HTTP ํ”„๋กœํ† ์ฝœ์˜ ํŠน์ง•

(Hyper Text Transfer Protocol)

TCP/IP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•จ

  1. ๋น„์—ฐ๊ฒฐ์„ฑ(connectionless)
    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋งบ์€ ํ›„, ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋งˆ์น˜๋ฉด ์—ฐ๊ฒฐ์„ ๋Š์Œ
  1. ๋ฌด์ƒํƒœ์„ฑ(stateless)
    ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ

โ“ ์™œ ๋น„์—ฐ๊ฒฐ์„ฑ์„ ์œ ์ง€ํ• ๊นŒ?

HTTP๋Š” ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ํ™˜๊ฒฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„
๋”ฐ๋ผ์„œ, ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๋“ค๊ณผ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„
์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด, ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๋“ค๊ณผ ๋” ๋งŽ์€ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ์Œ


HTTP/1.0

๋งค ์š”์ฒญ ๋งˆ๋‹ค TCP ์—ฐ๊ฒฐ ์ƒ์„ฑ


HTTP/1.1

๐Ÿ“’ Keep-Alive Connection

์—ฐ๊ฒฐ ์ง€์†์‹œ๊ฐ„์„ ์„ค์ •ํ•˜์—ฌ TCP ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
TCP ํ•ธ๋“œ์…ฐ์ดํฌ ๋น„์šฉ์€ ์ค„์ด๊ณ , ์‘๋‹ต ์„ฑ๋Šฅ์€ ๋†’์ธ๋‹ค.

๐Ÿ“’ Pipelining

ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์—ฐ์†์ ์„ ๋ณด๋‚ธ ํ›„ ์‘๋‹ต์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ›๋Š” ๋ฐฉ์‹

โ— Head of Line Blocking (HOL Blocking)

๋” ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Keep-Alive Connection ๊ณผ Pipelining์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ตญ์€ ์š”์ฒญ ์ˆœ์„œ๋Œ€๋กœ ์‘๋‹ต์„ ๋ณด๋‚ด์•ผํ•œ๋‹ค. ์ด๋•Œ ์•ž์„  ์‘๋‹ต์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ๋’ค์˜ ์‘๋‹ต์ด ๋นจ๋ผ๋„ ๋Œ€๊ธฐ ํ•˜๊ฒŒ ๋œ๋‹ค.


HTTP/2.0

๐Ÿ“’ Multiplexing

ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ

Pipelining์˜ HOL Blocking์„ ํ•ด๊ฒฐ

๐Ÿ“’ Binary Framing Layer

HTTP ๋ฉ”์„ธ์ง€๋Š” Text๋กœ ์ „์†ก ๋˜์—ˆ์ง€๋งŒ, HTTP 2.0์—์„œ๋Š” binary Frame์œผ๋กœ ์ธ์ฝ”๋”ฉ ๋˜์–ด ์ „์†กํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ

์š”์ฒญ ์‹œ

  • HEADERS frame
    ์š”์ฒญ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
  • DATA frame
    ์š”์ฒญ ๋ณธ๋ฌธ

์‘๋‹ต ์‹œ

  • HEADERS frame
    ์‘๋‹ต์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

  • DATA frame
    ์‹ค์ œ ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ

๐Ÿ“’ Server Push

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์„œ๋ฒ„๊ฐ€ ๋ฏธ๋ฆฌ ์ „์†กํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ดˆ๊ธฐ ์›นํŽ˜์ด์ง€ index.html์„ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ index.html ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ css,js ํŒŒ์ผ๋„ ํ•„์š”ํ•  ๊ฒƒ์„ ์•Œ๊ณ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ™์ด ๋ณด๋‚ด๋Š” ๊ฒƒ

์ด๋ ‡๊ฒŒ ๋ฏธ๋ฆฌ ๋ณด๋‚ธ ํŒŒ์ผ์€ ์บ์‹œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด๋‘๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋”ฐ๋กœ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š๊ณ  ๊บผ๋‚ด์”€

๐Ÿ“’ Stream Prioritization

Pipelining์˜ HOL Blocking์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Multiplexing์„ ํ–ˆ์ง€๋งŒ, ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์— ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์—ฌ๋Ÿฌ ์‘๋‹ต์ด ๋’ค์„ž์—ฌ์„œ ํŒจํ‚ท ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋‹ค.

โ“ Stream Prioritization, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

HTTP/1.1์—์„œ Pipelining์˜ HOL Blocking์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HTTP/2.0์—๋Š” Multiplexing์„ ํ†ตํ•œ ๋ณ‘๋ ฌ์  ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์ˆœ์„œ ์ƒ๊ด€์—†์ด ์‘๋‹ต์„ ๋ณด๋‚ด๊ฒŒ ๋˜์—ˆ๋‹ค.

์‘๋‹ต์ด ๋น ๋ฅธ ๊ฒƒ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ทธ๋Ÿฐ๋ฐ ์™œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ•„์š”ํ• ๊นŒ?

HTML, CSS, JavaScript๊ฐ€ ์ „์†ก ๋  ๋•Œ, HTML์ด ๋จผ์ € ์ „์†ก ๋˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋‹ค.
์ด๋ฏธ์ง€๋‚˜ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋“ค์ด ๋จผ์ € ์ „์†ก๋˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ, ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ ๊ฐ ์š”์ฒญ์˜ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฆฌ์†Œ์Šค ํ• ๋‹น์„ ์ตœ์ ํ™” ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

๐Ÿ“’ HTTP Header Data Compression

HTTP/2 ๊ฐ ์š”์ฒญ์˜ ํ—ค๋”๋ฅผ ์••์ถ•ํ•˜์—ฌ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ—ค๋” ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ HPACK์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ค‘๋ณต๋œ ํ—ค๋” ์ •๋ณด๋ฅผ ์ค„์ธ๋‹ค.

HTTP/1.x ์—์„œ๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ํ—ค๋”์˜ ์ •๋ณด๋ฅผ ์ „์†ก ํ•ด์•ผํ•˜์—ฌ, ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ๋“ค์ด ๋งŽ์•˜๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

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