์ ๋ฒ์ ๋งํ๋ โ๋ ๋ฒจ๋ก๊ทธ์ ํ์ ์คํฌ๋ฆฝํธโ์ ๋ณ์ฒ์ฌ๋ฅผ ๋ค๋ฃจ์ด ๋ณผํ ๋ฐ ์ค๋์ 1ํธ์ด๋ค.
์ฃผ์ ๋ โํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ์ ๋ตโ ์ด๊ณ , webpack๊ณผ ํจ๊ป ๋น๋ ํ๊ฒฝ์ ๋ฐ๋ผ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ป๊ฒ ์ปดํ์ผ ํ๋์ง ์ดํด๋ณด๋๋ก ํ์.
ํน์ ๊ธฐ์กด์ ๋ ๋ฒจ๋ก๊ทธ์ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ์ ๋ต์ ๋ชจ๋ฅธ๋ค๋ฉด ๋ณด๊ณ ์ค๋ ๊ฒ์ ์ถ์ฒํ๋ค.
โก๏ธ ๋ ๋ฒจ๋ก๊ทธ์ ํ์ ์คํฌ๋ฆฝํธ
๋จผ์ ๋ ๋ฒจ๋ก๊ทธ์์ ๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง ์ฃผ๋ก ๋ง์ฃผ์น๊ฒ ๋๋ ๋น๋ ์ํฉ์ ๋์ดํด๋ณด์๋ค.
local, dev, prod ํ๊ฒฝ์์ ๊ฐ๊ฐ ์์ฃผ ๋ง์ฃผ์น๋ ๋น๋ ์ํฉ์ ๋ง๊ฒ ์ปดํ์ผ ์ ๋ต์ ๊ตฌ์ฑํด๋ณผ ์์ ์ด๋ค.
๋ก์ปฌ ๋น๋๋ ์๋ฌด๋๋ ์๋์ ๋ ๊ฐ์ ์ํฉ์์ ์์ฃผ ์ด๋ฃจ์ด์ง๋ค.
๊ธฐ์กด ์ ๋ต์ ์๋์ ๋ฐ๋ฅด๋ฉด local์์๋ ํ์ ์ฒดํฌ๋ฅผ ํฌ๊ธฐํ๋๋ผ๋ (VSCode์ ts-server์๊ฒ ๋งก๊ธฐ๊ธดํ๋ค.) ๊ฐ๋ฐํ๋ ๋์ ๋ถํธํ์ง ์๋๋ก ๋น ๋ฅธ ๋น๋ + ํ์ ์ค๋ฅ๋ฅผ ๋ง๋์ง ์์์ด ์ฐ์ ์ ๋์๋ค.
์ ๊ทธ๋ํ๋ โBuild Time On Local Machineโ ์์์ ๋น๊ต์ธ๋ฐ, ๋๋ต esbuild-loader
๊ฐ 3๋ฐฐ ์ ๋ ๋น ๋ฆ์ ์ ์ ์๋ค. ์กฐ๊ฑด์ด ๋ง์ง ์์ (ํ์
์ฒดํฌ๋ฅผ ํฌํจํจ) ๋น๊ต์๋ ํฌํจ๋์ง ์์์ง๋ง ts-loader + fork-ts-checker-webpack-plugin
๋ณด๋ค babal-loader
๋ ์กฐ๊ธ ๋น ๋ฅธ ์์ค์ด์๋ค.
์ถ๊ฐ๋ก โDev Server Hot Module Replacement Timeโ ์์์ ๋น๊ต์์๋ react-refresh-webpack-plugin
๋ฅผ ์ฌ์ฉํ babel-loader
๊ฐ esbuild-loader
๋ณด๋ค ๋๋ ธ๋ค. ๊ทธ๋ฌ๋ค ๋ณดํต 100ms๋ ์ ๋๋ ๋ฏธ๋นํ ์ฐจ์ด๋ผ ๋ฐ๋ก ๊ทธ๋ํ๋ฅผ ์ ์ํ์ง๋ ์์๋ค.
๊ทธ๋ฌ๋ค ์ด๊ธฐ ๋น๋๋ฅผ ์์ฃผ ํ์ง๋ ์๊ณ , HMR
์ํฉ์์๋ ํฌ๊ฒ ์๋ ์ฐจ์ด๊ฐ ๋์ง ์๋๋ค.
๊ฒ๋ค๊ฐ babel-loader
๋ react-refresh-webpack-plugin
์ ํตํด ์ฝ๋ ์์ ์ด ๋ฐ์ํ ๋ ํ๋ฉด ๊น๋นก์์ด ์ผ์ด๋๋ ์์ด ํธ์ํ๊ฒ ์์
ํ ์ ์์ด babel-loader
๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
์๋ฌด๋๋ dev, prod๋ ๊ฐ๋ฐ ๋์ค์ local Machine์์ ๋น๋๋ฅผ ํ ์ํฉ์ด ๊ฑฐ์ ์์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ฃผ๋ก Github Actions CI ์์์ ์ํฉ์ ์ดํด๋ณด๋๊ฒ ๋ง์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋โฆ ๋น์ฅ ์ฌ๋ฌ๋ฒ PR์ ๋ณด๋ด๋ ๊ฒ๋ง๊ณ ๋ Github Actions CI ์์์ ์๋ ์ฐจ์ด๋ฅผ ๋น๊ตํ๊ธฐ๋ ํ๋ค ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ด์ฉ์ ์์ด local Machine์์์ ๋น๋๋ก ๋์ฒดํ๋ค.
dev, prod์์๋ ts-loader
๋ฅผ ์ ์งํ ๋ค, ํ์
๊ฒ์ฌ๋ฅผ ๋ณ๋์ ํ๋ก์ธ์ค๋ก ์ฎ๊ฒจ์ ์งํํ๊ฒ ํด์ฃผ๋ย fork-ts-checker-webpack-plugin
์ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ esbuild-loader
์๋ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํด์ค ๋ค ์ถ๊ฐ๋ก ESBuildMinifyPlugin
๊น์ง ์ ์ฉํด์ฃผ์๋ค.
Webpack ๋น๋์ Esbuild์ ์๋๋ฅผ ํตํด Transpilation๊ณผย Minification
๋จ๊ณ์ ๋ํ ๋ ๋น ๋ฅธ ๋์์ ์ ๊ณตํฉ๋๋ค.
ํ์คํ โBuild Time On Local Machineโ ์์์ ๋น๊ต๋ง ๋ด๋ ๊ธฐ์กด์ ๋นํด ์๋๊ฐ ๋นจ๋ผ์ง ๊ฑธ ์ ์ ์๋ค. dev ๋น๋๋ ๋ฐ๋ก ๋น๊ตํ์ง ์๊ณ prod ๋น๋๋ง ๋น๊ตํ๋ค.
"Github Actions CI" ์์ ๋น๋ํ์ ๋, dev๋น๋๋ ์๋ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์์์ง๋ง, prod๋น๋์์ ์๋๊ฐ ์ ์๋ฏธํ๊ฒ ์ค์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ๊น์ง ๋ณํ๋ ๋ ๋ฒจ๋ก๊ทธ์ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ์ ๋ต์ ์ดํด๋ดค๋ค.
๊ฒฐ๋ก ์ ์๋์ ๊ฐ๋ค
babel-loader
(ํ์
์ฒดํฌX + HMR ๊ณ ๋ ค)esbuild-loader
+ fork-ts-checker-webpack-plugin
+ ESBuildMinifyPlugin
๋ค์์๋ ์ํฉ์ ๋ณด๊ณ ๋ ๋ฒจ๋ก๊ทธ์ ํ์ ์คํฌ๋ฆฝํธ โ์ฝ๋ ์คํ์ผโ ํธ์ผ๋ก ๋์์ค๊ฒ ๋ค.