์ฝ๋ ์ถ์ ๊ธฐ์ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๋์ ๋น๋๋ฅผ ์ต์ ํํ์ธ์. ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋๊ตฌ, ์ ๋ต, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์๋ณด์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์(Minification): ํ๋ก๋์ ๋น๋ ์ต์ ํ ์ ๋ต
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ํ๊ฒฝ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๋ก๋ฉ์ด ๋๋ฆฐ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์ ๋ถ๋ง์ ์ฌ๊ณ , ์ดํ๋ฅ ์ ๋์ด๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก๋ ์์ต ์์ค๋ก ์ด์ด์ง๋๋ค. ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ข ์ข ํ์ด์ง ๋ก๋ ์๊ฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด์ ๋์ํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์(minification)์ ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์์ ์ธ๊ณ๋ฅผ ๊น์ด ํ๊ณ ๋ค์ด, ํ๋ก๋์ ๋น๋๋ฅผ ์ต์ ํํ๊ณ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ ์ด์ , ๊ธฐ์ , ๋๊ตฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ๊ตฌํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์๋ ๋ฌด์์ธ๊ฐ?
์ฝ๋ ์ถ์๋ ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ฌํ ๋ถํ์ํ ๋ฌธ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ๊ณต๋ฐฑ: ์ฌ๋์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ๋ ๋ฌด๊ดํ ์คํ์ด์ค, ํญ, ์ค ๋ฐ๊ฟ.
- ์ฃผ์: ์์ง์ ์ํด ๋ฌด์๋๋ ์ฝ๋ ๋ด ์ค๋ช ๋ฌธ.
- ์ธ๋ฏธ์ฝ๋ก : ๊ธฐ์ ์ ์ผ๋ก ์ผ๋ถ ๊ฒฝ์ฐ์ ํ์ํ์ง๋ง, ์ ์ ํ ์ฝ๋ ๋ถ์์ ํตํด ๋ง์ ์ธ๋ฏธ์ฝ๋ก ์ ์์ ํ๊ฒ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ๊ธด ๋ณ์ ๋ฐ ํจ์ ์ด๋ฆ: ๊ธด ์ด๋ฆ์ ๋ ์งง๊ณ ๋๋ฑํ ๋์ฒด ์ด๋ฆ์ผ๋ก ๊ต์ฒด.
์ด๋ฌํ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ถ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ฌ ๋ค์ด๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๊ทธ ์ํฅ์ ํนํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฌ๊ฑฐ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ๋์ฑ ์ปค์ง๋๋ค. ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์. ์ ์ง๊ตญ์ ์ผ๋ถ ์ฌ์ฉ์๋ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ์ธํฐ๋ท์ ์ด์ฉํ ์ ์์ง๋ง, ์ ํฅ ์์ฅ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ๋ ๋๋ฆฌ๊ณ ๋น์ผ ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ์ ์์กดํ ์ ์์ต๋๋ค.
์ฝ๋ ์ถ์๊ฐ ์ ์ค์ํ๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์์ ์ด์ ์ ๋จ์ํ ๋ฏธ์ ์ธ ๋ถ๋ถ์ ๋์ด์ญ๋๋ค. ๋ค์์ ์ฝ๋ ์ถ์๊ฐ ๋ชจ๋ ํ๋ก๋์ ๋น๋ ๊ณผ์ ์์ ์ค์ํ ๋จ๊ณ์ธ ์ด์ ์ ๋๋ค:
์น์ฌ์ดํธ ์ฑ๋ฅ ํฅ์
ํ์ผ ํฌ๊ธฐ๊ฐ ์์์๋ก ๋ค์ด๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๋๋ค. ์ด๋ ๊ฒ ์ค์ด๋ ์ง์ฐ ์๊ฐ์ ๋ ๋น ๋ฅธ ํ์ด์ง ๋ก๋ ์๊ฐ์ผ๋ก ์ด์ด์ ธ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด ์น์ฌ์ดํธ ์๋์ ์ฌ์ฉ์ ์ฐธ์ฌ๋ ์ฌ์ด์๋ ์ง์ ์ ์ธ ์๊ด๊ด๊ณ๊ฐ ์์์ด ์ผ๊ด๋๊ฒ ๋ํ๋ฌ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ง์กด์ 100ms์ ์ง์ฐ ์๊ฐ์ด ๋ฐ์ํ ๋๋ง๋ค ๋งค์ถ์ด 1% ๊ฐ์ํ๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
๋์ญํญ ์๋น ๊ฐ์
์ถ์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ ์ค์ ๋๋ค. ์ด๋ ํนํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ์ฉ์๋ ๋ฐ์ดํฐ ์๊ธ์ ์ ์ ํ์ด ์๋ ์ฌ์ฉ์์๊ฒ ์ ์ฉํฉ๋๋ค. ๋ํ, ๋์ญํญ ์๋น ๊ฐ์๋ ์น์ฌ์ดํธ ์ด์์, ํนํ ์ ์ธ๊ณ์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ์ด์์์ ์๋ฒ ๋น์ฉ์ ๋ฎ์ถฐ์ค๋๋ค.
๋ณด์ ๊ฐํ (๋๋ ํ)
์ฃผ๋ ๋ชฉ์ ์ ์๋์ง๋ง, ์ถ์๋ ์ด๋ ์ ๋์ ์ฝ๋ ๋๋ ํ(obfuscation)๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณ์ ์ด๋ฆ์ ์ค์ด๊ณ ๊ณต๋ฐฑ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๊ถํ ์๋ ๊ฐ์ธ์ด ์ฝ๋๋ฅผ ์ดํดํ๊ณ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋งํ๊ธฐ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ํ์ง๋ง ์ถ์๋ ๊ฐ๋ ฅํ ๋ณด์ ๊ดํ์ ๋์ฒดํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ๋ฌธ ๋๋ ํ ๋๊ตฌ๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ๋ํด ํจ์ฌ ๋ ๊ฐ๋ ฅํ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
SEO ๊ฐ์
๊ตฌ๊ธ๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์ ๋น ๋ฅด๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์น์ฌ์ดํธ๋ฅผ ์ฐ์ ์ํฉ๋๋ค. ์น์ฌ์ดํธ ์๋๋ ์์ ๊ฒฐ์ ์์ธ์ด๋ฉฐ, ์ถ์๋ ์ฌ์ดํธ ์๋๋ฅผ ๊ฐ์ ํ์ฌ ๊ฒ์ ์์ง ์์๋ฅผ ๋์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ๋ก๋๋๋ ์น์ฌ์ดํธ๋ ์ ๋๋ก ์์ธํ๋๊ณ ๊ฒ์ ๊ฒฐ๊ณผ์์ ๋ ๋์ ์์๋ฅผ ์ฐจ์งํ์ฌ ๋ ๋ง์ ์ ๊ธฐ์ ํธ๋ํฝ์ ์ ๋ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ถ์ ๊ธฐ๋ฒ
์ฝ๋ ์ถ์๋ ๊ธฐ๋ฅ ์ ํ ์์ด ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ๊ธฐ๋ฒ์ ํฌํจํฉ๋๋ค:
๊ณต๋ฐฑ ์ ๊ฑฐ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๊ฐ๋จํ ๊ธฐ๋ฒ์ ๋๋ค. ์ฝ๋์์ ๋ถํ์ํ ๋ชจ๋ ๊ณต๋ฐฑ ๋ฌธ์(์คํ์ด์ค, ํญ, ์ค ๋ฐ๊ฟ)๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๊ฐ๋จํ์ง๋ง ์ ์ฒด ํ์ผ ํฌ๊ธฐ๋ฅผ ์๋นํ ์ค์ผ ์ ์์ต๋๋ค. ์:
์๋ณธ ์ฝ๋:
function calculateArea(length, width) { var area = length * width; return area; }
์ถ์๋ ์ฝ๋:
function calculateArea(length,width){var area=length*width;return area;}
์ฃผ์ ์ ๊ฑฐ
์ฃผ์์ ๊ฐ๋ฐ ์ค ์ฝ๋ ์ ์ง๋ณด์์ ํ์์ ์ด์ง๋ง ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋ถํ์ํฉ๋๋ค. ์ฃผ์์ ์ ๊ฑฐํ๋ฉด ํ์ผ ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ผ ์ ์์ต๋๋ค. ์:
์๋ณธ ์ฝ๋:
// ์ด ํจ์๋ ์ฌ๊ฐํ์ ๋ฉด์ ์ ๊ณ์ฐํฉ๋๋ค function calculateArea(length, width) { return length * width; // ๊ณ์ฐ๋ ๋ฉด์ ์ ๋ฐํํฉ๋๋ค }
์ถ์๋ ์ฝ๋:
function calculateArea(length,width){return length*width;}
์ธ๋ฏธ์ฝ๋ก ์ต์ ํ
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ ์ธ๋ฏธ์ฝ๋ก ์ฝ์ (ASI)์ ์ง์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฏธ์ฝ๋ก ์ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ์ต๊ด์ด์ง๋ง, ์ผ๋ถ ์ถ์ ๋๊ตฌ๋ ASI์ ์์กดํ ์ ์๋ ๊ณณ์์ ์์ ํ๊ฒ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฒ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ก ์ ์คํ ๋ถ์์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ฌธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์๋ ASI์ ๋ํ ์์กด์ด ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
๋ณ์ ๋ฐ ํจ์ ์ด๋ฆ ๋จ์ถ (๋งน๊ธ๋ง)
์ด๊ฒ์ ๊ธด ๋ณ์ ๋ฐ ํจ์ ์ด๋ฆ์ ๋ ์งง์, ์ข ์ข ํ ๊ธ์์ธ ์ด๋ฆ์ผ๋ก ๋์ฒดํ๋ ๋ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ๋๋ค. ์ด๋ ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด์ง๋ง ์ฝ๋๋ฅผ ์ฝ๊ธฐ ํจ์ฌ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ์ด๋ ์ข ์ข ๋๋ ํ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
์๋ณธ ์ฝ๋:
function calculateRectangleArea(rectangleLength, rectangleWidth) { var calculatedArea = rectangleLength * rectangleWidth; return calculatedArea; }
์ถ์๋ ์ฝ๋:
function a(b,c){var d=b*c;return d;}
๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ (ํธ๋ฆฌ ์์ดํน)
ํธ๋ฆฌ ์์ดํน(Tree shaking)์ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ๋ ๋ ์ ๊ตํ ๊ธฐ์ ์ ๋๋ค. ์ด๋ Webpack์ด๋ Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ก ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋ ํนํ ํจ๊ณผ์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง ํน์ ํจ์ ๋ช ๊ฐ๋ง ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ, ํธ๋ฆฌ ์์ดํน์ ์ต์ข ๋ฒ๋ค์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ ๊ฑฐํฉ๋๋ค. ์ต์ ๋ฒ๋ค๋ฌ๋ ์ง๋ฅ์ ์ผ๋ก ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ๊ณ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์ ๋๊ตฌ
์ฝ๋ ์ถ์ ๊ณผ์ ์ ์๋ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ํ๋ฅญํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ช ๋ น์ค ์ ํธ๋ฆฌํฐ๋ถํฐ ์ธ๊ธฐ ์๋ ๋น๋ ์์คํ ์ฉ ํ๋ฌ๊ทธ์ธ๊น์ง ๋ค์ํฉ๋๋ค:
Terser
Terser๋ ES6+ ์ฝ๋๋ฅผ ์ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์, ๋งน๊ธ๋ฌ ๋ฐ ์์ถ๊ธฐ ํดํท์ ๋๋ค. ์ข ์ข UglifyJS์ ํ์ ์ ํ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ, ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ๊ณผ ๊ตฌ๋ฌธ์ ๋ํ ๋ ๋์ ์ง์์ ์ ๊ณตํฉ๋๋ค. Terser๋ ๋ช ๋ น์ค ๋๊ตฌ, Node.js ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ Webpack ๋ฐ Rollup๊ณผ ๊ฐ์ ๋น๋ ์์คํ ์ ํตํฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์น:
npm install -g terser
์ฌ์ฉ๋ฒ (๋ช ๋ น์ค):
terser input.js -o output.min.js
UglifyJS
UglifyJS๋ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์, ์ถ์๊ธฐ, ์์ถ๊ธฐ ๋ฐ ๋ฏธํ๊ธฐ ํดํท์ ๋๋ค. ES6+ ์ง์ ๋ฉด์์ Terser์ ๋ค์ ๋ฐ๋ ธ์ง๋ง, ์ค๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฒ ์ด์ค์๋ ์ฌ์ ํ ์คํ ๊ฐ๋ฅํ ์ต์ ์ ๋๋ค. ํ์ฑ, ๋งน๊ธ๋ง, ์์ถ์ ํฌํจํ์ฌ Terser์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ค์น:
npm install -g uglify-js
์ฌ์ฉ๋ฒ (๋ช ๋ น์ค):
uglifyjs input.js -o output.min.js
Webpack
Webpack์ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ๋ก ํธ์๋ ์์ (HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ)์ ๋ณํํ ์ ์๋ ๊ฐ๋ ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. `TerserWebpackPlugin` ๋ฐ `UglifyJsPlugin`๊ณผ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ํตํด ์ถ์๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. Webpack์ ์ฝ๋ ๋ถํ , ์ง์ฐ ๋ก๋ฉ, ํซ ๋ชจ๋ ๊ต์ฒด์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์ค์ (webpack.config.js):
const TerserWebpackPlugin = require('terser-webpack-plugin'); module.exports = { // ... ๋ค๋ฅธ ์นํฉ ์ค์ optimization: { minimize: true, minimizer: [ new TerserWebpackPlugin(), ], }, };
Rollup
Rollup์ ์์ ์ฝ๋ ์กฐ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ๋ ํฌ๊ณ ๋ณต์กํ ๊ฒ์ผ๋ก ์ปดํ์ผํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ฉ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํนํ ํธ๋ฆฌ ์์ดํน๊ณผ ๊ฒฐํฉํ์ ๋ ๊ณ ๋๋ก ์ต์ ํ๋ ๋ฒ๋ค์ ์์ฑํ๋ ๋ฅ๋ ฅ์ผ๋ก ์ ๋ช ํฉ๋๋ค. Rollup์ ๋ํ ์ถ์๋ฅผ ์ํด Terser์ ํตํฉํ ์ ์์ต๋๋ค.
์ค์ (rollup.config.js):
import { terser } from 'rollup-plugin-terser'; export default { input: 'src/main.js', output: { file: 'dist/bundle.min.js', format: 'iife', }, plugins: [ terser(), ], };
Parcel
Parcel์ ์ค์ ์ด ํ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฒ๋ค๋ฌ์ ๋๋ค. ์ฌ์ฉ์ด ๋งค์ฐ ์ฝ๋๋ก ์ค๊ณ๋์ด ์ฝ๋๋ฅผ ๋ฒ๋ค๋งํ๊ณ ์ต์ ํํ๋ ๋ฐ ์ต์ํ์ ์ค์ ๋ง ํ์ํฉ๋๋ค. Parcel์ ์ฝ๋ ์ถ์, ํธ๋ฆฌ ์์ดํน, ์์ ์ต์ ํ์ ๊ฐ์ ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์์ ํ๋ก์ ํธ๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ ํธํ๋ ๊ฐ๋ฐ์์๊ฒ ํ๋ฅญํ ์ ํ์ ๋๋ค.
์ฌ์ฉ๋ฒ (๋ช ๋ น์ค):
parcel build src/index.html
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ถ์๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ฝ๋๊ฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์ ์ง๋๊ณ ์ ์ง๋ณด์๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
ํญ์ ํ๋ก๋์ ํ๊ฒฝ์์๋ง ์ถ์ํ๊ธฐ
๊ฐ๋ฐ ์ค์๋ ์ฝ๋๋ฅผ ์ถ์ํ์ง ๋ง์ธ์. ์ถ์๋ ์ฝ๋๋ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก, ํ๋ก๋์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ ๋๋ง ์ฝ๋๋ฅผ ์ถ์ํด์ผ ํฉ๋๋ค. ๊ฐ๋ฐ ๋ชฉ์ ์ผ๋ก๋ ๊ฐ๋ ์ฑ ์๊ณ ์ฃผ์์ด ์ ๋ฌ๋ฆฐ ๋ฒ์ ์ ์ฝ๋๋ฅผ ์ ์งํ์ธ์.
์์ค๋งต ์ฌ์ฉํ๊ธฐ
์์ค๋งต์ ์ถ์๋ ์ฝ๋๋ฅผ ์๋ณธ์ ์ถ์๋์ง ์์ ์์ค ์ฝ๋๋ก ๋ค์ ๋งคํํ๋ ํ์ผ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ง์น ์ถ์๋์ง ์์ ๊ฒ์ฒ๋ผ ํ๋ก๋์ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์ถ์ ๋๊ตฌ๋ ์์ค๋งต ์์ฑ์ ์ง์ํฉ๋๋ค. ๋๋ฒ๊น ์ ๋จ์ํํ๊ธฐ ์ํด ๋น๋ ํ๋ก์ธ์ค์์ ์์ค๋งต ์์ฑ์ ํ์ฑํํ์ธ์.
์ถ์ ๊ณผ์ ์๋ํํ๊ธฐ
Webpack, Rollup ๋๋ Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์ถ์๋ฅผ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ ๋๋ง๋ค ์ฝ๋๊ฐ ์๋์ผ๋ก ์ถ์๋ฉ๋๋ค. ์๋ํ๋ ์ธ์ ์ค๋ฅ์ ์ํ์ ์ค์ด๊ณ ๋น๋ ๊ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ถ์๋ ์ฝ๋ ์ฒ ์ ํ ํ ์คํธํ๊ธฐ
์ฝ๋๋ฅผ ์ถ์ํ ํ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ธ์. ์ถ์ ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ขฐํ ์ ์์ง๋ง, ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ ํญ์ ์์ต๋๋ค. ์๋ํ๋ ํ ์คํธ๋ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
Gzip ์์ถ ๊ณ ๋ คํ๊ธฐ
์ถ์ ์ธ์๋ Gzip ์์ถ์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ด๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. Gzip์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ ํฌ๊ฒ ์ค์ผ ์ ์๋ ๋ฐ์ดํฐ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋๋ถ๋ถ์ ์น ์๋ฒ๋ Gzip ์์ถ์ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ง์ CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ)๋ Gzip ์์ถ์ ํ์ค ๊ธฐ๋ฅ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
์ฑ๋ฅ ๋ชจ๋ํฐ๋งํ๊ธฐ
์ถ์๋ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ํ์๋ Google PageSpeed Insights๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ธ์. ์ด๋ฌํ ๋๊ตฌ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์น์ฌ์ดํธ๋ฅผ ๋์ฑ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ์ ๊ธฐ์ ์ผ๋ก ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ธ์.
์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฃผ์ํ๊ธฐ
์๋ํํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋, ์ผ๋ถ๋ ์ด๋ฏธ ์ถ์๋์ด ์์ ์ ์๋ค๋ ์ ์ ์ธ์งํ์ธ์. ์ด๋ฏธ ์ถ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ ์ถ์ํ๋ ๊ฒ์ ๋๋๋ก ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฏธ ์ถ์๋์๋์ง ํ์ธํ๋ ค๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์๋ ์ฑ๋ฅ์ ์ํด ํ๋ก๋์ ๋น๋๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์์ผ๋ก์จ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ฌ ๋ค์ด๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ฉฐ SEO๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. Terser, UglifyJS, Webpack, Rollup, Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์น์ด ๊ณ์ ๋ฐ์ ํ๊ณ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์น์ฌ์ดํธ์ ๋ํ ์๊ตฌ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ถ์๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ๊ณ์ํด์ ์ค์ํ ๊ธฐ์ ๋ก ๋จ์ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํจ์ผ๋ก์จ ์ฌ์ฉ์์ ์์น๋ ์ฅ์น์ ๊ด๊ณ์์ด ์น์ฌ์ดํธ๊ฐ ํญ์ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ต์ ํ๋๋๋ก ํ ์ ์์ต๋๋ค.