TL;DR
์ด๋ฏธ ์นํฉ์ HTTP/2 ์ ๊ด๊ณ ์์ด๋ ๋ง์ ์ญํ ์ ์ํํ๊ณ ์์ผ๋ฉฐ
HTTP/2 ์์ ์นํฉ์ ๋ฒ๋ค๋ง ์ ๋ต์ ๋ฐ๋ผ, ์ฑ๋ฅ ํฅ์์ ๋๋ชจํ ์ ์์ต๋๋ค!
Webpack ์ค์ ํ์ผ์ ์ด์ฌํ ์์ฑํ๋ค ๋ฌธ๋ HTTP/2 ๋ ๋ฉํฐ ๋ฆฌ์์ค ๋ก๋ฉ๋ ๋น ๋ฅด๋ค๋๋ฐ
(2018๋
10์ ๊ธฐ์ค ์ฝ 30% ๊ฐ๋์ ์น ์ฌ์ดํธ๋ HTTP/2 ๋ฅผ ์ง์ํ๊ณ ์์ต๋๋ค)
'์ด ์ด๋ ต๊ณ ๊ท์ฐฎ์ Webpack ์ค์ ์ ์ํด๋ ๊ด์ฐฎ์ง ์์๊น?' ๋ผ๋ ์๊ฐ์ด ๋ฌธ๋ ๋ค์ด์ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค!
Webpack์ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋์ ๊ฐ์ด ์ค๋ช ํ ์ ์์ต๋๋ค
Multiple Resources์ ๋ํ HTTP Request Overhead๋ฅผ ์ค์ผ ์ ์๋๋ก
Single Resource๋ก ๋ง๋ค์ด Request Overhead๋ฅผ ์ค์ด๊ณ , ์ฑ๋ฅ ๊ฐ์ ์ ๋๋ชจํ์.
HTTP/1 ์์ ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ์ ๊ทผํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ ํ ๊ฒ์
์ ์ํฉ์์๋ ์ต์ด HTML ํ์ผ์ ๊ฐ์ ธ์จ ๋ค์, ๋๋จธ์ง 16๊ฐ(HTML ์ ์ธ)์ resources๋งํผ์ TCP ์ฐ๊ฒฐ์ด ์๊น๋๋ค
(HTTP KEEP-ALIVE TCP์ฐ๊ฒฐ์ max ํ๋ ๋ด์์ ๋๊ธฐ์ง ์๊ณ ๊ณ์ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅผ ์ ์์)
KEEP-ALIVE์ ์ด๋ฅผ ํ์ฉํ ๋ณ๋ ฌ ์ฐ๊ฒฐ์ ํ๋๋ผ๋,
๋ฆฌ์์ค ์์ฒญ์ ๋ํด Connection์ด ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ ๊ฒ์ ๋ง์ ์ ์์ต๋๋ค
(๊ทธ๋ฆฌ๊ณ , ๋น์ฐํ๊ฒ๋, ์ด ๋ถ๋ถ์์ Request Overhead๊ฐ ๋ฐ์ํฉ๋๋ค)
๊ทธ๋ฆฌ๊ณ , ์์ (๋๋ ํด ์๋ ์๋) ์ฌ๋ฟ์ ๋ฆฌ์์ค๋ฅผ ํ๋๋ก ๋ชจ์,
ํ ๊ฐ์(๋๋ ์ต์ํ์) Resource๋ง Serving ํ๊ธฐ ์ํด ๋ง๋ค์ด ์ง ๊ฒ์ด Webpack!
Webpack์ ์ฅ์ ์, ํ๋์ ํ์ผ๋ก bundlingํ์ฌ http connection์ ์ต์ํ ํ๋ค๋ ์ ์ด์ง๋ง,
ํ๋์ ์์ ํ์ผ ๋ณ๊ฒฝ์๋ (bundle.js์ ํฌํจ๋ ํ๋์ cssํ์ผ์ด ๋ณ๊ฒฝ๋์๋ค ํ๋๋ผ๋)
์ ์ฒด๋ฅผ ๋ค์ bundling ํ๊ธฐ ๋๋ฌธ์, bundle.js๋ผ๋ ํฐ ํ์ผ์ ๋ํ ์บ์ฑ์ด ์ด๋ ต์ต๋๋ค.
http connection๊ณผ ์บ์ฑ์ trade-off์์, connection ์ต์ํ์ ๋ ๋ง์ ์ฑ๋ฅ ๊ฐ์ ์ด ์๊ธฐ๋๋ฌธ์
HTTP/1 ์์ webpack์ ํตํ bundling์ ํ๋ ์ด์ ๋ผ๊ณ ํ ์ ์๊ฒ ์ต๋๋ค
๊ทธ๋ผ HTTP/2 ํ๊ฒฝ์์๋ ์ด๋จ๊น์?
HTTP/2 ๋ Multiplexed Streams ๋ฅผ ์ฌ์ฉํ์ฌ, ํ๋์ TCP Connection์ผ๋ก ์ฌ๋ฌ ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค
ํ ๋ฒ์ ์์ฒญ์ ์ฌ๋ฌ ์ข
๋ฅ์ resource ์์ฒญ์ ๋ํ stream frame์ ์์ฑํ์ฌ ์ฃผ๊ณ ๋ฐ๋ ํ์์ด๋ฏ๋ก,
Multiple resources๊ฐ ํ์ํ ํ๊ฒฝ์์๋ RTT(Round trip time)๊ฐ ์์ฐํ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค
์ ๊ทธ๋ผ ๋ ์ด์ ์นํฉ์ด ํ์์์ด์ง๋ ๊ฑธ๊น์?
HTTP/2์ ์ฃผ์ ๋ชฉํ๋ ์ง์ฐ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ฉฐ ์ด๋ฅผ ์ํด ์ ์ฒด ์์ฒญ ๋ฐ ์๋ต ๋ค์คํ๋ฅผ ์ง์ํ๊ณ , HTTP ํค๋ ํ๋์ ํจ์จ์ ์์ถ์ ํตํด ํ๋กํ ์ฝ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ณ , ์์ฒญ ์ฐ์ ์์ ์ง์ ๋ฐ ์๋ฒ ํธ์๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๊ธฐ ์ํด ๋ค์ํ ํ๋กํ ์ฝ ๊ฐ์ ์ฌํญ(์: ์๋ก์ด ํ๋ฆ ์ ์ด, ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ ๊ทธ๋ ์ด๋ ๋ฉ์ปค๋์ฆ)์ด ์ง์๋์ง๋ง, ๋ฌด์๋ณด๋ค ๋ชจ๋ ์น ๊ฐ๋ฐ์๋ค์ด ์ดํดํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฉํด์ผ ํ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ๋ค์ ๋ฐ๋ก ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋๋ค.
์ถ์ฒ: developers.google.com Web Fundamentals HTTP/2 ์๊ฐ
์์ฒญ ๋ฐ ์๋ต ๋ค์คํ๊ฐ ๋๋ค๋ฉด, ํ๋์ ํ์ผ๋ก ๋ฒ๋ค๋ง์ ๋์์ฃผ๋ Webpack์
(๋ฌผ๋ก Webpack ์ ๊ทธ ์ธ์๋, code splitting, Tree shaking ๋ฑ ๋ค์ํ ์ญํ ์ ์ํํฉ๋๋ค)
HTTP/2 ์ธ์์ด ๋๋ํ๋ ์๊ฐ Webpack์ ํ์ ์์ด์ง๋๊ฒ ์๋๊น์?
๊ฒฐ๋ก ์ ์ผ๋ก๋, HTTP/2 ์์๋ bundle๋ ํ๋์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋ฉ๋๋ค
์ข ๋ ๋ช
ํํ ํ์๋ฉด, HTTP/1 ์์ ๊ณผ ๊ฐ์ด ํ๋์ ํฐ bundleํ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋ณด๋ค๋
Grouping๋ ์ฌ๋ฟ์ ์์ bundles๊ฐ ๋ ํจ๊ณผ์ ์ผ ๊ฒ ์
๋๋ค. (Benchmark ํ
์คํธ์ ๊ทผ๊ฑฐ)
๋๋ถ์ด Grouping๋ ์ฌ๋ฟ์ ์์ bundle ํ์ผ๋ค์ ์บ์ฑ์๋ ๋์ฑ ํจ๊ณผ์ ์
๋๋ค.
(์์ ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ค๊ณ ํฐ ํ๋๋ฅผ ๋ถ๋ฌ์ฌ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค)
์์๊ณผ ๋ฌ๋ฆฌ, Multiplexed Stream์ ์ ํ๋ ์๊ธฐ ๋๋ฌธ์ (Nginx ์ค์ ๋ ์๋ค!)
"HTTP/2 ์์๋ ๋ค์ค ์์ฒญ์ด ๊ฐ๋ฅํ๋๊น, bundle์ด ํ์์๊ฒ ๋ค "
๋ผ๊ณ ๋จ์ํ๊ฒ ์๊ฐํ๋ ๊ฒ๊ณผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ ์์ธ์์ต๋๋ค
๊ทธ๋ฆฌ๊ณ Webpack์์๋ HTTP/2 ํ๊ฒฝ์ ๋์ํ ์ ์๋๋ก ๋ด์ฅ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๊ณ ์๋๋ฐ์
webpack.optimize.AggressiveSplittingPlugin
์ ์ฌ์ฉํ๋ฉด,
๊ธฐ์กด๊ณผ ๋ฌ๋ฆฌ, ์ฌ๋ฌ๊ฐ์ ์์ chunk๊ฐ ์์ฑ๋์ด, caching์ด ๊ฐ์ ๋๋ค๊ณ ๊ฐ์ด๋ํ๊ณ ์์ต๋๋ค
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ธ์ ๋ ์๋ชป๋ ์ ๋ณด์ ๋ํ ์ง์ ๊ฐ์ฌํ ๋ฐ๋๋ก ํ๊ฒ ์ต๋๋ค!
์ ๋ ๊ถ๊ธ์ฆ์ ํ์์ผ๋ ๋ค์ webpack.config.js
๋ฅผ ๋ง์ ์์ฑํ๋ฌ ๊ฐ์ผ๊ฒ ์ต๋๋ค ๐ต
์ข์ ํฌ์คํธ ๊ฐ์ฌํฉ๋๋ค!