์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋. ๋ ๋น ๋ฅธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ฑ๋ฅ ์ธก์ ๊ธฐ๋ฒ, ๋ถ์ ๋๊ตฌ, ์ต์ ํ ์ ๋ต์ ํฌํจํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ: ์ฑ๋ฅ ์ธก์ ๋ฐ ๊ฐ์
ํ๋ ์น ๊ฐ๋ฐ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์์ ๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์ต์ ํํ๋ ๊ฒ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ธ์์๋ ํ์์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ดํด๋ณด๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ธก์ , ๋ถ์, ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์๊ท๋ชจ ๋ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ ๋ชจ๋์ ์ ์ฉํ ์ ์๋ ๊ด๋ฒ์ํ ๊ธฐ์ ์ ๋ค๋ฃจ์ด ์ ์ธ๊ณ์ ์ธ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ธก์ ํด์ผ ํ๋๊ฐ?
๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ดํดํ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์๋ณ: ๋ก๋ฉ ์๊ฐ์ ๋ฆ์ถ๊ฑฐ๋ ๊ณผ๋ํ ๋ฆฌ์์ค๋ฅผ ์๋นํ๋ ๋ชจ๋์ ์ ํํ ์ฐพ์๋ ๋๋ค.
- ์ฝ๋ ์ต์ ํ: ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ๋ก๋ฉ ํจ์จ์ฑ์ ๊ฐ์ ํ๋ฉฐ, ์์กด์ฑ์ ์ต์ํํ ๊ธฐํ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ๋ ๋น ๋ฅด๊ณ , ๋ถ๋๋ฌ์ฐ๋ฉฐ, ๋ฐ์์ฑ์ด ์ข์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์: ๋ชจ๋ ์์กด์ฑ๊ณผ ๋ณต์ก์ฑ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ด ์ฝ๋ ๋ฆฌํฉํ ๋ง ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ : ์ถ์ธก์์ ๋ฒ์ด๋ ๊ฒ์ฆ ๊ฐ๋ฅํ ์ฌ์ค์ ๋ฐํ์ผ๋ก ์ฑ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ ํฉ๋๋ค.
์ ์ธ๊ณ ๋ค์ํ ์ง์ญ์์ ์น ์ฑ๋ฅ์ ๋ํ ์ฌ์ฉ์ ๊ธฐ๋์น๋ ๊ณ์ ๋์์ง๊ณ ์์ต๋๋ค. ๋ถ๋ฏธ์์ ์ ๋ฝ, ์์์, ๋จ๋ฏธ์ ์ด๋ฅด๊ธฐ๊น์ง ์ฌ์ฉ์๋ค์ ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋์น๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ๋ฉด ์ฌ์ฉ์์ ๋ถ๋ง๊ณผ ์ดํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ฃผ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ
๋ค์์ ์ถ์ ํ๊ณ ๋ถ์ํด์ผ ํ ํ์ ๋ฉํธ๋ฆญ์ ๋ํ ์ค๋ช ์ ๋๋ค:
1. ๋ชจ๋ ํฌ๊ธฐ
์ ์: ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ด ํฌ๊ธฐ๋ก, ์ผ๋ฐ์ ์ผ๋ก ํฌ๋ก๋ฐ์ดํธ(KB) ๋๋ ๋ฉ๊ฐ๋ฐ์ดํธ(MB) ๋จ์๋ก ์ธก์ ๋ฉ๋๋ค.
์ํฅ: ๋ชจ๋์ด ํด์๋ก ๋ค์ด๋ก๋ ๋ฐ ํ์ฑํ๋ ๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ ค ํ์ด์ง ๋ก๋ ์๊ฐ์ด ์ฆ๊ฐํ๋ ์์ธ์ด ๋ฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ๋์๊ตญ์ ๋ง์ ์ง์ญ์์ ํํ ๋ณผ ์ ์๋ ๋๋ฆฐ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ค์ํฉ๋๋ค.
์ธก์ ๊ธฐ๋ฒ:
- Webpack Bundle Analyzer: ์นํฉ ๋ฒ๋ค ๋ด ๋ชจ๋์ ํฌ๊ธฐ๋ฅผ ์๊ฐํํ๋ ์ธ๊ธฐ ์๋ ๋๊ตฌ์ ๋๋ค.
- Rollup Visualizer: Webpack Bundle Analyzer์ ์ ์ฌํ์ง๋ง Rollup์ฉ์ ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ๋คํธ์ํฌ ํจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
- ๋ช ๋ น์ค ๋๊ตฌ: ๋ฒ๋ค๋ ํ์ผ์ ๋ํด `ls -l`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํฉ๋๋ค.
์์: Webpack Bundle Analyzer๋ฅผ ์ฌ์ฉํ๋ฉด Moment.js์ ๊ฐ์ ๋๊ท๋ชจ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๊ณ ์์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ๋ ์๊ณ ๋ชจ๋ํ๋ ํจ์๋ฅผ ์ ๊ณตํ๋ date-fns์ ๊ฐ์ ๋์์ ๊ณ ๋ คํด ๋ณด์ธ์.
์ต์ ํ ์ ๋ต:
- ์ฝ๋ ๋ถํ (Code Splitting): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ๋ก ๋๋์ด ํ์ํ ๋ ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน(Tree Shaking): ๋น๋ ๊ณผ์ ์์ ๋ชจ๋์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์์ถ(Minification): ๊ณต๋ฐฑ, ์ฃผ์์ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์ฌ ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- Gzip/Brotli ์์ถ: ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ณด๋ด๊ธฐ ์ ์ ์์ถํฉ๋๋ค.
- ๋ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ: ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์๊ณ ์ง์ค๋ ๋์์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
2. ๋ชจ๋ ๋ก๋ ์๊ฐ
์ ์: ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ด ๋ธ๋ผ์ฐ์ ์ ์ํด ๋ค์ด๋ก๋๋๊ณ ์คํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
์ํฅ: ๋ชจ๋ ๋ก๋ ์๊ฐ์ด ๊ธธ๋ฉด ํ์ด์ง ๋ ๋๋ง์ด ์ง์ฐ๋๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ํธ์์ฉ๊น์ง์ ์๊ฐ(TTI)์ ์ข ์ข ๋๋ฆฐ ๋ชจ๋ ๋ก๋ฉ์ ์ํฅ์ ๋ฐ์ต๋๋ค.
์ธก์ ๊ธฐ๋ฒ:
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ๋คํธ์ํฌ ํจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ฉ ์๊ฐ์ ์ถ์ ํฉ๋๋ค.
- WebPageTest: ๋ชจ๋ ๋ก๋ ์๊ฐ์ ํฌํจํ์ฌ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ฐ๋ ฅํ ์จ๋ผ์ธ ๋๊ตฌ์ ๋๋ค.
- Lighthouse: ์น์ฌ์ดํธ ์ฑ๋ฅ, ์ ๊ทผ์ฑ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ์๋ํ๋ ๋๊ตฌ์ ๋๋ค.
- ์ค์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง(RUM): RUM ์๋ฃจ์ ์ ๊ตฌํํ์ฌ ๋ค๋ฅธ ์์น์ ๋ค๋ฅธ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ์ค์ ์ฌ์ฉ์์ ๋ชจ๋ ๋ก๋ ์๊ฐ์ ์ถ์ ํฉ๋๋ค.
์์: WebPageTest๋ฅผ ์ฌ์ฉํ๋ฉด ์์์์ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)์์ ๋ก๋๋ ๋ชจ๋์ด ๋ถ๋ฏธ์ CDN์์ ๋ก๋๋ ๋ชจ๋์ ๋นํด ๋ก๋ ์๊ฐ์ด ํจ์ฌ ๋ ๊ธธ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ CDN ๊ตฌ์ฑ์ ์ต์ ํํ๊ฑฐ๋ ๋ ๋์ ๊ธ๋ก๋ฒ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ง CDN์ ์ ํํด์ผ ํจ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ต์ ํ ์ ๋ต:
- ์ฝ๋ ๋ถํ (Code Splitting): ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ํ์ด์ง๋ ์น์ ์ ํ์ํ ๋ชจ๋๋ง ๋ก๋ํฉ๋๋ค.
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading): ์ค์ํ์ง ์์ ๋ชจ๋์ ๋ก๋ฉ์ ํ์ํ ๋๊น์ง ์ง์ฐ์ํต๋๋ค.
- ์ฌ์ ๋ก๋ฉ(Preloading): ํ์ด์ง ๋ผ์ดํ์ฌ์ดํด ์ด๊ธฐ์ ์ค์ํ ๋ชจ๋์ ๋ก๋ํ์ฌ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- HTTP/2: HTTP/2๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํฐํ๋ ์ฑ ๋ฐ ํค๋ ์์ถ์ ํ์ฑํํ์ฌ ์ฌ๋ฌ ์์ฒญ์ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- CDN: ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ฐฐํฌํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค.
3. ๋ชจ๋ ์์กด์ฑ
์ ์: ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ํด ๊ฐ๋ ์์กด์ฑ์ ์์ ๋ณต์ก์ฑ์ ๋๋ค.
์ํฅ: ์์กด์ฑ์ด ๋ง์ ๋ชจ๋์ ์ดํด, ์ ์ง๋ณด์ ๋ฐ ํ ์คํธ๊ฐ ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ํ ๋ฒ๋ค ํฌ๊ธฐ ์ฆ๊ฐ์ ๋ก๋ ์๊ฐ ์ฐ์ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์์กด์ฑ ์ํ(์ํ ์์กด์ฑ) ๋ํ ์๊ธฐ์น ์์ ๋์๊ณผ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
์ธก์ ๊ธฐ๋ฒ:
- ์์กด์ฑ ๊ทธ๋ํ ๋๊ตฌ: madge, depcheck ๋๋ Webpack์ ์์กด์ฑ ๊ทธ๋ํ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์กด์ฑ์ ์๊ฐํํฉ๋๋ค.
- ์ฝ๋ ๋ถ์ ๋๊ตฌ: ESLint ๋๋ JSHint์ ๊ฐ์ ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์์กด์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค.
- ์๋ ์ฝ๋ ๊ฒํ : ์ฝ๋๋ฅผ ์ ์คํ๊ฒ ๊ฒํ ํ์ฌ ๋ถํ์ํ๊ฑฐ๋ ์ง๋์น๊ฒ ๋ณต์กํ ์์กด์ฑ์ ์๋ณํฉ๋๋ค.
์์: ์์กด์ฑ ๊ทธ๋ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ชจ๋์ด ๋จ์ผ ํจ์์๋ง ์ฌ์ฉ๋๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๊ณ ์์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์์กด์ฑ์ ํผํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ํด๋น ํจ์๋ฅผ ๋ณ๋์ ๋ ์์ ๋ชจ๋๋ก ์ถ์ถํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
์ต์ ํ ์ ๋ต:
- ์์กด์ฑ ์ค์ด๊ธฐ: ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ๋์ฒด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
- ๋ชจ๋ํ: ํฐ ๋ชจ๋์ ๋ ์๊ณ ์ง์ค๋, ์์กด์ฑ์ด ์ ์ ๋ชจ๋๋ก ๋๋๋๋ค.
- ์์กด์ฑ ์ฃผ์ (Dependency Injection): ์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๋ถ๋ฆฌํ๊ณ ํ ์คํธ ์ฉ์ด์ฑ์ ๋์ ๋๋ค.
- ์ํ ์์กด์ฑ ๋ฐฉ์ง: ์๊ธฐ์น ์์ ๋์๊ณผ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ํ ์์กด์ฑ์ ์๋ณํ๊ณ ์ ๊ฑฐํฉ๋๋ค.
4. ๋ชจ๋ ์คํ ์๊ฐ
์ ์: ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ด ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
์ํฅ: ๋ชจ๋ ์คํ ์๊ฐ์ด ๊ธธ๋ฉด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋ฐ์ํ์ง ์๋ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค.
์ธก์ ๊ธฐ๋ฒ:
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ์ฑ๋ฅ ํจ๋์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค.
- console.time() ๋ฐ console.timeEnd(): ํน์ ์ฝ๋ ๋ธ๋ก์ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ์ด ํจ์๋ค์ ์ฌ์ฉํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ: New Relic ๋๋ Sentry์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ชจ๋ ์คํ ์๊ฐ์ ์ถ์ ํฉ๋๋ค.
์์: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ฑ๋ฅ ํจ๋์ ์ฌ์ฉํ๋ฉด ํ ๋ชจ๋์ด ๋ณต์กํ ๊ณ์ฐ์ ์ํํ๊ฑฐ๋ DOM์ ์กฐ์ํ๋ ๋ฐ ์๋นํ ์๊ฐ์ ์๋นํ๊ณ ์์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ์ต์ ํํ๊ฑฐ๋ ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํจ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ต์ ํ ์ ๋ต:
- ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ: ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ ๋๋ค.
- DOM ์กฐ์ ์ต์ํ: ์ผ๊ด ์ ๋ฐ์ดํธ๋ ๊ฐ์ DOM๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ DOM ์กฐ์ ํ์๋ฅผ ์ค์ ๋๋ค.
- ์น ์์ปค(Web Workers): ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์น ์์ปค์ ์์ํ์ฌ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ์ ๋ฐฉ์งํฉ๋๋ค.
- ์บ์ฑ: ์์ฃผ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ํผํฉ๋๋ค.
5. ์ฝ๋ ๋ณต์ก๋
์ ์: ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ธก์ ํ๋ ์ฒ๋๋ก, ์ข ์ข ์ํ ๋ณต์ก๋(Cyclomatic Complexity)๋ ์ธ์ง ๋ณต์ก๋(Cognitive Complexity)์ ๊ฐ์ ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ์ฌ ํ๊ฐ๋ฉ๋๋ค.
์ํฅ: ๋ณต์กํ ์ฝ๋๋ ์ดํด, ์ ์ง๋ณด์ ๋ฐ ํ ์คํธ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. ๋ํ ์ค๋ฅ ๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์ธก์ ๊ธฐ๋ฒ:
- ์ฝ๋ ๋ถ์ ๋๊ตฌ: ๋ณต์ก๋ ๊ท์น์ด ์๋ ESLint๋ SonarQube์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ณต์ก๋๋ฅผ ์ธก์ ํฉ๋๋ค.
- ์๋ ์ฝ๋ ๊ฒํ : ์ฝ๋๋ฅผ ์ ์คํ๊ฒ ๊ฒํ ํ์ฌ ๋ณต์ก์ฑ์ด ๋์ ์์ญ์ ์๋ณํฉ๋๋ค.
์์: ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ๋ชจ๋์ด ๋ง์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฃจํ๋ก ์ธํด ๋์ ์ํ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํจ์๋ ํด๋์ค๋ก ๋ฆฌํฉํ ๋งํด์ผ ํจ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ต์ ํ ์ ๋ต:
- ์ฝ๋ ๋ฆฌํฉํ ๋ง: ๋ณต์กํ ํจ์๋ฅผ ๋ ์๊ณ ์ง์ค๋ ํจ์๋ก ๋๋๋๋ค.
- ๋ก์ง ๋จ์ํ: ๋ ๊ฐ๋จํ ๋ก์ง์ ์ฌ์ฉํ๊ณ ๋ถํ์ํ ๋ณต์ก์ฑ์ ํผํฉ๋๋ค.
- ๋์์ธ ํจํด ์ฌ์ฉ: ์ ์ ํ ๋์์ธ ํจํด์ ์ ์ฉํ์ฌ ์ฝ๋ ๊ตฌ์กฐ์ ๊ฐ๋ ์ฑ์ ํฅ์์ํต๋๋ค.
- ๋จ์ ํ ์คํธ ์์ฑ: ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ณ ํ๊ท๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ ์ธก์ ์ ์ํ ๋๊ตฌ
๋ค์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ธก์ ํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ ๋ชฉ๋ก์ ๋๋ค:
- Webpack Bundle Analyzer: ์นํฉ ๋ฒ๋ค ๋ด ๋ชจ๋์ ํฌ๊ธฐ๋ฅผ ์๊ฐํํฉ๋๋ค.
- Rollup Visualizer: Webpack Bundle Analyzer์ ์ ์ฌํ์ง๋ง Rollup์ฉ์ ๋๋ค.
- Lighthouse: ์น์ฌ์ดํธ ์ฑ๋ฅ, ์ ๊ทผ์ฑ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ์๋ํ๋ ๋๊ตฌ์ ๋๋ค.
- WebPageTest: ๋ชจ๋ ๋ก๋ ์๊ฐ์ ํฌํจํ์ฌ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ฐ๋ ฅํ ์จ๋ผ์ธ ๋๊ตฌ์ ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋ฐ ๋คํธ์ํฌ ๋ถ์์ ํฌํจํ์ฌ ์น ํ์ด์ง๋ฅผ ๊ฒ์ฌํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ํ ๋๊ตฌ ๋ชจ์์ ๋๋ค.
- madge: ๋ชจ๋ ์์กด์ฑ์ ์๊ฐํํ๋ ๋๊ตฌ์ ๋๋ค.
- depcheck: ์ฌ์ฉ๋์ง ์๋ ์์กด์ฑ์ ์๋ณํ๋ ๋๊ตฌ์ ๋๋ค.
- ESLint: ์ ์ฌ์ ์ธ ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค.
- SonarQube: ์ฝ๋ ํ์ง์ ์ง์์ ์ผ๋ก ๊ฒ์ฌํ๋ ํ๋ซํผ์ ๋๋ค.
- New Relic: ํ๋ก๋์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ถ์ ํ๋ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ ๋๋ค.
- Sentry: ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํ ์ค๋ฅ ์ถ์ ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ ๋๋ค.
- date-fns: ๋ ์ง ์กฐ์์ ์ํ Moment.js์ ๋ชจ๋ํ๋๊ณ ๊ฐ๋ฒผ์ด ๋์์ ๋๋ค.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ๋ก ์ฐ๊ตฌ
์ฌ๋ก 1: ๋๊ท๋ชจ ์ด์ปค๋จธ์ค ์น์ฌ์ดํธ ์ต์ ํ
ํ ๋๊ท๋ชจ ์ด์ปค๋จธ์ค ์น์ฌ์ดํธ๋ ๋๋ฆฐ ํ์ด์ง ๋ก๋ ์๊ฐ์ผ๋ก ์ธํด ์ฌ์ฉ์์ ๋ถ๋ง๊ณผ ์ฅ๋ฐ๊ตฌ๋ ํฌ๊ธฐ๊ฐ ๋ฐ์ํ์ต๋๋ค. Webpack Bundle Analyzer๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ์กฐ์์ ์ํ ๋๊ท๋ชจ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๊ณ ์์์ ํ์ธํ์ต๋๋ค. ๊ทธ๋ค์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์๊ณ ์ง์ค๋ ๋์์ผ๋ก ๊ต์ฒดํ๊ณ , ๊ฐ ํ์ด์ง์ ํ์ํ ๋ชจ๋๋ง ๋ก๋ํ๋๋ก ์ฝ๋ ๋ถํ ์ ๊ตฌํํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ํ์ด์ง ๋ก๋ ์๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋์๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋์ ๋๊ฒ ๊ฐ์ ๋์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ์ฌํญ์ ํจ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ๊ธ๋ก๋ฒ ์ง์ญ์์ ํ ์คํธ๋๊ณ ๊ฒ์ฆ๋์์ต๋๋ค.
์ฌ๋ก 2: ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๊ฐ์
ํ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์ ๊ธด ๋ชจ๋ ์คํ ์๊ฐ์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ฑ๋ฅ ํจ๋์ ์ฌ์ฉํ์ฌ ํ ๋ชจ๋์ด ๋ณต์กํ ๊ณ์ฐ์ ์ํํ๋ ๋ฐ ์๋นํ ์๊ฐ์ ์๋นํ๊ณ ์์์ ํ์ธํ์ต๋๋ค. ๊ทธ๋ค์ ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์์ฃผ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ฌ ์ฝ๋๋ฅผ ์ต์ ํํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ ์คํ ์๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋์๊ณ ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ์ข์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๋ค์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- ์ฝ๋ ๋ถํ ์ฐ์ ์์ ์ง์ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ๋ก ๋๋์ด ํ์ํ ๋ ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน ์ ๊ทน ํ์ฉ: ๋น๋ ๊ณผ์ ์์ ๋ชจ๋์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์์กด์ฑ ์ต์ ํ: ๋ชจ๋์ ์์กด์ฑ ์์ ๋ณต์ก์ฑ์ ์ค์ ๋๋ค.
- ์ ๊ธฐ์ ์ธ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ถ์ ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค.
- ์ต์ ์ํ ์ ์ง: ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ฌ ์ต์ ์ฑ๋ฅ ๊ฐ์ ์ฌํญ์ ํ์ฉํฉ๋๋ค.
- ์ค์ ๊ธฐ๊ธฐ ๋ฐ ๋คํธ์ํฌ์์ ํ ์คํธ: ํ๊ฒ ์์ฅ์์ ์ผ๋ฐ์ ์ธ ๋ค์ํ ๊ธฐ๊ธฐ ๋ฐ ๋คํธ์ํฌ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ฌ ์ค์ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ์ธก์ ํ๊ณ ์ต์ ํํ๋ ๊ฒ์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ์ข์ผ๋ฉฐ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ด ๊ธ์์ ๋ ผ์๋ ์ฃผ์ ๋ฉํธ๋ฆญ์ ์ดํดํ๊ณ ์ค๋ช ๋ ์ต์ ํ ์ ๋ต์ ์ ์ฉํจ์ผ๋ก์จ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ๋ชจ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ์ค์ ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ฌํญ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํจ๊ณผ์ ์ธ์ง ํ์ธํ์ธ์. ์ด๋ฌํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์์ ์์น์ ๊ด๊ณ์์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต์ ์ผ๋ก ์๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.