- ๋ชฉ์ฐจ
- HTTP ์งํ๊ณผ์ ์ดํดํ๊ธฐ ๋๋ฒ์งธ - HTTP/2.0
- ์ฌ์ ํ HTTP/1.1์ TCP๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๋ค
- HTTP/2.0์ ํ ๋ ๋นํ์ค ํ๋กํ ์ฝ - SPDY
- HTTP/2.0
- HTTP/2.0๋ ์๋ฒฝํ์ง ์๋ค. HTTP/3.0์ ๋ฑ์ฅ
- ์ฐธ๊ณ
์ด์ ๊ธ - HTTP/0.9 ~ HTTP/1.1์์ HTTP ์ด๊ธฐ๋ถํฐ ํ์ฌ๊น์ง๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค๊ณ ๋ณผ ์ ์๋ HTTP/1.1๊น์ง์ ๋ฐ์ ๊ณผ์ ์ ์ดํด๋ณด์๋ค.
์ด๋ฒ ๊ธ์ HTTP/1.1์์ HTTP/2.0์ผ๋ก ๋ฐ์ ํ๊ฒ๋๋ ๊ณผ์ ์ ํตํด HTTP/2.0๋ฅผ ์ ๋ฆฌํด๋ณด๊ณ ์ํ๋ค.
์กฐ๊ธ ์๊ทน์ ์ผ ์๋ ์๋ ๊ธ๊ท์ด๊ธดํ์ง๋ง, HTTP/1.1์์ HTTP/2.0์ผ๋ก ๋ฐ์ ํ๊ฒ๋ ๊ณ๊ธฐ๋ ๋ฐ๋ก HTTP/1.1์ด TCP Connection์ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๊ธฐ๋๋ฌธ์ด๋ค.
๊ทธ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
๐โโ๏ธ ์์ฒด์ ์ธ ๋ณ๋ ฌ์ฒ๋ฆฌ ๋ถ๊ฐ
์ด์ ๊ธ์์๋ ์ดํด๋ณด์๋ฏ์ด, HTTP/1.1์์์ ์๋ฒ๋ ์์ฒญ์ด ๋ค์ด์จ ์์๋๋ก (FIFO) ์ฒ๋ฆฌํ ์๋ต์ ๋ฐํํด์ผํ๋ค.
์ด๋ก์ธํด TCP Connection์ด ์ฆ์ idle ์ํ๊ฐ๋จ์ผ๋ก์จ Connection์ ์ ๋๋ก ํ์ฉํ์ง๋ชปํ๋ค.
์์ ๊ฐ์ด Pipielining์ด๋ผ๋ ์ฑ๋ฅ ํฅ์ ์คํ์ด ์กด์ฌํ์์๋, HTTP/1.1์ FIFO ํ์์ ์ฒ๋ฆฌํ๊ณ๋ก์ธํด HOLB (Head Of Line Blocking)์ด ๋ฐ์ํ๋๋ฑ ๊ฒฐ๊ตญ Pipelining์ ๋น์ ๋ณด์ง๋ชปํ๊ณ ์ฌ์ฉ๋์ง์๊ฒ๋์๋ค.
์กฐ๊ธ ์์ธํ ๋งํ์๋ฉด.. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ ์ ๊ฐ๊ฐ ์ด๊ธฐ ๋๋ฌธ์, ์ฒซ๋ฒ์งธ๋ก ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์ฉ๋์ด ํฐ ๋ฐ์ดํฐ๋ผ๋ฉด, ๋๋ฒ์งธ, ์ธ๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๋ฆฌ ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋์ด๋ HTTP/1.1์ ์ฐ์ ์์ ์์น์ ๋ฐ๋ผ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ์ ์๋ต ์๋๊ฐ ๋ฆ์ด์ง๋ฉด ํ ์์์ ์๋ ๋ฐ์ดํฐ ์๋ต์๋๋ ๋ฉ๋ฌ์ ๋ฆ์ด์ง๋ ๊ฒ์ด๋ค.
๋ฌผ๋ก ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฌํ HTTP/1.1์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ๋ฌผ๋ฆฌ์ ์ธ TCP ์ฐ๊ฒฐ์ ์ฌ๋ฌ ๊ฐ ๋๋ ๋ฐฉ์์ผ๋ก ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒํ๋ค. ํ์ง๋ง ์ด๋ ์์๋ฐฉํธ์ ๋ถ๊ฐํ๋ค. ๊ทธ ์ด์ ๋ ์๋ TCP ๋ด์ฉ์ ๋ณด๋ฉด ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค.
๐โโ๏ธ TCP ๋นํจ์จ์ ์ฌ์ฉ
TCP๋ ๋ณด์์ ์ธ ํ๊ฒฝ์ ๊ฐ์ ํ๊ณ ๋คํธ์ํฌ์์ ๋ค์ํ ํธ๋ํฝ ์ฉ๋๋ก ๊ณตํํ๊ฒ ๋์ํ๋๋ก ์ค๊ณ๋์๋ค.
์ด๊ฒ์ด TCP๊ฐ ์ฑ๊ณตํ ์ ์๋ ์ด์ ์์ผ๋ฉฐ, TCP๊ฐ ์๋๋ ์กฐ๊ธ ๋๋ ธ์ด๋ ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒํ๋๋ฐ์์ด์ ํฐ ์ํฅ์ ๋ผ์น ์์์ด๊ธฐ๋ํ๋ค.
์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ํต์ ์ ์์ด์ ๊ฐ์ฅ ํต์ฌ์ TCP์ ํผ์ก ์ ์ด (Congestion Control)๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ์์ ํ ์๋ํฌ์ธํธ์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆด ๊ฒฝ์ฐ, ์์ ์๊ฒ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๊ฒ๋๋๋ฐ, ์ด๋ ๋ค๋ฅธ ์๋ํฌ์ธํธ๊ฐ ๋ ๋ค์ ์ฌ์ ์กํ๊ฒ๋์ด ๊ฒฐ๊ตญ ํผ์ก๋ง ๊ฐ์ค์์ผ ์ค๋ฒํ๋ก์ฐ๋ ๋ฐ์ดํฐ ์์ค์ ๋ฐ์์ํค๊ฒ๋๋ค.
ํผ์ก ์ ์ด๋ ์ด๋ฌํ ์ ๋ณด ์ํต๋์ด ๊ณผ๋คํ ๊ฒ์ ๊ฐ์งํ์ฌ ํจํท์ ์ ๊ฒ ๋ณด๋ด๋ฉด์ ์ ์ ํ ์ ์ก ํจํท ์ฌ์ด์ฆ๋ฅผ ์ฐพ์ ํผ์ก ๋ถ๊ดด ํ์์ ๋ฐฉ์งํ๋ ๊ฒ ๋งํ๋ค.
์ด๋ ํต์ฌ์ ํผ์ก ์๋์ฐ (Congestion Window)๋ผ๋ ๊ฐ๋ ์ด๋ฉฐ, ์ด๋ ์์ ์๊ฐ ํ์ธ(ACK)ํ๊ธฐ ์ ๊น์ง ์ก์ ์๊ฐ ์ ์กํ ์ ์๋ TCP ํจํท์ ์๋ฅผ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, ํผ์ก ์๋์ฐ๊ฐ 1๋ก ์ค์ ๋์ด์๋ค๋ฉด, ์ก์ ์๋ ๋จ ํ๋์ ํจํท๋ง ์ ์กํ๋ฉฐ, ๊ทธ ํจํท์ ๋ํ ์์ ์์ ํ์ธ์ ๋ฐ์์ผ๋ง ๋ ๋ค๋ฅธ ํจํท์ ์ ์กํ ๊ฒ์ด๋ค.
๋ฌธ์ ๋ TCP๊ฐ ํ์ฌ Connection์ ์๋ง๋ ํผ์ก ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋๋ฆฐ ์์ (Slow Start)๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์๋์ ๊ฐ์ด TCP์ ํผ์ก์ ์ ์ดํ๊ณ ๊ณตํํ๊ฒ ํต์ ํ๊ธฐ์ํด ์๋์ฐ ํฌ๊ธฐ๋ฅผ ๋์๋ค ์ค์๋คํ๋ค.

์ถ์ฒ: http://www.sfu.ca/~ljilja/cnl/presentations/wan/wireless_TCP/sld005.htm
์ฆ, ์ต์ ์ ํผ์ก ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์ป๋ ๋ฐ TCP Connection์ ๋ช ๋ฒ์ ์๋ณต์ด ํ์ํ๋ฉฐ, ์ด๋ ๊ฒฐ๊ตญ ์ฑ๋ฅ์ ์ธ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ํผ์ก ์ ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํผ์ก์ด ๋ฐ์ํ๋ฉด ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฑฐ๋, ํน์ ์ฆ๊ฐ์ํค์ง ์์ผ๋ฉฐ ํผ์ก์ ํํผํ๋ค๋ผ๋ ๊ธฐ์กฐ๋ก ๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์กฐ๊ธ์ด๋ผ๋ ํผ์ก์ด ๋ฐ์ํ๋ค๋ฉด ์ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด, ํผ์ก ์๋์ฐ๋ฅผ ๋ค์ 1๋ก ๋ด๋ ค ๋ค์ Slow Start๋ฅผ ์ํํ๋ค.
๋ฌผ๋ก HTTP/2.0๋ TCP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ์ ์ ๋ฌธ์ ๋ ์ฌ์ ํ ๋ฐ์ํ๋ค.
๋ค๋ง, HTTP/2.0์ HTTP/1.1๊ณผ ๋ค๋ฅด๊ฒ TCP Connection ํ๋๋ง์ ๊ฐ์ง๊ณ ๋ณ๋ ฌ์ฒ๋ฆฌํ๋ค.
์ฆ, ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ํผ์ก ์ ์ด์ ์ํฅ์ ํจ์ฌ ๋ ์ ๊ฒ ๋ฐ์์ผ๋ก์จ ํต์ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค.
์ด์ธ์๋ TCP ํ๊ฒฝ์์ ๋์ํ๋ HTTP์ ํน์ฑ์ Handshake๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํจ์ผ๋ก์จ ๋ถํ์ํ RTT (Round Trip Time) ์ฆ๊ฐ๋ก ์ธํด ๋คํธ์ํฌ ์ง์ฐ์ ์ด๋ํ์ฌ ์ฑ๋ฅ์ ์ ํํ๊ฒํ๋ค.
๐โโ๏ธ ๋น๋ํ ๋ฉ์์ง ํค๋
HTTP/1.1์ ์๋ต์ ๋ฐ๋ ํฌ๊ธฐ๋๋น ํค๋ ํฌ๊ธฐ ๋น์จ์ ๋งค์ฐ ๋ฎ์ง๋ง, ์์ฒญ์ ๊ฒฝ์ฐ ๋ฐ๋๋ก ํค๋๊ฐ ๋๋ถ๋ถ์ ์ฉ๋์ ์ฐจ์งํ ์ ์๋ค.
๊ฒ๋ค๊ฐ ๋ฐ๋๋ฅผ ์์ถํ๋ ๋ฉ์ปค๋์ฆ์ ์กด์ฌํ์ง๋ง, ์ฌ์ค์ ํค๋๋ฅผ ์์ถํ๋ ๋ฐฉ๋ฒ์ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
HTTP ์์นด์ด๋ธ์ ๋ฐ๋ฅด๋ฉด, 2016๋ ๋ง, ์์ฒญ ํค๋์ ํ๊ท ํฌ๊ธฐ๋ ์ฝ 460bytes์ด๋ฉฐ, 140๊ฐ์ ๊ฐ์ฒด๊ฐ์๋ ์ผ๋ฐ์ ์ธ ์น ํ์ด์ง์ ๊ฒฝ์ฐ, ์์ฒญ ํค๋์ ์ ์ฒด ํฌ๊ธฐ๊ฐ ์ฝ 63kb๊ฐ ๋๋ค๊ณ ํ๋ค.
ํฐ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด์ง๋ง TCP ํผ์ก ์๋์ฐ ์ ์ด ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ฉด, TCP๊ฐ ํด๋น ์์ฒญ์ ๋ณด๋ด๋๋ฐ๋ง ํผ์ก ์๋์ฐ์ ํฌ๊ธฐ๊ฐ ์ฒ์๋ถํฐ ํฌ์ง ์๊ธฐ์ ์์นซ 3~4๋ฒ ํน์ ๊ทธ ์ด์์ ์๋ณต์ด ํ์ํ ์ ์๋ค.
๊ฒฐ๊ตญ ์ด๊ฒ ๋ํ ์ ์กํด์ผํ๋ ๋ฐ์ดํฐ์ ์ฆ๊ฐ๋ก์ธํด ์ฑ๋ฅ์ ์ ์ํฅ์ ๋ผ์น๋ค.
๐โโ๏ธ ์ฐ์ ์์ ์ค์ ๋ถ๊ฐ
์นํ์ด์ง์์ ์ด๋ค ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ณด๋ค ํจ์ฌ ์ค์ํ ์ ์๋ค.
๋ฌผ๋ก ๋์ ์ฐ์ ์์์ ๊ฐ์ฒด๋ฅผ ๋จผ์ ๊ฐ์ ธ์ค๋๊ฒ ์ข์ง๋ง, HTTP/1.1์์ ๊ฐ์ฒด์ ๋ํ ์์ฒญ/์๋ต๋ณ๋ก ์ฐ์ ์์ ์ค์ ์ด ๋ถ๊ฐํ๋ค.
์ฆ, ์์ฒญํ ์์๋๋ก ์ฐ์ ์์๊ฐ ์ ํด์ง๊ธฐ๋๋ฌธ์ ์์นซ ๋ฎ์ ์ฐ์ ์์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋๋ผ ๋์ ์ฐ์ ์์์ ๊ฐ์ฒด๋ฅผ ๋ฆ๊ฒ ๊ฐ์ ธ์ ํ์ด์ง์ ๋ก๋ฉ์ ์ง์ฐ์ํค๋ ํ์์ด ๋ฐ์ํ ์ ์๋ ๊ฒ์ด๋ค.
๐โโ๏ธ ์์์ ์ดํด๋ณด์๋ฏ์ด HTTP/1.1์ ํ๊ณ๊ฐ ๋ถ๋ช ํ๋ค.
1999๋ , HTTP/1.1์ ๊ธฐ์ ํ RFC 2616์์ ํ๋์ ์น ํ ๋๊ฐ ๋ HTTP/1.1 ํ์ค์ด ์ ์๋์๋ค.
๊ทธ์ดํ ์ง๊ธ๊น์ง๋ ์ฌ์ค์ HTTP/1.1์ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ง๋ง, ๊ตฌํ์ ๋จ์์ฑ๊ณผ ์ ๊ทผ์ฑ์ ์ฃผ์์ ์ ๋๊ณ ์ต์ ํํ ํ๋กํ ์ฝ์ด๋ค๋ณด๋ ์ฑ๋ฅ์ธก๋ฉด์์ ์์ ์ธ๊ธํ๋ฏ์ด ์ทจ์ฝ์ ์ด ๋ง๋ค.
์ฌ์ ํ HTTP/1.1์ TCP๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๋ค
์ดํ ๊ณ์๋ ์น์ ํญ๋ฐ์ ์ธ ์์ ์ฆ๊ฐ์ ๋ฐ์ ์ผ๋ก ์ธํด ๋ ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ HTTP๊ฐ ํ์ํ๊ฒ๋์๊ณ , 2009๋ ๊ตฌ๊ธ์ ๋ง์ดํฌ ๋ฒจ์์ ๋ก๋ฒ ๋ฅดํ ํ์จ์ด ์ ์ํ SPDY๋ฅผ ์์์ผ๋ก HTTP๋ฅผ ๊ฐ์ ํ๊ณ ์ํ๋ ์์ง์์ด ์์๋์๋ค.
SPDY ํ๋ก์ ํธ์ ๋ชฉํ๋ ์๋์ ๊ฐ๋ค.
- Target a 50% reduction in page load time (PLT).
- Avoid the need for any changes to content by website authors.
- Minimize deployment complexity, and avoid changes in network infrastructure.
- Develop this new protocol in partnership with the open-source community.
- Gather real performance data to (in)validate the experimental protocol.
์ด์ค์์ ๊ฐ์ฅ ์ค์ ์ ์ผ๋ก ๊ฐ์ ํ๊ณ ์ํ๋ ๋ถ๋ถ์ page load time์ ํฅ์์ด์์ผ๋ฉฐ, SPDY๋ ์๋ก์ด binary framing layer์ ๋์ ํ์ฌ ๊ธฐ๋ณธ TCP ์ฐ๊ฒฐ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋๋กํจ์ผ๋ก์จ ์ฑ๋ฅ ๊ฐ์ ์ ์งํํ๋ค.

์ถ์ฒ: https://d2.naver.com/helloworld/140351
์ ๊ทธ๋ฆผ์์ SPDY๊ฐ binary framing layer๋ผ๊ณ ๋ณผ ์ ์์ผ๋ฉฐ, ํด๋น ๊ณ์ธต์ multiplexing, prioritization, head compression์ ์ ์ฉํจ์ผ๋ก์จ ์ฑ๋ฅ ํฅ์์ ์ด๋ฃจ์๋ค.
์ด ์๋ก์ด 3๊ฐ์ง ๊ฐ๋ ์ด HTTP/2.0์๋ ๊ทธ๋๋ก ์ด์ด์ง๋ฉฐ, ์ฌ์ค์ ์ฑ๋ฅ ๊ฐ์ ์ ํต์ฌ ๊ฐ๋ ์ด๋๋ค.
์ด ์ธ๊ฐ์ง ๊ฐ๋ ์ ๋ํด์ ์๋ HTTP/2.0์์ ๋ ์์ธํ ๋ค๋ฃฌ๋ค.
๐โโ๏ธ Hello HTTP/2, Good Bye SPDY
SPDY๋ฅผ ๋ฐํํ์ง ์ผ๋ง์๋์ด ๊ตฌ๊ธ์ ๋ง์ดํฌ ๋ฒจ์์ ๋ก๋ฒ ๋ฅดํ ํ์จ์ ์ฌ๋ฌ ์ฌ์ดํธ๋ฅผ ๋์์ผ๋กํ SPDY์ ๊ฒฐ๊ณผ์ ์์ค์ฝ๋๋ฅผ ๊ณต๊ฐํ๋ค.
์ด๋ ํ 25 ์น์ฌ์ดํธ๋ฅผ ๋์์ผ๋ก ํ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ธฐ์ค 55%์ด์์ ๋น ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค๊ณ ํ๋ค. - ์ถ์ฒ -
๋ง์ง๋ง์ผ๋ก 2012๋ ์ Chrome, Firefox, Opera๋ฑ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ๋ํ ์น์ฌ์ดํธ๋ค์ด SPDY๋ฅผ ์ ์ฉํ์์ผ๋ฉฐ, ์ ์ฐจ ๋ง์ ๊ธฐ์ ๋ค์ด ์ฑํํจ์๋ฐ๋ผ ์ฌ์ค์ ํ์ค์ด ๋๋ ๊ถค๋์ ์ฌ๋๋ค.
์ดํ HTTP Working Group (HTTP-WG)๊ฐ SPDY์์ ๋ฐฐ์ด ๊ตํ์ ๋ฐํ์ผ๋ก SPDY๋ฅผ ์ฑํ ๋ฐ ์กฐ๊ธ ๊ฐ์ ํ์ฌ ๊ณต์์ ์ผ๋ก HTTP/2.0 ํ์ค์ ๊ณต๊ฐํ๊ฒ๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ Hello HTTP/2, Good Bye SPDY์ ์์ธํ ๋์์๋ค.
๐โโ๏ธ SPDY๋ ๊ธฐ์กด HTTP ํ์ค์ ๋์ฒดํ๋ ค๋ ๋ชฉ์ ์ด ์๋ HTTP๋ฅผ ํตํ ์ ์ก์ ๋ ํจ์จ์ ์ผ๋ก ํ์ฅํ๋ ํํ๋ก ๊ตฌํ๋์๋ค.
SPDY๋ผ๊ณ ๊ธฐ์กด HTTP์ ์คํ์ ๋์ฒดํ ๊ฒ์ด ์๋๋ค.
๊ธฐ์กด HTTP์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์์ ๋์์ ๋์ผํ๋ฉฐ, ๊ธฐ์กด์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด๋ HTTP ๋ฉ์๋, ์ํ ์ฝ๋, URI ๋ฐ ํค๋ ํ๋์ ๊ฐ์ ํต์ฌ ๊ฐ๋ ์ ๋ณ๊ฒฝ๋์ง ์์๋ค.
์ฆ, ๊ธฐ์กด์ HTTP์ ์คํ์ HTTP ๊ณ์ธต์์ ๋์ผํ๊ฒ ์ ์ง๋๋ฉฐ, ์๋ก ์๊ธฐ๋ SPDY ๊ณ์ธต์์ HTTP/1.1์ ์ฑ๋ฅ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ณ ์ํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก ์๊ธด ๊ณ์ธต์ด ๋ฐ๋ก SPDY์์ SPDY ๊ณ์ธต์ด๋ผํ๋ฉฐ, HTTP/2.0์์ binary framing layer๋ผ๊ณ ํ๋ค.
๐โโ๏ธ HTTP/2.0์ low-latency์ ๋ฐ์ดํฐ ์ ์ก์ ์ํด ์ค๊ณ๋์๋ค.
์์ ๋งํ๋ฏ์ด, HTTP/1.1๊น์ง ๋คํธ์ํฌ ์์ (TCP Connection)์ ์ญ๋ถ ํ์ฉํ์ง ๋ชปํ๋ค.
๊ทธ๋ฆฌํ์ฌ HTTP/2.0์ ํ๋์ TCP Connection์ ์ฌ๋ฌ ์์ฒญ/์๋ต์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋กํ์ผ๋ฉฐ, ํค๋ ์์ถ, ์ฐ์ ์์ ์ค์ ๋ฑ์ ํตํด ๋คํธ์ํฌ ์์์ ์ญ๋ถ ํ์ฉํ๊ณ ์ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก HTTP/2.0์ HTTP/1.1์ ๋นํด ๋ ์ ์ ์์ TCP Connection์ ์ฌ์ฉํ์ฌ ๋์ฑ ๋น ๋ฅด๊ฒ ๋คํธ์ํฌ ํต์ ์ ํ ์ ์ค๊ณ๋์๋ค.
์ด๋ TCP ๋คํธ์ํฌ์ Connection์๊ฐ ์ ์ด์ง์ ๋ฐ๋ฅธ ๊ฒฝ์์ด ์ค์ด๋ค๊ณ , Connection์ ์๋ช ์ด ๊ธธ์ด์ ธ ๋คํธ์ํฌ์ ํ์ฉ๋๋ฅผ ๋ ๋์ด๋ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ผ์ผ์ผฐ๋ค.
์ด์ ์ด๋ป๊ฒ ์ด๋ฌํ ์ฑ๋ฅ ํฅ์์ ๋ถ๋ฌ์๋์ง ์ ๋ฆฌํด๋ณธ๋ค.
HTTP/2์ ๋ชจ๋ ์ฑ๋ฅ ํฅ์์ ํต์ฌ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ๋ฉ์์ง๋ฅผ ์บก์ํํ๊ณ ์ ์กํ๋ ๋ฐฉ์์ ์ง์ ํ๋ ์๋ก์ด Binary Framing Layer ๊ณ์ธต์ด๋ค.

์ถ์ฒ: https://web.dev/performance-http2/
HTTP/1.1์ HTTP/2.0์ ์ฃผ์ํ ์ฐจ์ด์ ์ธ ์ด ๊ณ์ธต์ ์์ผ ์ธํฐํ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ (๊ฐ๋ฐ์๊ฐ ๊ตฌํํ๋ ์ ํ๋ฆฌ์ผ์ด์ )์ ๋ ธ์ถ๋๋ HTTP API ์ฌ์ด์ ์ต์ ํ๋ ์๋ก์ด ์ธ์ฝ๋ฉ ๋งค์ปค๋์ฆ์ ์ ์ฉํ๋ค.
๊ทธ๋์ HTTP/2.0์์ 1.1์์์ text๋ก ์ ์ก๋๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ binary frame์ผ๋ก ์ธ์ฝ๋ฉ๋์ด ์ ์ก๋๋ค.
์ด๋ ๊ธฐ์กด์ HTTP ๋ฉ์๋, ํค๋์ ๊ฐ์ ๊ธฐ์กด ์คํ์ ๊ทธ๋๋ก ์ ์ง๋๋ฉฐ ์ํฅ๋ฐ์ง์๋๋ค.
๊ทธ์ ์ ์ก๋๋ ๋ฐฉ์์ด ์ธ์ฝ๋ฉ๋๊ณ ๋ฉ์์ง๊ฐ ๋ถํ ๋์ด ์ ์ก๋๋ ๊ฒ ๋ฟ์ด๋ค.
๋ํ HTTP/1.1์์ \r์ด๋ \n์ ๊ฐ์ ๊ฐํ ๋ฌธ์๋ก ๊ตฌ๋ถ๋๋ ํค๋์ ๋ฐ๋๋ฅผ HTTP/2.0์์ ์ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด ํค๋์ ๋ฐ๋๊ฐ layer๋ก ๊ตฌ๋ถ๋๋ค.
์ด๋ก์ธํด ๋ฐ์ดํฐ ํ์ฑ ๋ฐ ์ ์ก ์๋๊ฐ ์ฆ๊ฐํ์์ผ๋ฉฐ, ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค์๋ค๊ณ ๋ณผ ์ ์๋ค.
ํค๋์ ๋ฐ๋๊ฐ ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์ ์ก๋๋ค.
์ด๋ ๊ฒ ์๋ก์ด ๊ณ์ธต์ด ์๊ฒผ๋ค๋ ๊ฒ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ์ด ๊ณ์ธต์ ๋ํ ๊ตฌํ์ด ๋์ด์์ด์ผํ๋ค๋ ์๋ฏธ์ด๊ธฐ๋ํ๋ค.
๐โโ๏ธ Streams, Messages, Frames
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋, HTTP/2.0์ ์๋ก์ด ์ฉ์ด๋ฅผ ์ดํดํด์ผํ๋ค.

HTTP/2 streams, messages, frames
์ถ์ฒ: High Performance Browser Networking. Ilya Grigorik
- Stream - ์ฐ๊ฒฐ๋ Connection ๋ด์์ ํ๋ ์ด์์ ๋ฉ์์ง๋ฅผ ์๋ฑกํฅ์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ ์๋ฐฉํฅ ๋ฐ์ดํธ ํ๋ฆ. (์์ฒญ๊ณผ ์๋ต์ ์๋ฐฉํฅ์ผ๋ก ์ค๊ฐ๋ ๋ ผ๋ฆฌ์ ์ฐ๊ฒฐ ๋จ์.)
- Message - HTTP/1.1์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ์์ฒญ๊ณผ ์๋ต์ ๊ตฌ์ฑํ๋ ๋จ์. ๋ค์์ Frame์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด ๋ผ์ธ.
- Frame - HTTP/2.0์ ๊ฐ์ฅ ์์ ํต์ ๋จ์๋ก, Header ํน์ Data๊ฐ ํฌํจ๋์ด์๋ค.
- ์ ๊ทธ๋ฆผ์์ DATA์ HEADERS ๊ฐ๊ฐ ๋จ์๊ฐ Frame์ด๋ฉฐ, ๋คํธ์ํฌ์์์ ์ ์ก๋๋ ์ต์ ๋จ์๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
HTTP/2.0์ HTTP ์์ฒญ/์๋ต (๋ฉ์์ง)์ ์ฌ๋ฌ ๊ฐ์ Frame๋ก ๋๋๊ณ ์ธ์ฝ๋ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฒญ/์๋ต ๋ฉ์ธ์ง๋ ํน์ Stream์ ์ํ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ Stream์ ํ๋์ Connection์ ์ํ๋ ๊ตฌ์กฐ์ด๋ค.
๐โโ๏ธ ์ธ ์ฉ์ด์ ๊ด๊ณ๋ฅผ ์กฐ๊ธ ๋ ์์ธํ ์ ๋ฆฌํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.

์ถ์ฒ: https://web.dev/performance-http2/
- ๋ชจ๋ ํต์ ์ ๋จ์ผ TCP Connection์์ ์ํ๋๋ฉฐ, ํ Connection์์์ ์ํ๋ ์๋งํผ์ ์๋ฐฉํฅ Stream์ ์ ๋ฌํ ์ ์๋ค.
- ํ๋์ ์ปค๋ฅ์ ์์ ์ฌ๋ฌ ๊ฐ์ Stream์ด ๋์์ ์ด๋ฆฌ๋ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๋ค. (๋ณ๋ ฌ ์ฒ๋ฆฌ)
- ๊ฐ Stream์ ์๋ฐฉํฅ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ณ ์ ์๋ณ์์ ์ ํ์ ์ฐ์ ์์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
- ๊ฐ Message๋ ํ๋ ์ด์์ Frame์ผ๋ก ๊ตฌ์ฑ๋ ์์ฒญ/์๋ต๊ณผ ๊ฐ์ ๋ ผ๋ฆฌ์ HTTP ๋ฉ์์ง๋ค.
- Frame์ ํน์ ์ ํ์ ๋ฐ์ดํฐ (HTTP ํค๋๋ Payload)๋ฅผ ์ ๋ฌํ๋ ๊ฐ์ฅ ์์ ํต์ ๋จ์๋ค. ๋ฐ์ดํฐ๊ฐ Frame์ผ๋ก ๋ถํ ๋์ด ์ ์ก๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์๋ก ๋ค๋ฅธ Stream์ Frame์ ์๋ก ์ธ์ ํ์ง์์ผ๋ฉฐ, ๊ฐ Frame์ ํค๋์ ํฌํจ๋ Stream ์๋ณ์๋ฅผ ํตํด ์ฌ์กฐ๋ฆฝ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก HTTP/2.0์ ๊ธฐ์กด HTTP ๋ฉ์์ง๋ฅผ Binary๋ก ๊ตฌ์ฑ๋ ์ฌ๋ฌ ๊ฐ์ Frame์ผ๋ก ๋ถํดํ ๋ค์ ํน์ Stream์ ๋งคํ๋์ด ์ ์ก๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ Stream์ ๋จ์ผ TCP Connection ๋ด์์ ๋ค์คํ๋์ด ๋ณ๋ ฌ์ฒ๋ฆฌ๋๋ค. (Multiplexing)
์ด๋ ๊ฒ ํจ์ผ๋ก์จ HTTP/2.0์ multiplexing, prioritization, header compression์ ๋ชจ๋ ๊ตฌํํ ์ ์๊ฒ๋์๋ค.
์ด์ ๋ถํฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ด ์ธ๊ฐ์ง ๊ฐ๋ ์ ๋ํด์ ๋ค๋ค๋ณธ๋ค.
๋ค์คํ
๐โโ๏ธ Multiplexing
์ฌ์ ํ HTTP/1.1์ TCP๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๋ค์์ ์ ๋ฆฌํ๋ฏ์ด HTTP/1.1์ ์์ฒญ/์๋ต์ ์์๋๋ก ์ฒ๋ฆฌํด์ผํ๋ ๋ฌธ์ ๋ก์ธํด ๋ณ๋ ฌ์ ์ธ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ ์์์ ์ธ ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ TCP Connection์ ์ด์ด ๋ณ๋ ฌ์ ์ผ๋ก ๋์ํ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค.
HTTP/2.0์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด ์์์ ์ธ๊ธํ binary framing layer๋ฅผ ์ถ๊ฐํ์ฌ HTTP ๋ฉ์์ง๋ฅผ binary ํํ์ frame์ผ๋ก ๋๋๊ณ ํ๋์ connection์ผ๋ก ๋์์ ์ฌ๋ฌ ๊ฐ์ message stream์ ์๋ต ์์์ ์๊ด์์ด ์ฃผ๊ณ ๋ฐ๋ multiplxing์ ์ ์ฉํ๋ค.

์ถ์ฒ: https://web.dev/performance-http2/
multiplexing์ ๋์ ํจ์ผ๋ก์จ ๋์ผํ Connection์์ ํ ๋ฒ์ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ด๊ณ ์ด๋ค ์์๋ก๋ ์๋ต์ ๋ค์ ๋ฐ์ ์ ์๊ฒ๋์๋ค.
๐โโ๏ธ HTTP/1.1 ํต์ ๊ณผ์ ๊ณผ HTTP/2.0 ํต์ ๊ณผ์
์๋ HTTP/1.1์ HTTP/2.0์ ํต์ ๊ณผ์ ์ ์ดํด๋ณด๋ฉด Multiplexing์ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.

์ถ์ฒ: HTTP/2 in action. https://freecontent.manning.com/mental-model-graphic-how-is-http-1-1-different-from-http-2/
HTTP 1.1์ TCP Connection์ ๋งบ๊ณ ๋์ ์์ฒญ์ ๋ณด๋์ ๋, ํด๋น ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉํ๊ณ ๋์์ผ ํด๋น TCP ์ปค๋ฅ์ ์ ๋ค์ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
๊ทธ๋์ ์์ ๊ฐ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ค์ TCP Connection์ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ ๋ง๋ค์ด ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๋ฐ๋ฉด์ HTTP/2.0์ ํ๋์ TCP Connection์ ์ฌ๋ฌ ๊ฐ์ Stream์ด ๋์์ ์์ฒญ/์๋ต์ ์ํํ๋ค.
HTTP 1.1์ ์์ฒญ๊ณผ ์๋ต์ด ๋ฉ์์ง๋ผ๋ ๋จ์๋ก ๊ตฌ๋ถ๋์ด์์์ง๋ง, HTTP/2.0๋ถํฐ๋ Stream์ ํตํด ์์ฒญ๊ณผ ์๋ต์ด ๋ฌถ์ผ ์ ์์ด ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ๋ ๊ฒ์ด๋ค.
์กฐ๊ธ ํ์ด๋งํ๋ฉด, TCP Connection ํ๋๋ก ์ฌ๋ฌ ์์ฒญ/์๋ต์ด ๋ณ๋ ฌ์ ์ผ๋ก ์ํํ๋๊ฒ์ธ๋ฐ, ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ๊ฐ Stream์ ์์ฒญ/์๋ต์ ๊ณ ์ ์๋ณ์๊ฐ ์กด์ฌํ์ฌ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ Frame์ด ์ ๋ฌ๋์์ ๋ binary framing layer์์ ์ด frame์ด ์ด๋ Stream์ ๊ฒ์ธ์ง ์๋ณ์ด ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์์ฒญ/์๋ต Frame์ด ๊ฐ๊ฐ ์ด๋ค Stream์ ์ํ๋์ง ์ ์ ์๊ธฐ๋๋ฌธ์ ์์์ ์๊ด์์ด ์์ฒญ/์๋ต์ ๋ณด๋์ผ๋ก์จ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
HTTP/1.1์์ ์๋ต์ด ์์ฒญ์ ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ด ์์๋๋ก ์ฒ๋ฆฌํ ์ ๋ฐ์ ์๋ค.
๐โโ๏ธ Multiplexing ๋์ ์ผ๋ก TCP๋ฅผ ๋์ฑ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ๋์๋ค.
์์ ๋งํ๋ฏ์ด, ๊ธฐ์กด์ HTTP/1.1์ ๋ณ๋ ฌ์ ์ธ ์ฒ๋ฆฌ๋ฅผ์ํ ์์๋ฐฉํธ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ TCP Connection์ ์ด์ด ์ฌ์ฉํ๋ค.
์ด๊ฒฝ์ฐ ๊ฐ TCP Connection๋ณ๋ก TCP์ ํน์ฑ์ ํผ์ก์ ์ด๋ก์ธํด ์๋์ฐ ์ฌ์ด์ฆ๋ฅผ ์ค์๋ค ๋๋ ธ๋คํจ์ผ๋ก์จ ์ฑ๋ฅ์ ์ผ๋ก ์ ์ํฅ์ ๋ผ์น๊ฒ๋๋ค.
๋ฐ๋ฉด Multiplexing์ ๋์ ํ HTTP/2.0์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ํผ์ก ์ ์ด์ ์ํฅ์ ํจ์ฌ ๋ ์ ๊ฒ ๋ฐ์์ผ๋ก์จ ํต์ ์๋๊ฐ ํจ์ฌ ๋ ๋น ๋ฅธ ๊ฒ์ด๋ค.
์ฆ, HTTP/2.0์ TCP Connection์ ์ญ๋ถ ์ ํ์ฉํ๊ฒ๋์๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ํ, HTTP/1.1์์ Pipelining์ HOLB๋ก์ธํด ์ฌ์ฉ๋์ง์๊ฒ๋์๋๋ฐ, HTTP/2.0์ ์์๋๋ก ์๋ต์ ๋ฐ์ ํ์๊ฐ์๊ธฐ์ ์๋์ ๊ฐ์ด Pipelining๊ณผ ๋ค๋ฅด๊ฒ ์์ฒญ์ ๋์์ํ์ง๋ง ์์๋๋ก ์๋ต์ ๋ฐ์ง์์๋๋๊ฒ๋์๋ค.
HTTP/2.0์์ Multiplexing์ธ์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ๋ฏธ๋์ ํ์ํ ๊ฒ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ํด๋ผ์ด์ธํธ์ ๋ณด๋ผ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๊ฐ HTML์ ์์ฒญํ์ ๋, ์๋ฒ๋ ํด๋น HTML ๋ฌธ์๊ฐ ๋งํฌํ๊ณ ์๋ ์ด๋ฏธ์ง, CSSํ์ผ, JS ํ์ผ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ์ค์ค๋ก ํ์ ํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ฏธ๋ฆฌ pushํด์ ๋ธ๋ผ์ฐ์ ์บ์์ ๊ฐ์ ธ๋ค๋๋ ๊ฒ์ด๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ ์ผ๋ก ์์ฒญํ์ง์์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๊บผ๋ด์ ๊ฐ๊น์ด ๋ฏธ๋์ ํน์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ๋ฐ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ์ฑ๋ฅ ํฅ์์ ์ด๋์ด๋ด๋ ๊ฒ์ด๋ค.
push ๊ด๋ จ๋ ์์ธํ ๋์ ๊ณผ์ ์ HTTP/2 in action์ ์์ธํ ๋์์๋ค.
์คํธ๋ฆผ ์ฐ์ ์์
๐โโ๏ธ ์คํธ๋ฆผ ์ฐ์ ์์
HTTP/2.0์์ HTTP ๋ฉ์ธ์ง๋ฅผ ์ฌ๋ฌ Binary Frame์ผ๋ก ๋ถํ ํ๊ณ , ์ฌ๋ฌ Frame์ ๋ฉํฐํ๋ ์ฑ ํ ์ ์๊ฒ๋๋ฉด์ ์์ฒญ๊ณผ ์๋ต์ด ๋์์ ๋ณ๋ ฌ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ๋น์ฝ์ ์ธ ์๋ ํฅ์์ด ๋์๋ค.
ํ์ง๋ง ํ๋์ TCP Connection์ ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ด ๋ค์์ด๋ฉด์ Stream์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ํ์๊ฐ ์๊ธฐ๊ฒ๋์๋ค.
์ด๋ก์ธํด HTTP/2.0 ํ์ค์ ๊ฐ Stream์ ์ฐ์ ์์ ๊ด๋ จ๋ ๊ฐ์ค์น์ ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
- ๊ฐ Stream์๋ 1๋ถํฐ 256์ฌ์ด์ ๊ฐ์ค์น๊ฐ ํ ๋น๋ ์ ์๋ค.
- ๊ฐ Stream์๋ ๋ค๋ฅธ Stream์ ๋ํ ๋ช ์์ ์ธ ์์กด์ฑ์ด ๋ถ์ฌ๋ ์ ์๋ค.
๊ฐ ๋ธ๋ผ์ฐ์ ์ ์์ฒญ ์ฐ์ ์์๊ด๋ จ๋ ๋ด์ฉ์ ์ฌ๊ธฐํ์ธํ ์ ์๋ค.
ํ๋ฆ ์ ์ด
HTTP/2.0์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ํ๋ฆ ์ ์ด๋ฅผ ์ง์ํ๋ค.
๊ด๋ จํ์ฌ ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ .
HTTP/1.1์์ ํค๋๋ฅผ ์๋ฌด๋ฐ ์์ถ์์ด ๊ทธ๋๋ก ์ ์กํ์๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด HTTP/2.0์์ HTTP ๋ฉ์์ง์ ํค๋๋ฅผ ์์ถํ์ฌ ์ ์กํ๋ค.
๊ฑฐ๊ธฐ์๋ํด HTTP/1.1์์์ ํค๋๊ฐ ์ค๋ณต๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด, HTTP/2.0์์ ์ด์ Message์ ํค๋ ๋ด์ฉ์ค ์ค๋ณต๋๋ ํ๋๋ฅผ ์ฌ์ ์กํ์ง ์๋๋กํ์๋ค.

์ถ์ฒ: https://web.dev/performance-http2
์ค๋ณต ํค๋๋ Static / Dynamic Header Table ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ ์ค๋ณต ํค๋๋ฅผ ๊ฒ์ถํ์ฌ, ์ค๋ณต๋ ํค๋์ index ๊ฐ๋ง ์ ์กํ๊ณ ์ค๋ณต๋์ง ์์ Header ์ ๋ณด์ ๊ฐ์ ํธํ๋ง ์ธ์ฝ๋ฉ (Huffman Encoding) ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ HPACK ์์ถ ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ ์ฒ๋ฆฌํ์ฌ ์ ์กํ๋ค.
์ด๋ฒ ๊ธ์ HTTP/1.1์ ๋ฌธ์ ์ ์ ๋ํด์ ์ดํด๋ณด๊ณ , ๊ทธ ๋ฌธ์ ์ ์ HTTP/2.0์์ ์ฑ๋ฅ ์ธก๋ฉด์์ ์ด๋ป๊ฒ ํด๊ฒฐํ์๋์ง ์์๋ณด์๋ค.
gRPC๋ฑ์ RPC ํต์ ์ด ๋์ด๋จ์๋ฐ๋ผ ์ ์ฐจ HTTP/2.0์ ์ฌ์ฉ๋๋ ๋ง์์ง ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ, HTTP/2.0๋ ์ฌ์ ํ ์ฑ๋ฅ์ ์ธ ํ๊ณ๊ฐ์๋ค.
- TCP๋ก์ธํ ์ฌ์ ํ RTT(Round Trip Time)๊ฐ ๋ฐ์ํ๋ค.
- ์๋ฌด๋ฆฌ ๋ฉํฐํ๋ ์ฑ์ผ๋ก ์ฑ๋ฅ์ ํฅ์ํ๋ค๊ณ ํด๋, HTTP/2.0๋ ์ฌ์ ํ TCP์์์ ๋์ํ๋ค. ๋น์ฐํ Handshake์ ๋ํ RTT๋ก ์ง์ฐ์ด ๋ฐ์ํ๋ค.
- ์ด ๋ฌธ์ ๋ ์ฌ์ค TCP๋ก ํต์ ํ๋ํ ๊ณ์ํด์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค.
- TCP ์์ฒด์ Head Of Line Blocking
- ํจํท์ ์ด์ฉํ๋ TCP์์ ํจํท์ด ์ ์ค๋๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๋ ์ฌ์ ์กํ๊ฒ๋๋๋ฐ, ์ด ์ฌ์ ์ก ๊ณผ์ ์์ ํจํท์ ์ง์ฐ์ด ๋ฐ์ํ๋ฉด TCP ๋ ๋ฒจ์์ HOLB๊ฐ ๋ฐ์ํ๋ค.
- ์ฆ, HTTP/2.0์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ HOLB๋ฅผ ํด๊ฒฐํ์์ง๋ชฐ๋ผ๋, ์ ์ก ๊ณ์ธต์์์ HOLB๋ ์ฌ์ ํ ๋ฐ์ํ๊ฒ๋๋ค.
- TCP์ ํผ์ก ์ ์ด
- TCP๋ ํผ์ก ์ ์ด๋ฅผ ์ํํ๊ธฐ์ ์ ์ก ์๋ ๋ฐ ํผ์ก Window๋ฅผ ๋ฎ์ ์ํ์์ ์ฒ์ฒํ ๋์ด๋ ๋ฐฉ์์ผ๋ก ์๋ ๋ฐ ํผ์ก์ ์ ์ดํ๋ค. (Slow Start)
- ์ด๋ ๋คํธ์ํฌ ์ํฉ์ด ์ข์ ๋ ์ฌ์ค์ ๋ถํ์ํ ์ง์ฐ์ ๋ฐ์์ํจ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก HTTP/2.0๋ TCP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ์ TCP๊ฐ ๊ฐ๋ ๋ฌธ์ ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ง๊ฒ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์์ธ์ง HTTP/3.0์์ TCP๋ฅผ ๋ฒ๋ฆฌ๊ณ UDP๋ฅผ ์ฑํํ์๋ค. ์ ํํ๋ UDP๋ฅผ ๊ฐ์กฐํ QUIC๋ผ๋ ํ๋กํ ์ฝ์ธ๋ฐ ์ด์ ๊ด๋ จํด์ ๋ค์ ๊ธ์์ ๋ค๋ค๋ณด๊ณ ์ํ๋ค.
- https://web.dev/performance-http2
- http://www.sfu.ca/~ljilja/cnl/presentations/wan/wireless_TCP/sld005.htm
- https://d2.naver.com/helloworld/140351
- https://blog.chromium.org/2009/11/2x-faster-web.html
- HTTP/2 in action
- ๋ฌ๋ HTTP/2
- https://stackoverflow.com/questions/36517829/what-does-multiplexing-mean-in-http-2
- https://datatracker.ietf.org/doc/html/rfc2068#section-8.1.2.2

