QUIC(๋น ๋ฅธ UDP ์ธํฐ๋ท ์ฐ๊ฒฐ)๋ TCP, TLS ๋ฐ HTTP/2์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ UDP ๊ธฐ๋ฐ ํ๋กํ ์ฝ์
๋๋ค. ์ด๋ ์ข
์ข
์๋ก์ด ๋๋ "์คํ์ " ํ๋กํ ์ฝ์ด๋ผ๊ณ ๋ถ๋ฆฌ์ง๋ง ์คํ ๋จ๊ณ๋ณด๋ค ์ค๋ ์ง์๋์์ต๋๋ค. ๊ฐ๋ฐ์ 7๋
์ด์ ์งํ๋์์ต๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ํ๋กํ ์ฝ์ ํ์ค์ด ๋์ง ๋ชปํ์ง๋ง ์ฌ์ ํ ๋๋ฆฌ ๋ณด๊ธ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, QUIC๋ Google ๋ฐ Facebook๊ณผ ๊ฐ์ ๊ฑฐ๋ ๊ธฐ์
์์ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์ ํธ๋ํฝ ์๋๋ฅผ ๋์ด๊ณ ์ง์ฐ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ IETF๋ ์ด ํ๋กํ ์ฝ ํฌํฌ๋ฅผ HTTP/3 ํ์ค์ ๊ธฐ์ด๋ก ์ ์ธํ์ต๋๋ค(HTTP/2๊ฐ
๊ฐ๋
QUIC์ ์๋ ์ ์์ค ์ ์ ๋คํธ์ํฌ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ ๊ฑฐ์ TCP๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. TCP๋ ํจํท์ ์์๋๋ก ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ํ ํจํท์ด ์์ค๋๋ฉด ์ ์ฒด ๋๊ธฐ์ด์ด ์ค์ง๋ฉ๋๋ค(
QUIC๋ TCP ๋์ฒด์ TLS 1.3 ๊ตฌํ์ ๊ฒฐํฉํ๋ฏ๋ก ๋ชจ๋ ์ฐ๊ฒฐ์ ํญ์ ์ํธํ๋๋ฉฐ ์ด๋ฌํ ํธ๋ํฝ์ ํด๋
ํ๋ ๊ฒ์ HTTPS๋ฅผ ํตํด ์งํ๋๋ ๊ฒฝ์ฐ๋ณด๋ค ์ฝ์ง ์์ต๋๋ค. ๋ํ QUIC๋ TCP ์คํ์ ์์ ํ ๊ต์ฒดํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์์ค์์ ๊ตฌํ๋ฉ๋๋ค. ์์.
HTTP/2์ ๋ฉํฐํ๋ ์ฑ ์ง์์๋ ๋ถ๊ตฌํ๊ณ ํจํท์ ์์๋๋ก ์ ๋ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ HOL ์ฐจ๋จ ๋ฌธ์ ๊ฐ ๋จ์ ์์์ต๋๋ค. QUIC๋ UDP ์์ ๊ตฌํ๋๋ฏ๋ก ์์น์ ์ผ๋ก ์ฐจ๋จ์ด ์์ผ๋ฉฐ, ํจํท์ด ์์ํ ์์ค๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ "์ด์"์ ์ผ๋ถ๋ฅผ ํฌํจํ ์ ์์ด ์ค๋ณต์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ํ QUIC๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ด์์ ๋ค์ํ ์ ํ์ ์์ฒญ์ ์ํด ๋ชจ๋๋ฆฌ์ ๋๊ธฐ์ด์ ์ฌ๋ฌ ์ค๋ ๋๋ก ๋ถํ ํฉ๋๋ค. ๋ฐ๋ผ์ ํจํท์ด ์์ค๋๋ฉด ํ๋์ ๋๊ธฐ์ด(์: ํน์ ํ์ผ ์ ์ก)์๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ
์ฒ์์ QUIC์ Google ๋ด์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ ์ฃผ๋ก ํ์ฌ ๋ด์์ ์ฌ์ฉํ๋๋ก ๋ง์ถคํ๋์์ต๋๋ค. 2013๋ ์๋ ํ์คํ๋ฅผ ์ํด IETF๋ก ์ด๊ด๋์์ผ๋ฉฐ(์์ง ์งํ ์ค), ์ด์ ๋ ๋๊ตฌ๋ ๋ถ์กฑํ ๋ถ๋ถ์ ์ ์ํ์ฌ ํ๋กํ ์ฝ ๊ฐ๋ฐ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค. IETF ์์ ๊ทธ๋ฃน์ ์๋ก์ด ํ์ค์ด ์น์ธ๋๊ณ ํ์ ์ด ๋ ผ์๋๋ ์ฐ๋ก ํ์๋ฅผ ์กฐ์งํฉ๋๋ค. ์ด QUIC ๊ตฌํ์ ์ฃผ์ ๊ตฌํ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTTP/3 ํ์ค์ด ์ธ์ฆ๋ฉ๋๋ค.
์ง๊ธ๊น์ง HTTP/3์ ๊ธฐ๋ณธ ํ๋กํ ์ฝ๋ก ํฌํจ์ํค๋ ๊ฒ์ ๋ํ ๋ ผ์๋ ์์ต๋๋ค. ์์ง ์์ฑ๋์ง ์์๊ณ ๊ฑฐ์ ์ง์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ QUIC๋ Uber์์ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์๋ฒ ๊ฐ์ ์ ์ก์ผ๋ก ๊ตฌํ๋ ์ ์์ต๋๋ค.
QUIC ๋์ ์ ๋ํ Uber์ ์๊ฒฌ
QUIC๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ด์ฅํ๊ณ ์ด์ ํ ์ฐ๊ฒฐ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ด์ ์คํ(TLS/TCP๋ฅผ ํตํ HTTP/2)์ QUIC ํ๋กํ ์ฝ๋ก ๊ต์ฒดํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค
ํฌ๋ก๋ท ์ผ๋กํฌ๋กฌ ํ๋ก์ ํธ , ์ฌ๊ธฐ์๋ ์๋ Google ๋ฒ์ ์ ํ๋กํ ์ฝ์ธ gQUIC๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ๊ตฌํ์ ์ต์ IETF ์ฌ์์ ๋ฐ๋ฅด๋๋ก ์ง์์ ์ผ๋ก ๊ฐ์ ๋๊ณ ์์ต๋๋ค.์ฐ๋ฆฌ๋ ๋จผ์ Cronet์ Android ์ฑ์ ํตํฉํ์ฌ QUIC์ ๋ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ์ ์ต๋ํ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ํตํฉ์ด ์ํ๋์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด ๋คํธ์ํน ์คํ์ ์์ ํ ๊ต์ฒดํ๋ ๋์
์์์ดHttp , ์ฐ๋ฆฌ๋ OkHttp API ํ๋ ์์ํฌ ์๋์ Cronet์ ํตํฉํ์ต๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํตํฉ์ ์ํํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ํธ์ถ(์์ ์ฌ์ฉ๋๋)์ ๋ํ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ์ต๋๋ค.๊ฐ์กฐ ) API ์์ค์์.Android ๊ธฐ๊ธฐ์ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ iOS์ Uber ์ฑ์ Cronet์ ๊ตฌํํ์ฌ ๋คํธ์ํฌ์์ HTTP ํธ๋ํฝ์ ๊ฐ๋ก์ฑ์์ต๋๋ค.
API ์ฌ์ฉNSURLํ๋กํ ์ฝ . iOS Foundation์์ ์ ๊ณตํ๋ ์ด ์ถ์ํ๋ ํ๋กํ ์ฝ๋ณ URL ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋นํ ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ ์์ด Cronet์ iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ ๊ฐ์ ธ์จ
๋ฐฑ์๋์์๋ Google Cloud lb๋ฅผ ํตํด QUIC ์ฐ๊ฒฐ์ ํฌ์ฐฉํ์ต๋๋ค.
Google Cloud๊ฐ Google์์ ๊ฐ๋ฐํ ํ๋กํ ์ฝ๊ณผ ์ ์๋ํ๋ค๋ ๊ฒ์ ๋๋ผ์ด ์ผ์ด ์๋์ง๋ง ๋์์ ๋ฌด์์ ๋๊น?
Nginx์
์ผ๋ง ์ CloudFlare
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
ํ์ํ ๊ฒฝ์ฐ ์ฌ๊ธฐ์์ ๋ชจ๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
์ด์ ๋จ์ ๊ฒ์ HTTP/3 ์ง์์ ํ์ฑํํ๋ ๊ฒ์ ๋๋ค.
events {
worker_connections 1024;
}
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Request buffering in not currently supported for HTTP/3.
proxy_request_buffering off;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
}
์ผ๋ฐ ๋ธ๋ผ์ฐ์ ์์๋ ์์ง HTTP/3์ ํตํด ์ฐ๊ฒฐํ ์ ์์ง๋ง ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. --enable-quic
, ์๋ฒ๋ quic.rocks ์ฌ์ดํธ ๋ฑ์ผ๋ก ์ด๋ํ์ฌ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ฐ๊ฒฐ ์ ํ์ ํ์ธํ์ธ์.
HTTP/3 ๋์ ์ ์์ฑ๋์์ต๋๋ค. http2+quic/99
, ํ์ง๋ง ๋ณธ์ง์ ์ผ๋ก ๊ฐ์ ๊ฒ์
๋๋ค.
๊ธฐํ ๊ธฐ์
- QUIC๋ ์ง์
LiteSpeed (ํ๋ฅญํ ํกํ๋ฅด์ ํจ๊ป HTTP/3์ ํตํด Facebook์ ์ฐ๊ฒฐ๋จ) ๋ฐ ํ๋ก๊ทธ๋ ์๋ธ์บ๋ . Apache๋ ์์ง ํ ์ ์์ง๋ง ์์ ์ด ์งํ ์ค์ ๋๋ค.๋ณธ๊ฒฉ์ ์ผ๋ก . - 21์ XNUMX์ผ ์
๋ฐ์ดํธ๋จ
WebRTC ํ์ค ์ด์ - ๋ฐ๋ก ์ผ๋ง ์ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ๋ฌธ์ ์ด์์ต๋๋ค.
msquic ๊ตฌํ ์ฝ๋ , ์์ง IETF ํ์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์๋ ์์ง๋ง ์ด๋ ์ด๋ฏธ ํฐ ํ์ ์ ๋๋ค.
๊ฒฐ๋ก
QUIC์ ๋ํ ๊ด์ฌ์ ๋ถ์์ ํ์ง๋ง ์ฆ๊ฐํ๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ํ์คํํ๊ธฐ ์ํ ์์
์ด ์งํ ์ค์
๋๋ค. ํ๋กํ ์ฝ์ ์๋ก์ด ๊ตฌํ์ ๊ฑฐ์ ๋งค๋ฌ ๋ํ๋๋ฉฐ, ๋งค๋
์ ์ ๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ QUIC๊ฐ ๋ฏธ๋๋ผ๊ณ ํ์ ํ๊ณ ์์ต๋๋ค. TCP ์คํ์ ํฅํ ๋ฒ์ ์ ์ด ํ๋กํ ์ฝ์ ํฌํจ์ํค๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ์กฐ๋ง๊ฐ ์ ์ฒด ์ธํฐ๋ท์ด ๋์ฑ ์์ ์ ์ด๊ณ ๋น ๋ฅธ ์ฐ๊ฒฐ๋ก ์ ํ๋ ๊ฒ์์ ์๋ฏธํฉ๋๋ค.
์ด์ ์ด๋ฏธ ์ธํ๋ผ์ ๋ํ QUIC ์ํธ ์์ฉ์ ๊ตฌ์ฑํ๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ์ ์ ๊ณตํ ์๋ ์์ต๋๋ค. ๋ชจ๋ ํ๋กํ ์ฝ์ ๋ํ ์ง์์ ์ถ๊ฐํ ๊ณํ์ด๋ฉฐ caniuse์ ๋ํ ์ฌํ ํต๊ณ๋ ๋์ฑ ๋ฐ์์ง ๊ฒ์ ๋๋ค.
์ถ์ฒ : habr.com