Cloudflare๋Š” NGINX์—์„œ HTTP/3์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Cloudflare ํšŒ์‚ฌ ์ค€๋น„๋œ ๋ชจ๋“ˆ NGINX์—์„œ HTTP/3 ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ Cloudflare์—์„œ ๊ฐœ๋ฐœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ‚ค์‹œ QUIC ๋ฐ HTTP/3 ์ „์†ก ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. quiche ์ฝ”๋“œ๋Š” Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ NGINX ๋ชจ๋“ˆ ์ž์ฒด๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋™์  ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์—ด๋‹ค BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ.

์กฐ๋ฆฝํ•˜๋ ค๋ฉด ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. ํŒจ์น˜ nginx 1.16 ๋ฐ ์•”ํ˜ธ quiche ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ "โ€”with-http_v3_module โ€”with-quiche=../quiche" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ nginx๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์„ธ์š”. ๋นŒ๋“œ ์‹œ TLS ์ง€์›์€ BoringSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ("--with-openssl=../quiche/deps/boringssl")๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์•ผ ํ•˜์ง€๋งŒ OpenSSL ์‚ฌ์šฉ์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋ ค๋ฉด "quic" ํ”Œ๋ž˜๊ทธ๊ฐ€ ํฌํ•จ๋œ Listen ์ง€์‹œ๋ฌธ์„ ์„ค์ •์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "listen 443 quic restartport").

ํด๋ผ์ด์–ธํŠธ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋Š” Chrome Canary ๋ฐ ์ปฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์‹คํ—˜์  ๋นŒ๋“œ์— HTTP/3 ์ง€์›์ด ์ด๋ฏธ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์ธก์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ณ„๋„์˜ ์ œํ•œ์ ์ธ ์‚ฌ์šฉ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ตฌํ˜„. nginx์—์„œ HTTP/3์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์€ HTTP/3 ์ง€์›์ด ํฌํ•จ๋œ ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ƒˆ ํ”„๋กœํ† ์ฝœ์˜ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„์— ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. nginx์—์„œ HTTP/3์— ๋Œ€ํ•œ ํ‘œ์ค€ ์ง€์› ๋“ฑ์žฅ ์˜ˆ์ƒ๋œ๋‹ค 1.17~6๊ฐœ์›” ๋™์•ˆ 12.x ๋ถ„๊ธฐ์—์„œ.

HTTP/3์€ HTTP/2์— ๋Œ€ํ•œ ์ „์†ก์œผ๋กœ QUIC ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ์„ ํ‘œ์ค€ํ™”ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ๊ทœ์•ฝ QUIC (๋น ๋ฅธ UDP ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ)์€ ์›น์šฉ TCP+TLS ์กฐํ•ฉ์˜ ๋Œ€์•ˆ์œผ๋กœ 2013๋…„๋ถ€ํ„ฐ Google์—์„œ ๊ฐœ๋ฐœํ•˜์—ฌ TCP ์—ฐ๊ฒฐ์˜ ๊ธด ์„ค์ • ๋ฐ ํ˜‘์ƒ ์‹œ๊ฐ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ „์†ก ์ค‘ ํŒจํ‚ท ์†์‹ค ์‹œ ์ง€์—ฐ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. QUIC๋Š” ๋‹ค์ค‘ ์—ฐ๊ฒฐ์˜ ๋‹ค์ค‘ํ™”๋ฅผ ์ง€์›ํ•˜๊ณ  TLS/SSL๊ณผ ๋™๋“ฑํ•œ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” UDP ํ”„๋กœํ† ์ฝœ์˜ ํ™•์žฅ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง• ๋น ๋ฅธ:

  • TLS์™€ ์œ ์‚ฌํ•œ ๋†’์€ ๋ณด์•ˆ(๊ธฐ๋ณธ์ ์œผ๋กœ QUIC๋Š” UDP๋ฅผ ํ†ตํ•ด TLS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค)
  • ํ๋ฆ„ ๋ฌด๊ฒฐ์„ฑ ์ œ์–ด, ํŒจํ‚ท ์†์‹ค ๋ฐฉ์ง€
  • ์ฆ‰์‹œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ (0-RTT, ์•ฝ 75%์˜ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ์„ค์ • ํŒจํ‚ท์„ ๋ณด๋‚ธ ํ›„ ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ) ์š”์ฒญ ์ „์†ก๊ณผ ์‘๋‹ต ์ˆ˜์‹  ์‚ฌ์ด์˜ ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ(RTT, ์™•๋ณต ์‹œ๊ฐ„)
  • ํŒจํ‚ท์„ ์žฌ์ „์†กํ•  ๋•Œ ๋™์ผํ•œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ์ˆ˜์‹ ๋œ ํŒจํ‚ท ์‹๋ณ„์˜ ๋ชจํ˜ธ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ํŒจํ‚ท ์†์‹ค์€ ํ•ด๋‹น ํŒจํ‚ท๊ณผ ๊ด€๋ จ๋œ ์ŠคํŠธ๋ฆผ์˜ ์ „๋‹ฌ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ ํ˜„์žฌ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์†์‹ค๋œ ํŒจํ‚ท์˜ ์žฌ์ „์†ก์œผ๋กœ ์ธํ•œ ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์†์‹ค๋œ ํŒจํ‚ท ๋ฐ์ดํ„ฐ์˜ ์žฌ์ „์†ก์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํŒจํ‚ท ์ˆ˜์ค€์—์„œ ํŠน์ˆ˜ ์˜ค๋ฅ˜ ์ˆ˜์ • ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์•”ํ˜ธํ™” ๋ธ”๋ก ๊ฒฝ๊ณ„๋Š” QUIC ํŒจํ‚ท ๊ฒฝ๊ณ„์™€ ์ •๋ ฌ๋˜์–ด ํ›„์† ํŒจํ‚ท์˜ ๋‚ด์šฉ์„ ๋””์ฝ”๋”ฉํ•  ๋•Œ ํŒจํ‚ท ์†์‹ค์ด ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • TCP ๋Œ€๊ธฐ์—ด ์ฐจ๋‹จ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋ฐ”์ผ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์žฌ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์—ฐ๊ฒฐ ์‹๋ณ„์ž ์ง€์›
  • ๊ณ ๊ธ‰ ์—ฐ๊ฒฐ ์ •์ฒด ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ์„ฑ
  • ๋ฐฉํ–ฅ๋ณ„ ์ฒ˜๋ฆฌ๋Ÿ‰ ์˜ˆ์ธก ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ท์ด ์ตœ์ ์˜ ์†๋„๋กœ ์ „์†ก๋˜๋„๋ก ๋ณด์žฅํ•˜์—ฌ ํŒจํ‚ท์ด ์ •์ฒด๋˜๊ฑฐ๋‚˜ ํŒจํ‚ท ์†์‹ค์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ง€ ๊ฐ€๋Šฅ ์ด๋“ TCP์™€ ๋น„๊ตํ•œ ์„ฑ๋Šฅ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰. YouTube์™€ ๊ฐ™์€ ๋™์˜์ƒ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ QUIC์€ ๋™์˜์ƒ ์‹œ์ฒญ ์‹œ ๋ฆฌ๋ฒ„ํผ๋ง ์ž‘์—…์„ 30%๊นŒ์ง€ ์ค„์ด๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.
  • ์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€