- Published on
HTTP1 vs HTTP2
- Author
- Name
- yceffort
HTTP/1.1 vs HTTP/2
HTTP(Hypertext Transfer Protocol)๋ 1989๋ ์ ๋ง๋ค์ด์ง ์๋ ์์ด๋ ์น์ ํต์ ํ์ค์ด๋ค. 1997๋ HTTP/1.1์ด ๋ฆด๋ฆฌ์ฆ๋ ์ด๋๋ก ํ๋กํ ์ฝ์ด ๊ฑฐ์ ์์ ๋ ์ ์ด ์์๋ค. ๊ทธ๋ฌ๋ 2015๋ ์๋ HTTP/2 ๋ฒ์ ์ด ๋์ค๋ฉด์ ์ฌ์ฉ๋๊ธฐ ์์ํ๋ค. ์ด ๋ฒ์ ์์๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ, ์๋ฒ ์ง์ฝ์ ์ธ ๊ทธ๋ํฝ๊ณผ ๋น๋์ค๋ฅผ ๋ค๋ฃฐ ๋ ๋ ์ดํด์๋ฅผ ์ค์ผ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ์๋ค. HTTP/2๋ ๊ทธ ์ดํ๋ก ์ ์ ๋ ๋ง์ ์ธ๊ธฐ๋ฅผ ์ป์ด์ ํ์ฌ๋ ๋ชจ๋ ์น์ฌ์ดํธ์ 1/3 ์ ๋๊ฐ HTTP/2๋ฅผ ์ง์ํ๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค.
์ด ๊ธ์์๋, HTTP/1.1๊ณผ HTTP2์ ์ฐจ์ด์ ์ ์์๋ณด๊ณ , HTTP/2๊ฐ ๋ณด๋ค ํจ์จ์ ์ธ ์น ํ๋กํ ์ฝ์ ๋ง๋ค๊ธฐ ์ํด ์ฑํํ ๊ธฐ์ ์ ๋ณํ๋ฅผ ์ดํด๋ณด์.
๋ฐฐ๊ฒฝ
HTTP/2๊ฐ HTTP/1.1์์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์ดํด๋ณด๋ ค๋ฉด, ๊ฐ ๋ฒ์ ๋ณ๋ก ๊ณผ๊ฑฐ ์ด๋ป๊ฒ ๊ฐ๋ฐ๋์๋์ง๋ฅผ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.
HTTP/1.1
1989๋
Timothy Berners-Lee๊ฐ ์๋ ์์ด๋ ์น์ ํต์ ํ์ค์ผ๋ก ๊ฐ๋ฐํ HTTP๋ ํด๋ผ์ด์ธํธ ์ปดํจํฐ์ ๋ก์ปฌ ๋๋ ์๊ฒฉ ์น ์๋ฒ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ์ต์์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋กํ ์ฝ์ด๋ค. ์ด ํ๋ก์ธ์ค์์๋ ํด๋ผ์ด์ธํธ๋ GET
POST
์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ
์คํธ ๊ธฐ๋ฐ ์์ฒญ์ ๋ณด๋ธ๋ค. ์ด์ ๋ํ ์๋ต์ผ๋ก ์๋ฒ๋ HTML ํ์ด์ง๋ ๋ฆฌ์์ค๋ฅผ ํด๋ผ์ด์ธํธ๋ฅผ ๋ณด๋ธ๋ค.
์๋ฅผ ๋ค์ด, www.example.com ๋๋ฉ์ธ ์น์ฌ์ดํธ๋ก ๋ฐฉ๋ฌธํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด URL๋ก ์ด๋ํ๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ํ ์คํธ ๊ธฐ๋ฐ ๋ฉ์์ง ํ์์ผ๋ก HTTP ์์ฒญ์ ๋ ๋ฆฐ๋ค.
GET /index.html HTTP/1.1
Host: www.example.com
์ด ์์ฒญ์ GET
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์์ผ๋ฉฐ, Host:
๋ค์ ๋์ด๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค. ์ด ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก, example.com
์๋ฒ๋ ์ด๋ฏธ์ง, ์คํ์ผ์ํธ, ๊ธฐํ HTML ์ ๋ฆฌ์์ค ๋ฑ๊ณผ ํจ๊ป HTML ํ์ด์ง๋ฅผ ๋ฆฌํดํ๋ค. ํ๊ฐ์ง ์์๋ฌ์ผ ํ ๊ฒ์, ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ ํธ์ถ ์์ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ฐํ๋๋ ๊ฒ์ ์๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ HTML ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๊น์ง ์์ฒญ๊ณผ ์๋ต์ด ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ค๊ฐ๋ค ํ๋ค.
์ด๋ฐ ์์ฒญ๊ณผ ์๋ต์ ๊ตํ์ transfer layer(์ผ๋ฐ์ ์ผ๋ก TCP)์ network layer (IP) ์ ์ต์๋จ์ ์์นํ ์ธํฐ๋ท ํ๋กํ ์ฝ ์คํ์ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ผ๋ก ์๊ฐํ ์ ์๋ค.
HTTP/2
HTTP/2๋ ์์ถ, ๋ฉ๋ฆฌํ๋ ์ฑ, ์ฐ์ ์์ ์ง์ ๋ฑ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ, ์น ํ์ด์ง ๋ก๋ ๋ ์ดํด์๋ฅผ ์ค์ด๋ ค๋ ๋ชฉ์ ์ผ๋ก ๊ตฌ๊ธ์์ ๊ฐ๋ฐํ SPDY ํ๋กํ ์ฝ๋ก ์์๋ ๊ธฐ์ ์ด๋ค. ๊ทธ ์ดํ๋ก 2015๋ 5์ HTTP/2๊ฐ ๋ฐํ๋์๋ค. ์ฒ์ ๋ถํฐ ๋ง์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ค์ด ํ์คํ ์์ ์ ์ง์ํ๋ค. ์ด๋ฌํ ์ง์ ๋๋ถ์, ๋ง์ ์ธํฐ๋ท ์ฌ์ดํธ๋ค์ด 2015๋ ์ดํ๋ก ์ด ํ๋กํ ์ฝ์ ์ฑํํ๊ธฐ ์์ํ๋ค.
๊ธฐ์ ์ ์ธ ๊ด์ ์์, HTTP/2์ HTTP/1.1์ ๊ตฌ๋ณํ๋ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋๋ ์ธํฐ๋ท ํ๋กํ ์ฝ ์คํ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋๋ binary framing layer๋ค. ๋ชจ๋ ์์ฒญ๊ณผ ์๋ต์ ์ผ๋ฐ ํ ์คํธ ํ์์ผ๋ก ๊ด๋ฆฌํ๋ HTTP/1.1๊ณผ๋ ๋ค๋ฅด๊ฒ, HTTP/2๋ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ด์ง ํ์์ผ๋ก ์บก์ํ ํ๋ ๋์์ verb, ๋ฉ์๋, ํค๋ ๋ฑ์ HTTP ๋ฌธ๋ฒ์ ์ ์งํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ layer api๋ ์ฌ์ ํ ์ ํต์ ์ธ HTTP ํ์์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ง๋ค์ง๋ง, ๊ทธ ํ๋จ์ ๋ ์ด์ด๋ ์ด๋ฌํ ๋ฉ์์ง๋ฅผ ์ด์ง์๋ก ๋ณํํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด HTTP/2 ์ด์ ์ ์์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ํ๋กํ ์ฝ๊ณผ ์ํธ์์ฉ ํ ๋ ์ ์์ ์ผ๋ก ์๋ํ ์ ์๋ค.
๋ฉ์์ง๋ฅผ ์ด๋ ๊ฒ 2์ง์๋ก ๋ณํํ๋ฉด, HTTP/2๊ฐ HTTP/1.1์์๋ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์๋ํ ์ ์๋ค.
Delivery Model
์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ HTTP/1.1๊ณผ HTTP/2๋ ๊ฐ์ ๋ฌธ๋ฒ์ ๊ณต์ ํ๋ค. ๋ ํ๋กํ ์ฝ ๋ชจ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ์์ฒญ์ GET
POST
๊ฐ์ ์ต์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ, ์ธ๋์ ๋ณธ๋ฌธ์ด ์๋ ์ ํต์ ์ธ ํ์์ ๋ฉ์์ง๋ก ๋ชฉ์ ์ง์ ๋๋ฌํ๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ HTTP/1.1์ ์ด๊ฒ์ ์ผ๋ฐ ํ
์คํธ๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฉด, HTTP/2๋ ์ด๋ฅผ ์ด์ง์๋ก ์ฝ๋ฉํ๋ค.
HTTP/1.1 - Pipelining and Head-of-Line Blocking
ํด๋ผ์ด์ธํธ๊ฐ HTTP GET ์์ฒญ์์ ๋ฐ๋ ์ต์ด์ ์๋ต์ ๊ฐ๋์ฉ ์์ ํ ๋ ๋๋ง ํ ์ ์๋ ํ์ด์ง ํํ๊ฐ ์๋ ์ ์๋ค. ์ด ํ์ด์ง์ ์ถ๊ฐ๋ก ํ์ํ ๋ฆฌ์์ค์ ๋งํฌ๊ฐ ํฌํจ๋์ด ์๋ค. ํด๋ผ์ด์ธํธ๋ ํ์ด์ง๋ฅผ ๋ค์ด๋ก๋๋ฅผ ํ ์ดํ์์ผ ๋น๋ก์ ํ์ด์ง์ ์ ์ฒด ๋ ๋๋ง์ ์ถ๊ฐ๋ก ๋ฆฌ์์ค๊ฐ ํ์ํ ๊ฒ์ ์๊ฒ ๋๋ค. ์ด๋ก ์ธํด ํด๋ผ์ด์ธํธ๋ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐ๋ก ์์ฒญํด์ผ ํ๋ค. HTTP/1.0์์๋ ํด๋ผ์ด์ธํธ๋ ๋ชจ๋ ์๋ก์ด ์์ฒญ์ ์ํด TCP ์ฐ๊ฒฐ์ ๋๊ณ ์๋ก ์ฐ๊ฒฐ์ ๋ง๋ค์ด์ผ ํด์ ์๊ฐ๊ณผ ๋ฆฌ์์ค ์ธก๋ฉด์์ ๋ง์ ๋น์ฉ์ด ๋ค์๋ค.
HTTP/1.1์ ์๊ตฌ์ ์ฐ๊ฒฐ(persistent connection)๊ณผ ํ์ดํ๋ผ์ธ์ ๋์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์๊ตฌ์ ์ธ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ฉด TCP ์ฐ๊ฒฐ์ ๋ซ์ผ๋ผ๊ณ ์ง์ ์์ฒญํ์ง ์๋ ์ด์ ๊ณ์ํด์ ์ฐ๊ฒฐ์ ์ด์ด๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ๋์ผํ ์ฐ๊ฒฐ์ ํตํด ์ฌ๋ฌ ์์ฒญ์ ๊ฐ๊ฐ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ์กํ ์ ์๋ค.๋ฐ๋ผ์ 1.1์์ ํฌ๊ฒ ์ฑ๋ฅ์ด ํฅ์๋์๋ค.
ํ์ง๋ง ์ํ๊น๊ฒ๋ ์ด ์ต์ ํ ์ ๋ต์๋ ํผํ ์ ์๋ ๋ณ๋ชฉํ์์ด ์กด์ฌํ๋ค. ๋์ผํ ๋์์ผ๋ก ์ด๋ํ ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ํจํท์ด ๋์์ ํต๊ณผํ ์ ์๊ธฐ ๋๋ฌธ์, ๋๊ธฐ์ด ์์ ์๋ ์์ฒญ์ด ์ดํ์ ๋ชจ๋ ์์ฒญ์ด ์ฐจ๋จ๋์ด ๋ฒ๋ฆฐ๋ค. ์ด๋ HOL (Head of line) ๋ธ๋กํน์ผ๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, HTTP/1.1์์ ์ฐ๊ฒฐ ํจ์จ์ฑ์ ์ต์ ํ ํ๋๋ฐ ์์ด ์ค์ํ ๋ฌธ์ฌ๋ค. ๋ณ๋์ ๋ณ๋ ฌ TCP ์ฐ๊ฒฐ์ ์ถ๊ฐํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ํํ ์๋ ์์ง๋ง, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ๋์์ ์ฐ๊ฒฐํ ์ ์๋ TCP์ซ์๋ ์ ํ์ด ์์ผ๋ฉฐ, ์๋ก์ด ์ฐ๊ฒฐ์ ์๋นํ ๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ค.
HTTP/2 - ์ด์ง ํ๋ ์ ๋ ์ด์ด์ ์ฅ์
HTTP/2์ ์ด์ง ํ๋ ์ ๋ ์ด์ด๋ ์์ฒญ๊ณผ ์๋ต์ ์ธ์ฝ๋ฉ ํ๊ณ ์ด๋ฅผ ๋ ์์ ํจํท์ผ๋ก ์๋ผ ๋ฐ์ดํฐ ์ ์ก์ ์ ์ฐ์ฑ์ ํฅ์ ์ํจ๋ค.
HOL ๋ธ๋กํน์ ์ํฅ์ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ TCP ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ HTTP/1.1๊ณผ๋ ๋ค๋ฅด๊ฒ, HTTP/2๋ ๋ ์ปดํจํฐ ์ฌ์ด์ ๋จ์ผ ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ค์ ํ๋ค. ์ด ์ฐ๊ฒฐ์๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์๋ค. ๊ฐ ์คํธ๋ฆผ์ ์์ฒญ/์๋ต ํ์์ ์ฌ๋ฌ๋ฉ์์ง๋ก ๊ตฌ์ฑ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ด๋ฌํ ๊ฐ ๋ฉ์์ง๋ ํ๋ ์์ด๋ผ๋ ์์ ๋จ์๋ก ๋ถํ ๋๋ค.
๊ฐ์ฅ ์ธ๋ถํ๋ ๋ ๋ฒจ์์, ํต์ ์ฑ๋์ ๊ฐ๊ฐ ํน์ ์คํธ๋ฆผ์ ํ๊ทธ๊ฐ ์ง์ ๋ ์ด์ง ์ธ์ฝ๋ฉ ํ๋ ์ ๋ค๋ฐ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ์ก์ ๋ฐ๋์ชฝ ๋์์ ๋ค์ ์ฌ์กฐ๋ฆฝํ ์ ์๋ค. ์ธํฐ๋ฆฌ๋น๋ ์์ฒญ๊ณผ ์๋ต์, ๋ฉํฐํ๋ ์ฑ์ด๋ผ๋ ํ๋ก์ธ์ค ๋ค์์ ๋ฉ์์ง๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ณ๋ ฌ๋ก ์คํ์ด ๊ฐ๋ฅํด์ง๋ค. ๋ฉํฐํ๋ ์ฑ์ ๋ค๋ฅธ ๋ฉ์์ง๊ฐ ์๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋๋ก ํ์ฌ, HTTP์ HOL ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ด๋ ์๋ฒ ์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์์ฒญ๊ณผ ์๋ต์ ๋ณด๋ผ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก, ์ ์ด ๋ฅ๋ ฅ์ ๋์ด๊ณ ์ฐ๊ฒฐ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
ํต์ ์์ ๋ค์คํ(Multiplexing ํน์ MUXing)๋ผ๋ ์ฉ์ด๋ ๋๊ฐ ์ด์์ ์ ์์ค์ ์ฑ๋๋ค์ ํ๋์ ๊ณ ์์ค์ ์ฑ๋๋ก ํตํฉํ๋ ๊ณผ์ ์ ๋งํ๋ฉฐ, ์ญ๋ค์คํ(inverse multipleing, demultiplexing, demuxing) ๊ณผ์ ์ ํตํด ์๋์ ์ฑ๋ ์ ๋ณด๋ค์ ์ถ์ถํ ์ ์๋ค. ๊ฐ๊ฐ์ ์ฑ๋๋ค์ ๋ฏธ๋ฆฌ ์ ์๋ ๋ถํธํ ํ(coding scheme)์ ํตํด ๊ตฌ๋ถํ ์ ์๋ค.
https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%ED%99%94_(%ED%86%B5%EC%8B%A0)
๋ฉํฐํ๋ ์ฑ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฌ ์คํธ๋ฆผ์ ๋ณ๋ ฌ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์ด๋ค ์คํธ๋ฆผ์ ๋จ์ผ TCP ์ฐ๊ฒฐ๋ง ์ฌ์ฉํ๋ฉด ๋๋ค. ์ถ์ฒ๋น ํ๋์ ์๊ตฌ์ ์ธ ์ ์์ ๋คํธ์ํฌ ์ ์ฒด์ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ๊ณต๊ฐ์ ์ค์์ผ๋ก์จ HTTP/1.1์์ ์ฑ๋ฅํฅ์์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค. ๋คํธ์ํฌ ๋ฐ ๋์ญํญ ํ์ฉ๋๊ฐ ํฅ์๋์ด ์ ์ฒด ์ด์ ๋น์ฉ์ด ์ ๊ฐ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ ๋ํด ๋์ผํ ๋ณด์ ์ธ์ ์ ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ๋จ์ผ TCP์ฐ๊ฒฐ์ ๋ฐํ์ผ๋ก HTTPS ํ๋กํ ์ฝ์ ์ฑ๋ฅ๋ ํฅ์๋๋ค. HTTPS์์๋ TLS ๋๋ SSL ํธ๋์ ฐ์ดํฌ ์ค์๋ ์ ์ธก์ด ๋ชจ๋ ์ธ์ ๋ด๋ด ๋จ์ผ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ ํ๋ค. ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์๋ก์ด ์ธ์ ์ด ์์๋๋ฏ๋ก, ์ถ๊ฐ ํต์ ์ ์ํด ์๋ก์ด ํค๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ ๋จ์ผ ์ฐ๊ฒฐ์ ์ ์งํ๋ฉด, HTTPS ๋ฅผ ์ํด ํ์ํ ๋ฆฌ์์ค๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์๋ค. HTTP/2 ๊ท๊ฒฉ์์ TLS ๊ณ์ธต์ ์ฌ์ฉํ๋๋ก ์๋ฌดํ ํ์ง ์์ง๋ง, ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ HTTPS๋ฅผ ์ฌ์ฉํ๋ HTTPS/2 ๋ง ์ง์ํ๋ค.
์ด์ง ํ๋ ์ ๋ ์ด์ด์ ๋ด์ฌ๋ ๋ฉํฐํ๋ ์ฑ์ด HTTP/1.1์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง, ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ค์ค ์คํธ๋ฆผ์ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
HTTP/2 - ์คํธ๋ฆฌ๋ฐ ์ฐ์ ์์
Stream prioritization ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๋๊ณ ๊ฒฝ์์ด ์ผ์ด๋๋ ์์ฒญ ์ฌ์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฟ๋ง ์๋๋ผ, ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ ์ ์ต์ ํ ํ๊ธฐ ์ํด ์์ฒญ์ ์๋์ ๊ฐ์ค์น๋ฅผ ์ ์ํ ์ ์๋๋ก ๋์์ค๋ค.
์์๋ค์ํผ, ์ด์ง ํ๋ ์ ๋ ์ด์ด๋ ๋ฉ์์ง๋ฅผ ๋ณ๋ ฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ผ๋ก ๊ตฌ์ฑํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋์ ์์ฒญ์ ๋ณด๋ผ๋, ๊ฐ ์คํธ๋ฆผ์ 1 ๋ถํฐ 256 ์ฌ์ด์ ๊ฐ์ค์น๋ฅผ ํ ๋นํ์ฌ ์์ถฉ ์ค์ธ ์๋ต์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์๋ค. ์ซ์๊ฐ ํด ์๋ก ์ฐ์ ์์ ์์ชฝ์ ์๋ค. ์ด์ธ์๋ ํด๋ผ์ด์ธํธ๋ ๊ฐ ์คํธ๋ฆผ์ ์ข ์์ฑ์ ID๋ก ์ง์ ํ์ฌ ๋ช ์ํ๋ค. ์์ ID๊ฐ ์๋ค๋ฉด ๋ฃจํธ ์คํธ๋ฆผ์ ์ข ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ค. ์๋ ๊ทธ๋ฆผ์ ์ดํด๋ณด์.
์ ๊ทธ๋ฆผ์์, ์ฑ๋์ ๊ฐ ๊ณ ์ ํ ID์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง 6๊ฐ์ ์คํธ๋ฆผ์ด ํฌํจ๋์ด ์๋ค. ์คํธ๋ฆผ1์๋ ๋ถ๋ชจ ID๊ฐ ์์ผ๋ฏ๋ก, ๋ฃจํธ์ ์ข ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค. ๋ค๋ฅธ ๊ทธ๋ฐ์ ๋ชจ๋ ์คํธ๋ฆผ์ ๋ถ๋ชจ ID๊ฐ ํ์๋์ด ์๋ค. ๊ฐ ์คํธ๋ฆผ์ ๋ํ ๋ฆฌ์์ค ํ ๋น์, ํด๋น ์คํธ๋ฆผ์ ๊ฐ์ค์น์ ํ์ํ ์ข ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์์ ๋์ผํ ๊ฐ์ค์น์ ๋์ผํ ๋ถ๋ชจ ์คํธ๋ฆผ์ ํ ๋น๋ 5, 6์ ๋ฆฌ์์ค ํ ๋น์ ๋์ผํ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
์ด ์ข ์์ฑ ํธ๋ฆฌ์์, ์คํธ๋ฆผ1์ ๊ฒฝ์ฐ ๋ฃจํธ์ ์์กดํ๊ณ , ๋ฃจํธ์์ ํ์๋ ๋๋ค๋ฅธ ์คํธ๋ฆผ์ด ์์ผ๋ฏ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ๋ค๋ฅธ ๋ฆฌ์์ค๋ณด๋ค 1์ ๋จผ์ ํ ๋น๋๋ค. ์คํธ๋ฆผ 2์ ๊ฒฝ์ฐ, ์คํธ๋ฆผ1์ด ์๋ฃ์ ๋ฐ๋ผ ๋ฌ๋ผ ์ง๋ฏ๋ก 1์ด ์๋ฃ๋ ๋๊น์ง 2๊ฐ ๊ฐ์ง ์๋๋ค. 3, 4๋ ์ด๋จ๊น? ์ด๋ ๋ชจ๋ ์คํธ๋ฆผ2์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. 2๋ฒ ์คํธ๋ฆผ์ 3, 4๋ณด๋ค ๋จผ์ ๊ฐ์ฉ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ๋ค. 2์ ์์ ์ด ์๋ฃ๋๋ฉด, 3, 4๋ ๋ฆฌ์์ค๋ฅผ ์ป๋๋ฐ ๊ฐ์ค์น์ ๋ฐ๋ผ์ 2:4๋ก ๋ถํ ๋๋ฏ๋ก, ์คํธ๋ฆผ 4์ ๋ํ ๋ฆฌ์์ค ์ฒญํฌ๊ฐ ๋ ์ปค์ง๋ค. 3์ด ์๋ฃ ๋๋ฉด, 5 ์ 6์ ์ฐจ๋ก์ธ๋ฐ, ์ด ๋๊ฐ๋ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์ป๊ฒ ๋๋ค. ์คํธ๋ฆผ 4๊ฐ ๋ ๋์ ๋ฆฌ์์ค ์ฒญํฌ๋ฅผ ์์ ํ๋๋ผ๋, 4์ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ์ 5, 6์ด ๋ฐ์ํ ์ ์๋ค. ์ฆ, ํ์ ๋ ๋ฒจ ์คํธ๋ฆผ์ ์์ ๋ ๋ฒจ ์คํธ๋ฆผ์ด ๋๋๋ ์๊ฐ์ ์ฆ์ ์์ํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋, ํ์์ ๋ฐ๋ผ์ ์์ฒญ ๊ฐ์ค์น๋ฅผ ์ค์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง๋ฅผ ๋จผ์ ์ ๊ณตํ ๋ค์, ๊ณ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๋๋ฐ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ ์ ์๋ค. HTTP/2๋ ์ด๋ฌํ ๊ฐ์ค์น ํ ๋น ๊ธฐ๋ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ๋ฐ์๊ฐ ์น ํ์ด์ง ๋ ๋๋ง์ ๋ ์ ์ ์ดํ ์ ์๋๋ก ๋์์ค๋ค. ๋ํ ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์ ์ธ๋ฌํ์ ์ ๋ํฅํ์ฌ, ๋ฐํ์ ์์ ์ข ์์ฑ์ ๋ณ๊ฒฝํ๊ณ ๊ฐ์ค์น๋ฅผ ์ฌ ํผ๋น ํ ์ ์๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ ํน์ ์คํธ๋ฆผ์ ํน์ ๋ฆฌ์์ค ์ก์ธ์ค๊ฐ ์ฐจ๋จ๋๋ ๊ฒฝ์ฐ์๋, ์๋ฒ ์์ฒด์์ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ค.
๋ฒํผ ์ค๋ฒํ๋ก์ฐ
๋ ์์คํ ๊ฐ TCP ์ฐ๊ฒฐ์์, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ์์ง ์ฒ๋ฆฌ๋์ง ์์ ์์ ์์ฒญ์ ๋ณด๊ดํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ์ผ์ ํฌ๊ธฐ์ ๋ฒํผ ๊ณต๊ฐ์ด ์๋ค. ์ด๋ฌํ ๋ฒํผ๋ ๋ค์ด/์ ์คํธ๋ฆผ ์ฐ๊ฒฐ์ ๊ณ ๋ฅด์ง ๋ชปํ ์๋๋, ํฐ ์์ฒญ์ ๋ํด์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฒํผ๊ฐ ํฌ์ง ์์ ์ํฉ์ด ์์ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ๊ฐ ์ ํ๋ ๋ฒํผ ํฌ๊ธฐ๋ ๋ฎ์ ๋์ญํญ์ผ๋ก ์ธํด ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ๋ฆฌํ ์ ์๋ ์๋๋ก ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํธ์ฌํ๊ณ ์์ ์๋ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋์ฉ๋ ์ด๋ฏธ์ง๋ ๋น๋์ค๋ฅผ ์ ๋ก๋ ํ ๋ ์๋ฒ ๋ฒํผ๊ฐ ์ค๋ฒ ํ๋ก์ฐ ๋์ด ํจํท ์์ค์ด ์ผ์ด๋ ์๋ ์๋ค.
์ผ์ดํ ๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด, ํ๋ฆ์ ์ด ๋ฉ์ปค๋์ฆ์, ์ก์ ์๊ฐ ์์ ์๋ฅผ ๋ฐ์ดํฐ๋ก ์๋ํ๋ ๊ฒ์ ๋ฐฉ์งํด์ผ ํ๋ค.
HTTP/1.1
HTTP/1.1์์ ํ๋ฆ์ ์ด ๋ฉ์ปค๋์ฆ์, TCP ์ฐ๊ฒฐ์ ์์กดํ๋ค. ์ฐ๊ฒฐ์ด ์์๋๋ฉด, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ์์คํ ๊ธฐ๋ณธ์ค์ ์ ์ฌ์ฉํ์ฌ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ธํ ํด๋๋ค. ์์ ์์ ๋ฒํผํฌ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ก ์ฑ์์ง๋ฉด, ๋ฒํผ์ ๋จ์์๋ ์ฌ์ฉ๊ณต๊ฐ์ ์๋ ค์ค๋ค. ์ด๋ฌํ ์์ ์๋์ฐ๋ ACK ํจํท์ด๋ผ๊ณ ๋ถ๋ฆฌ์ฐ๋ ์๊ทธ๋๋ก ์ ์ก๋๋ค. ์ด ํฌ๊ธฐ๊ฐ 0์ด ๋๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ๋ด๋ถ ๋ฒํผ๋ฅผ ์ง์ด๋ค์ ๋ค์ ๋ฐ์ดํฐ ์ ์ก์ ๋ค์ ์์ํ ์ ์๋๋ก ์์ฒญ ํ ๋๊น์ง ๋ฐ์ ์๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ง ์๋๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผํ ์ ์, TCP ์ฐ๊ฒฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ ์ ์ฌ์ฉํ๋ฉด, ์ฐ๊ฒฐ์ ์ด๋ ํ์ชฝ ๋์๋ง ํ๋ฆ์ ์ด๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
HTTP/1.1์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํผํ๊ธฐ ์ํด transport layer์ ์์กดํ๋ฏ๋ก, ๊ฐ๊ฐ์ ์๋ก์ด TCP ์ฐ๊ฒฐ์ ๋ณ๋์ ํ๋ฆ ์ ์ด ๋ฉ์ปค๋์ฆ์ ํ์๋ก ํ๋ค.
HTTP/2
HTTP/2์์๋, ๋จ์ผ TCP ์ฐ๊ฒฐ ๋ด์์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฉํฐํ๋ ์ฑํ๋ค. ๋ฐ๋ผ์ TCP ์ฐ๊ฒฐ ๋ ๋ฒจ์ ์์ ์ผ๋ก๋ ๊ฐ๋ณ ์คํธ๋ฆผ์ ์ ์ก์ ๊ท์ ํ๋ ๊ฒ์ด ์ด๋ ต๋ค. ๊ทธ๋์ HTTP/2๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ transport layer์ ์์กดํ๋ ๋์ , ์์ฒด์ ์ธ ํ๋ฆ์ ์ด๋ฅผ ๊ตฌํํ๋๋ก ํ์ฉํจ์ผ๋ก์จ ์ด๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. application layer์ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฒํผ ๊ณต๊ฐ์ ํต์ ํ์ฌ, ํด๋ผ์ด์ธํธ์ ์๋ฒ์ฌ์ด์์ ๋ฉํฐํ๋ ์ค ์คํธ๋ฆผ ์์ค์์ ์์ ์ฐฝ์ ์ค์ ํ ์ ์๋๋ก ํด์ค๋ค. WINDOW_UPDATE
ํ๋ ์์ ํตํด์, ์ด๊ธฐ ์ฐ๊ฒฐํ ํ๋ฆ ์ ์ด ์ปจํธ๋กค์ ์ ์ดํ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์, application layer ๋ ๋ฒจ์์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํ๊ธฐ ๋๋ฌธ์, ํ๋ฆ ์ ์ด ๋ฉ์ปค๋์ฆ์ ์์ ์ฐฝ์ ์กฐ์ ํ๊ธฐ ์ ์ ์ ํธ๊ฐ ์ต์ข ๋ชฉ์ ์ง์ ๋๋ฌํ๋ ๊ฒ์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ค. ์ค๊ฐ ๋ ธ๋๋ ํ๋ฆ์ ์ด ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฒด ๋ฆฌ์์ค ํ ๋น์ ๊ฒฐ์ ํ๊ณ , ๊ทธ์ ๋ฐ๋ผ ์์ ์ด ๊ฐ๋ฅํด์ง๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฐ ์ค๊ฐ ์๋ฒ๋ ๊ณ ์ ํ ์ปค์คํ ๋ฆฌ์์ค ์ ๋ต์ ๊ตฌํํ์ฌ ์ฐ๊ฒฐ์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
์ด๋ฌํ ํ๋ฆ ์ ์ด ์ ์ฐ์ฑ์, ์ ์ ํ ๋ฆฌ์์ค ์ ๋ต์ ์์ฑํ ๋ ์ ๋ฆฌํด์ง ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๋ ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋จผ์ ํ์ํ๊ณ , ๋ ์ค์ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๊ทธ ์ด๋ฏธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋๋ก ํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ค์ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฏธ์ง์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ค์ ๊ฐ์ ธ ์จ๋ค. ๋ฐ๋ผ์ ํ๋ฆ ์ ์ด ๊ตฌํ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ก ๋ฏธ๋ฃจ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค.
๋ฆฌ์์ค ์์ฒญ ์์ธก
์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋, ํด๋ผ์ด์ธํธ๋ GET ์์ฒญ์ ๋ณด๋ด์ HTML ํ์ด์ง๋ฅผ ์์ ํ๋ค. (index.html) ์ด index.html์ ๋ด์ฉ์ ๊ฒ์ฌํ๋ ๋์, ํด๋ผ์ด์ธํธ๋ CSS ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ฌ์ข์ผ ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ด๋ฌํ ์ด๊ธฐ GET ์์ฒญ์ผ๋ก ๋ถํฐ ์๋ต์ ๋ฐ์ ํ์๋ง, ์ถ๊ฐ ๋ฆฌ์์ค๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์์ผ๋ฏ๋ก, ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ถ๊ฐ ์์ฒญ์ ํด์ผํ๋ค. ๋ฐ๋ผ์ ์ถ๊ฐ์ ์ธ ์์ฒญ์ ์ด์ฉ ์ ์์ด ์ฐ๊ฒฐ ๋ก๋ ์๊ฐ์ ์ฆ๊ฐ ์ํจ๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ๋ ํด๊ฒฐ์ฑ ์ด ์๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ถ๊ฐ ํ์ผ์ ํ์๋ก ํ๋ค๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ฒ๊ฐ ์ด๋ฌํ ์์ฒญ์ ๋ฐ๊ธฐ์ ์ ๋ฆฌ์์ค๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ์กํ์ฌ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
HTTP/1.1 - ๋ฆฌ์์ค ์ธ๋ผ์ด๋
์ด ๊ธฐ์ ์, ์๋ฒ๊ฐ ์ด๊ธฐ GET์ ์๋ตํ์ฌ ๋ณด๋ด๋ HTML ๋ฌธ์์ ์ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ํฌํจํด์ ๋ณด๋ด์ค ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด CSS ํ์ผ์ด ํ์ํ ๊ฒฝ์ฐ, ํด๋น ์์ฒญ์ด ์ค๊ธฐ์ ์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด์ผํ๋ ์์ฒญ์๋ฅผ ์ค์ธ๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฆฌ์์ค ์ธ๋ผ์ด๋์๋ ๋ช๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค. HTML ๋ฌธ์์ ์ด๋ ๊ฒ ๋ฆฌ์์ค๋ฅผ ํฌํจ ์ํค๋ ๊ฒ์, ํ ์คํธ ํ์์ด ์๋ ํฐ ํ์ผ์ด ์์ ๊ฒฝ์ฐ HTML ๋ฌธ์์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์์ผ, ๊ฒฐ๊ตญ์๋ ์ฐ๊ฒฐ ์๋๊ฐ ๊ฐ์๋์ด ์ด ๊ธฐ์ ๋ก ์ป๋ ์ด์ ์ด ์์๋์ด ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ผ์ธ ๋ฆฌ์์ค๋ HTML ๋ฌธ์์ ๋ถ๋ฆฌ๋์ง ์์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฑฐ๋ถํ๊ฑฐ๋, ์บ์๋ฅผ ์ธ ์ ์๋ ๋งค์ปค๋์ฆ์ด ์๋ค. ์ฆ, ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋ฆฌ์์ค์ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
HTTP/2 - ์๋ฒ ํธ์ฌ
HTTP/2๋, ํด๋ผ์ด์ธํธ์ ์ด๊ธฐ GET
์์ฒญ์ ๋ํด ์ฌ๋ฌ๊ฐ์ ๋์ ์๋ต์ ํ์ฉํ๋ฏ๋ก, ์๋ฒ๋ ์์ฒญํ HTML ํ์ด์ง์ ํจ๊ป ํด๋ผ์ด์ธํธ์ ๋ฆฌ๋ก์ค๋ฅผ ์ ์กํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๊ธฐ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค. ์ด๋ฅผ ์๋ฒ ํธ์ฌ๋ผ๊ณ ํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก HTTP/2 ์ฐ๊ฒฐ์ ํธ์๋ ๋ฆฌ์์ค์ ๋ฌธ์๊ฐ์ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์, ๋ฆฌ์์ค ์ธ๋ผ์ธ์ด๋ผ๋ ๋ชฉํ๋ฅผ ๋์์ ๋ฌ์ฑํ ์ ์๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฉ์ธ HTML ๋ฌธ์์ธ์ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ๊ฑฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
HTTP/2์์ ์ด ํ๋ก์ธ์ค๋ PUSH_PROMISE
๋ผ๋ ํ๋ ์์ ์ ์กํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค๊ฐ ํธ์๋ ๊ฒ์์ ์๋ฆฌ๋ฉด์ ์์๋๋ค. ์ด ํ๋ ์์๋ ๋ฉ์์ง์ ํค๋๋ง ์กด์ฌํ๊ณ , ํด๋ผ์ด์ธํธ์์ ์๋ฒ๊ฐ ํธ์ํ ๋ฆฌ์์ค๊ฐ ํฌํจ๋์ด ์๋ค. ์ด๋ฏธ ์บ์๋ ๋ฆฌ์์ค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ RST_STREAM
ํ๋ ์์ ์๋ต์ผ๋ก ์ ์กํ์ฌ, ํธ์๋ฅผ ๊ฑฐ๋ถํ ์ ์๋ค.๋ํ PUSH_PROMISE
ํ๋ ์์ ์๋ฒ๊ฐ ์ด๋ค ๋ฆฌ์์ค๋ฅผ ํธ์ํ ๊ฒ์ธ์ง ์๊ธฐ ๋๋ฌธ์, ์๋ฒ์ ์ค๋ณต ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ก ๋์์ค๋ค.
์ฌ๊ธฐ์์ ์ค์ํ ๊ฒ์ ํด๋ผ์ด์ธํธ ์ ์ด๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ ํธ์ ์ฐ์ ์์๋ฅผ ์กฐ์ ํ๊ฑฐ๋, ์๋ฒ ํธ์๋ฅผ ๋นํ์ฑํํด์ผํ๋ ๊ฒฝ์ฐ, ์ธ์ ๋ ์ง SETTINGS
ํ๋ ์์ ๋ณด๋ด ์ด HTTP/2 ๊ธฐ๋ฅ์ ์์ ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋ง์ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ ๊ฐ์ง๋ง, ์๋ฒ ํธ์๊ฐ ๊ผญ ์ ๋ต์ ์๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ถ ์น ๋ธ๋ผ์ฐ์ ๋, ํด๋ผ์ด์ธํธ์ ๋ฏธ์ง ์บ์๋ ๋ฆฌ์์ค๊ฐ ์๋๋ผ๋ ํธ์๋ ์์ฒญ์ ํญ์ ์ทจ์ํ ์๋ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ค๋ณต๋ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ผ ์ ์๋๋ก ํ์ฉํ ๊ฒฝ์ฐ, ์๋ฒ์ ํธ์ฌ๋ฅผ ํด๋ฒ๋ฆฌ๋ฉด ์ฐ๊ฒฐ์ด ๋ถํ์ํ๊ฒ ๋ญ๋น๋ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ฒ ํธ์ฌ๋ ๊ฐ๋ฐ์์ ์ฌ๋์ ๋ฌ๋ ค์๋ค.
- https://developers.google.com/web/fundamentals/performance/prpl-pattern/
- https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/
์์ถ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์, ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ HTTP ๋ฉ์์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ด๋ค. HTTP/1.1๊ณผ HTTP/2์์ ๋ชจ๋ ์ด ์ ๋ต์ ์ฌ์ฉํ๊ณ ๋ ์์ง๋ง, ์ ์์ ๊ฒฝ์ฐ ์ ์ฒด ๋ฉ์์ง๋ฅผ ์์ถํ๋ ๊ฒ์ ๊ธ์งํ๋ ๊ฒ์ ๊ตฌํํ๋๋ฐ ๋ฌธ์ ๊ฐ ์๋ค.
HTTP/1.1
gzip ๋ฑ์ ๊ธฐ์ ์ CSS, ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด HTTP ๋ฉ์์ง๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๋๋ฐ ์ค๋ซ๋์ ์ฌ์ฉ๋์ด์ ธ ์๋ค. ๊ทธ๋ฌ๋ ๋ฉ์์ง์ ํค๋๋ ํญ์ ์ผ๋ฐ ํ ์คํธ๋ก ์ ์ก๋๋ค. ๊ฐ ํค๋๋ ์๋นํ ์์ง๋ง, ๋ง์ ์์ฒญ์ด ์ด๋ฃจ์ด์ง ์๋ก ์ด ์์ถ๋์ง ์์ ํค๋์ ์กด์ฌ๋ ๋ฐ์ดํฐ์ ๋ถ๋ด์ด ๊ฐ์ค๋๋ฉฐ, ํนํ ๋ง์ ๋ค๋ฅธ ๋ฆฌ์์ค๊ฐ ์์ฒญ์ด ํ์ํ ๋ณต์กํ API๋ฅผ ์ฌ์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๊ฒ ๋ถ์ด์ต์ด๋ค. ๋ํ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ํค๋๊ฐ ์ปค์ง๋ฏ๋ก ์ด๋ป๊ฒ๋ ์์ถ์ ํ๋ ๊ฒ์ด ํ์ํ ์ ์๋ค.
HTTP/2
HTTP/2์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฑ์ฅํ๋ ์ค์ํ ํฌ์ธํธ ์ค ํ๋๋, ์ด์ง ํ๋ ์ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์ ๋ณด์ ๋ํ ์ ์ด๊ถ์ ๋์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค. ํค๋ ์์ถ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. HTTP/2์์๋ ๋ฐ์ดํฐ์์ ํค๋๋ฅผ ๋ถํ ํ์ฌ ํค๋ ํ๋ ์๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์์ฑํ ์ ์๋ค. ๊ทธ๋ฐ๋ค์ HTTP/2 ์ ์ฉ ์์ถ ํ๋ก๊ทธ๋ HPACK์ด ํค๋๋ฅผ ์์ถํ ์ ์๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ Huffman coding์ ์ฌ์ฉํ์ฌ ํค๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉํ ์ ์์ผ๋ฏ๋ก ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์๋ค. ๋ํ HPACK์ ์ด์ ์ ์ ์ก๋ ๋ฉํ๋ฐ์ดํฐ ํ๋๋ฅผ ์ถ์ ํ๊ณ , ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ๊ณต์ ๋, ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ธ๋ฑ์ค์ ๋ฐ๋ผ์ ํด๋น ํ๋๋ฅผ ์ถ๊ฐ๋ก ์์ถํ ์ ์๋ค. ์๋ ์์๋ฅผ ์ดํด๋ณด์.
request 1
method: GET
scheme: https
host: example.com
path: /academy
accept: /image/jpeg
user-agent: Mozilla/5.0 ...
request 2
method: GET
scheme: https
host: example.com
path: /academy/images
accept: /image/jpeg
user-agent: Mozilla/5.0
์ด ์์ฒญ๋ค์์ method
scheme
host
accept
user-agent
๋ฑ ๋ง์ ๊ฐ๋ค์ด ์์ง๋ง, path
์ ๊ฐ๋ง ๋ค๋ฅด๋ค. HPACK์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฐ์ธ path
๋ง ์๋์ ๊ฐ์ด ๋ณด๋ธ๋ค.
request 1
method: GET
scheme: https
host: example.com
path: /academy
accept: /image/jpeg
user-agent: Mozilla/5.0 ...
request 2
path: /academy/images
HPACK๊ณผ ๋ค๋ฅธ ์์ถ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์, HTTP/2๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ฌ์ด์ ๋ ์ดํด์๋ฅผ ๊ฐ์์ํค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๊ฒ ๋์๋ค.
๊ฒฐ๋ก
์์์ ์ดํด๋ณด์๋ฏ์ด, HTTP/2๋ ์ฌ๋ฌ ๋ฉด์์ HTTP/1.1๊ณผ ๋ค๋ฅด๋ค. ์ผ๋ถ ๊ธฐ๋ฅ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํ ํ๋๋ฐ ์์ด ์ฌ์ฉํ ์ ์๋ ์ ์ด ์์ค์ ๋์ด๊ณ , ์ด์ง ํ๋กํ ์ฝ์ ํตํด์ ์ฑ๋ฅ์ ๊ฐ์ ์์ผฐ๋ค. ์ด์ ๋ ํ๋กํ ์ฝ ๊ฐ์ ๋ณํ์ ๋ํด ์ดํดํ์ผ๋ฏ๋ก, HTTP/2์ ๋ฉํฐํ๋ ์ฑ, ์คํธ๋ฆผ ์ฐ์ ์์ ์ง์ , ํ๋ฆ์ ์ด, ์๋ฒ ํธ์์ ์์ถ๊ณผ ๊ฐ์ ์์๊ฐ ์น ๊ฐ๋ฐ ํ๊ฒฝ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง ํ๋จํ ์ ์๋ค.
HTTP/1.1๊ณผ HTTP/2 ์ฌ์ด์ ์ฑ๋ฅ ๋น๊ตํด๋ณด๋ ค๋ฉด, ๊ตฌ๊ธ์ ๋ฐ๋ชจํ์ด์ง๋ฅผ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข๋ค. ๋ก์ปฌ ๋จธ์ ์์ ํ ์คํธ ์, ํ์ด์ง ๋ก๋ ์๊ฐ์ ํ ์คํธ์ ์ฌ์ฉ๊ฐ๋ฅํ ๋์ญํญ, ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ๋ฆฌ์์ค๋ฑ๊ณผ ๊ฐ์ ๋ช๊ฐ์ง ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ์ง ์ ์๋ค. ๋ณด๋ค ํฌ๊ด์ ์ธ ํ ์คํธ ๊ฒฐ๊ณผ๋ ์ฌ๊ธฐ์์ ์ฐธ๊ณ ํ ์ ์๋ค.
- https://www.digitalocean.com/community/tutorials/how-to-build-a-modern-web-application-to-manage-customer-information-with-django-and-react-on-ubuntu-18-04
- https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-with-http-2-support-on-ubuntu-16-04
์ถ์ฒ: https://www.digitalocean.com/community/tutorials/http-1-1-vs-http-2-what-s-the-difference