๋ชจ๋ ํ๋กํ์ผ๋ง์ ๋ฐฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ์ ๋ง์คํฐํ์ธ์. Webpack Bundle Analyzer์ Chrome DevTools ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ์ ๋ฐํ์ ์คํ์ ๋ถ์ํ๋ ์๋ฒฝ ๊ฐ์ด๋์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง: ์ฑ๋ฅ ๋ถ์ ์ฌ์ธต ํ๊ตฌ
ํ๋ ์น ๊ฐ๋ฐ์ ์ธ๊ณ์์ ์ฑ๋ฅ์ ๋จ์ํ ๊ธฐ๋ฅ์ด ์๋๋ผ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํ ๊ธฐ๋ณธ ์๊ตฌ ์ฌํญ์ ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ ๊ณ ์ฌ์ ๋ฐ์คํฌํฑ๋ถํฐ ์ ์ ๋ ฅ ํด๋ํฐ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ๊ธฐ๊ธฐ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ์ข๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ์๋ฐฑ ๋ฐ๋ฆฌ์ด์ ์ง์ฐ์ด ์ ํ๊ณผ ๊ณ ๊ฐ ์ดํ์ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฐฑ, ์์ฒ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋๋ก ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋์ฑ์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์๋ ํ๋ฅญํ์ง๋ง, ์ด ๋ง์ ์กฐ๊ฐ ์ค ์ด๋ค ๊ฒ์ด ์ ์ฒด ์์คํ ์ ๋๋ฆฌ๊ฒ ํ๋์ง ์๋ณํด์ผ ํ๋ ์ค์ํ ๊ณผ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ด ํ์ํฉ๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ ๊ฐ๋ณ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ฑ๋ฅ ํน์ฑ์ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์ํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ "์ฑ์ด ๋๋ฆฌ๋ค"๋ ๋ง์ฐํ ๋๋์ ๋์ด "`data-visualization` ๋ชจ๋์ด ์ด๊ธฐ ๋ฒ๋ค์ 500KB๋ฅผ ์ถ๊ฐํ๊ณ ์ด๊ธฐํ ์ค์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ 200ms ๋์ ์ฐจ๋จํ๊ณ ์๋ค"์ ๊ฐ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ํต์ฐฐ๋ ฅ์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๋ ๋ฐ ํ์ํ ๋๊ตฌ, ๊ธฐ์ ๋ฐ ์ฌ๊ณ ๋ฐฉ์์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ค ๊ฒ์ ๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ด ์ค์ํ ์ด์
๋นํจ์จ์ ์ธ ๋ชจ๋์ ์ํฅ์ ์ข ์ข "์ฒ ๊ฐ์ ์์ฒ์ ์ํ ์ฃฝ์"๊ณผ ๊ฐ์ต๋๋ค. ์ฑ๋ฅ์ด ๋์ ๋จ์ผ ๋ชจ๋์ ๋์ ๋์ง ์์ ์ ์์ง๋ง, ์์ญ ๊ฐ์ ๋ชจ๋์ด ๋์ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋น์ํฌ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ ์ค์ํ์ง ์ดํดํ๋ ๊ฒ์ด ์ต์ ํ๋ฅผ ํฅํ ์ฒซ๊ฑธ์์ ๋๋ค.
์ฝ์ด ์น ๋ฐ์ดํ(CWV)์ ๋ฏธ์น๋ ์ํฅ
Google์ ์ฝ์ด ์น ๋ฐ์ดํ์ ๋ก๋ฉ ์ฑ๋ฅ, ์ํธ์์ฉ์ฑ ๋ฐ ์๊ฐ์ ์์ ์ฑ์ ๋ํ ์ค์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ธก์ ํ๋ ์ผ๋ จ์ ์งํ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ด๋ฌํ ์งํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ต๋ ์ฝํ ์ธ ํ ํ์ธํธ(LCP): ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์ค์ํ ์ฝํ ์ธ ์ ๋ ๋๋ง์ ์ง์ฐ์ํค๊ณ LCP์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ๋ค์ ํ์ธํธ์ ๋ํ ์ํธ์์ฉ(INP): ์ด ์งํ๋ ๋ฐ์์ฑ์ ์ธก์ ํฉ๋๋ค. ๊ธด ์์ ์ ์คํํ๋ CPU ์ง์ฝ์ ์ธ ๋ชจ๋์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋ฆญ์ด๋ ํค ์ ๋ ฅ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ตํ๋ ๊ฒ์ ๋ง์ ๋์ INP๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ๋์ ๋ ์ด์์ ์ด๋(CLS): ๊ณต๊ฐ์ ์์ฝํ์ง ์๊ณ DOM์ ์กฐ์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๊ธฐ์น ์์ ๋ ์ด์์ ์ด๋์ ์ผ์ผ์ผ CLS ์ ์๋ฅผ ํด์น ์ ์์ต๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ์ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ
๊ฐ์ ธ์ค๋ ๋ชจ๋ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ข ๋ฒ๋ค ํฌ๊ธฐ์ ์ถ๊ฐ๋ฉ๋๋ค. ๊ณ ์ ๊ด์ฌ์ ์ธํฐ๋ท์ด ์๋ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ๋ ์ถ๊ฐ 200KB๋ฅผ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ด ์ฌ์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ธ๊ณ ๋ค๋ฅธ ์ง์ญ์ ๋๋ฆฐ 3G ๋๋ 4G ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ๋ ๋์ผํ 200KB๊ฐ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๋ช ์ด๋ฅผ ๋ํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ๋กํ์ผ๋ง์ ๋ฒ๋ค ํฌ๊ธฐ์ ๊ฐ์ฅ ํฐ ๊ธฐ์ฌ๋ฅผ ํ๋ ์์๋ฅผ ์๋ณํ์ฌ ์์กด์ฑ์ ๊ฐ์น๊ฐ ๊ทธ ๋ฌด๊ฒ๋งํผ ์๋์ง ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
CPU ์คํ ๋น์ฉ
๋ชจ๋์ ์ฑ๋ฅ ๋น์ฉ์ ๋ค์ด๋ก๋๋ ํ์๋ ๋๋์ง ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ , ์ปดํ์ผํ๊ณ , ์คํํด์ผ ํฉ๋๋ค. ํ์ผ ํฌ๊ธฐ๊ฐ ์์ ๋ชจ๋์ด๋ผ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค์ด ์๋นํ CPU ์๊ฐ๊ณผ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์๋ชจํ ์ ์์ผ๋ฉฐ, ํนํ ๋ชจ๋ฐ์ผ ์ฅ์น์์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋์ ํ๋กํ์ผ๋ง์ ์ฌ์ฉ์ ์ํธ์์ฉ ์ค์ ๋๋ฆผ๊ณผ ๋ฒ๋ฒ ์์ ์ ๋ฐํ๋ ์ด๋ฌํ CPU ๋ถํ๊ฐ ํฐ ๋ชจ๋์ ์ ํํ ์ฐพ์๋ด๋ ๋ฐ ํ์์ ์ ๋๋ค.
์ฝ๋ ์ํ ๋ฐ ์ ์ง๋ณด์์ฑ
ํ๋กํ์ผ๋ง์ ์ข ์ข ์ฝ๋๋ฒ ์ด์ค์ ๋ฌธ์ ์์ญ์ ๋น์ ๋น์ถฅ๋๋ค. ์ง์์ ์ผ๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ๋ชจ๋์ ์ข์ง ์์ ์ํคํ ์ฒ ๊ฒฐ์ , ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ๋๋ ๋น๋ํ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์์กด์ ์ ํธ์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ์๋ณํ๋ ๊ฒ์ ์ด๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋, ๊ต์ฒดํ๊ฑฐ๋, ๋ ๋์ ๋์์ ์ฐพ๋ ์ฒซ๊ฑธ์์ด๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ํ๋ก์ ํธ์ ์ฅ๊ธฐ์ ์ธ ์ํ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ
ํจ๊ณผ์ ์ธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๋ฐ์ํ๋ ์ ์ ๋ถ์๊ณผ ์ฝ๋๊ฐ ์คํ๋๋ ๋์ ๋ฐ์ํ๋ ๋์ ๋ถ์์ ๋ ๊ฐ์ง ์ฃผ์ ๋ฒ์ฃผ๋ก ๋๋ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ 1: ์ ์ ๋ถ์ - ๋ฐฐํฌ ์ ๋ฒ๋ค ๋ถ์
์ ์ ๋ถ์์ ๋ธ๋ผ์ฐ์ ์์ ์ค์ ๋ก ์คํํ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค๋ ์ถ๋ ฅ์ ๊ฒ์ฌํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฃผ์ ๋ชฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๊ตฌ์ฑ๊ณผ ํฌ๊ธฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋๋ค.
ํต์ฌ ๋๊ตฌ: ๋ฒ๋ค ๋ถ์๊ธฐ
๋ฒ๋ค ๋ถ์๊ธฐ๋ ๋น๋ ์ถ๋ ฅ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ฒ๋ค์ ๊ฐ ๋ชจ๋ ๋ฐ ์์กด์ฑ ํฌ๊ธฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ํํ ์๊ฐํ(์ผ๋ฐ์ ์ผ๋ก ํธ๋ฆฌ๋งต)๋ฅผ ์์ฑํ๋ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฌด์์ด ๊ฐ์ฅ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๋์ง ํ๋์ ๋ณผ ์ ์์ต๋๋ค.
- Webpack Bundle Analyzer: Webpack์ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ ํ์ ๋๋ค. ๊ฐ ์ฌ๊ฐํ์ ๋ฉด์ ์ด ๋ชจ๋ ํฌ๊ธฐ์ ๋น๋กํ๋ ๋ช ํํ๊ณ ์์์ผ๋ก ๊ตฌ๋ถ๋ ํธ๋ฆฌ๋งต์ ์ ๊ณตํฉ๋๋ค. ๋ค๋ฅธ ์น์ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ๋ฉด ์์ ํ์ผ ํฌ๊ธฐ, ํ์ฑ๋ ํฌ๊ธฐ ๋ฐ gzipped ํฌ๊ธฐ๋ฅผ ๋ณผ ์ ์์ด ๋ชจ๋ ๋น์ฉ์ ๋ํ ์์ ํ ๊ทธ๋ฆผ์ ์ป์ ์ ์์ต๋๋ค.
- Rollup Plugin Visualizer: Rollup ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ ์ฌํ ๋๊ตฌ์ ๋๋ค. ๋ฒ๋ค ๊ตฌ์ฑ์ ์๊ฐํํ๋ HTML ํ์ผ์ ์์ฑํ์ฌ ํฐ ์์กด์ฑ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- Source Map Explorer: ์ด ๋๊ตฌ๋ ์์ค๋งต์ ์์ฑํ ์ ์๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํจ๊ป ์๋ํฉ๋๋ค. ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์์ค๋งต์ ์ฌ์ฉํ์ฌ ์๋ ์์ค ํ์ผ์ ๋ค์ ๋งคํํฉ๋๋ค. ์ด๋ ์๋ํํฐ ์์กด์ฑ๋ฟ๋ง ์๋๋ผ ์์ฒด ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ด ๋น๋ํ์ ๊ธฐ์ฌํ๋์ง ์๋ณํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ๋ฒ๋ค ๋ถ์๊ธฐ๋ฅผ ์ง์์ ํตํฉ(CI) ํ์ดํ๋ผ์ธ์ ํตํฉํ์ธ์. ํน์ ๋ฒ๋ค์ ํฌ๊ธฐ๊ฐ ํน์ ์๊ณ๊ฐ(์: 5%) ์ด์ ์ฆ๊ฐํ๋ฉด ์์ ์ด ์คํจํ๋๋ก ์ค์ ํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ ์๋ฐฉ์ ์ ๊ทผ ๋ฐฉ์์ ํฌ๊ธฐ ํ๊ท๊ฐ ํ๋ก๋์ ์ ๋๋ฌํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๊ธฐ๋ฅ 2: ๋์ ๋ถ์ - ๋ฐํ์ ํ๋กํ์ผ๋ง
์ ์ ๋ถ์์ ๋ฒ๋ค์ ๋ฌด์์ด ์๋์ง ์๋ ค์ฃผ์ง๋ง, ์ฝ๋๊ฐ ์คํ๋ ๋ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ ์๋ ค์ฃผ์ง ์์ต๋๋ค. ๋์ ๋ถ์์ ๋ธ๋ผ์ฐ์ ๋ Node.js ํ๋ก์ธ์ค์ ๊ฐ์ ์ค์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์ ์ด์ ์ CPU ์ฌ์ฉ๋, ์คํ ์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๋น์ ์์ต๋๋ค.
ํต์ฌ ๋๊ตฌ: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ (์ฑ๋ฅ ํญ)
Chrome, Firefox, Edge์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ ํญ์ ๋์ ๋ถ์์ ์ํ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๋คํธ์ํฌ ์์ฒญ์์ ๋ ๋๋ง ๋ฐ ์คํฌ๋ฆฝํธ ์คํ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ธ๋ผ์ฐ์ ๊ฐ ์ํํ๋ ๋ชจ๋ ์์ ์ ์์ธํ ํ์๋ผ์ธ์ ๊ธฐ๋กํ ์ ์์ต๋๋ค.
- ํ๋ ์ ์ฐจํธ: ์ด๊ฒ์ ์ฑ๋ฅ ํญ์ ์ค์ฌ ์๊ฐํ์ ๋๋ค. ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๋ฉ์ธ ์ค๋ ๋ ํ๋์ ๋ณด์ฌ์ค๋๋ค. "Main" ํธ๋์ ๊ธธ๊ณ ๋์ ๋ธ๋ก์ UI๋ฅผ ์ฐจ๋จํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํค๋ "๊ธด ์์ "์ ๋๋ค. ์ด๋ฌํ ์์ ์ ํ๋ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ถ ์คํ(์ด๋ค ํจ์๊ฐ ์ด๋ค ํจ์๋ฅผ ํธ์ถํ๋์ง ๋ณด์ฌ์ฃผ๋ ํํฅ์ ๋ทฐ)์ ๋ณผ ์ ์์ด ๋ณ๋ชฉ ํ์์ ์์ธ์ ํน์ ๋ชจ๋๋ก ์ถ์ ํ ์ ์์ต๋๋ค.
- Bottom-Up ๋ฐ Call Tree ํญ: ์ด ํญ๋ค์ ๋ นํ์์ ์ง๊ณ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. "Bottom-Up" ๋ทฐ๋ ๊ฐ๋ณ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฐ ํจ์๋ฅผ ๋์ดํ๋ฏ๋ก ํนํ ์ ์ฉํฉ๋๋ค. "Total Time"์ผ๋ก ์ ๋ ฌํ์ฌ ๋ นํ ๊ธฐ๊ฐ ๋์ ์ด๋ค ํจ์, ๊ทธ๋ฆฌ๊ณ ๋ ๋์๊ฐ ์ด๋ค ๋ชจ๋์ด ๊ฐ์ฅ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ธฐ๋ฒ: `performance.measure()`๋ฅผ ์ฌ์ฉํ ์ฌ์ฉ์ ์ง์ ์ฑ๋ฅ ๋งํฌ
ํ๋ ์ ์ฐจํธ๋ ์ผ๋ฐ์ ์ธ ๋ถ์์ ํ๋ฅญํ์ง๋ง, ๋๋ก๋ ๋งค์ฐ ํน์ ํ ์์ ์ ์ง์ ์๊ฐ์ ์ธก์ ํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ Performance API๋ ์ด๋ฅผ ์ํด ์๋ฒฝํฉ๋๋ค.
์ฌ์ฉ์ ์ง์ ํ์์คํฌํ(๋งํฌ)๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์ฌ์ด์ ์ง์ ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋ ์ด๊ธฐํ๋ ํน์ ๊ธฐ๋ฅ์ ์คํ์ ํ๋กํ์ผ๋งํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋์ ์ผ๋ก ๊ฐ์ ธ์จ ๋ชจ๋ ํ๋กํ์ผ๋ง ์์:
async function loadAndRunHeavyModule() {
performance.mark('heavy-module-start');
try {
const heavyModule = await import('./heavy-module.js');
heavyModule.doComplexCalculation();
} catch (error) {
console.error("Failed to load module", error);
} finally {
performance.mark('heavy-module-end');
performance.measure(
'Heavy Module Load and Execution',
'heavy-module-start',
'heavy-module-end'
);
}
}
์ฑ๋ฅ ํ๋กํ์ ๊ธฐ๋กํ๋ฉด ์ด ์ฌ์ฉ์ ์ง์ "Heavy Module Load and Execution" ์ธก์ ๊ฐ์ด "Timings" ํธ๋์ ๋ํ๋ ํด๋น ์์ ์ ๋ํ ์ ํํ๊ณ ๊ฒฉ๋ฆฌ๋ ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค.
Node.js์์์ ํ๋กํ์ผ๋ง
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ด๋ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Node.js์๋ V8 ์์ง์ผ๋ก ๊ตฌ๋๋๋ ๋ด์ฅ ํ๋กํ์ผ๋ฌ๊ฐ ์์ต๋๋ค. --prof
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด ๋ก๊ทธ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์ด ํ์ผ์ --prof-process
ํ๋๊ทธ๋ก ์ฒ๋ฆฌํ์ฌ ํจ์ ์คํ ์๊ฐ์ ๋ํ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ถ์์ ์์ฑํ์ฌ ์๋ฒ ์ฌ์ด๋ ๋ชจ๋์ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
๋ชจ๋ ํ๋กํ์ผ๋ง์ ์ํ ์ค์ฉ์ ์ธ ์ํฌํ๋ก์ฐ
์ ์ ๋ฐ ๋์ ๋ถ์์ ๊ตฌ์กฐํ๋ ์ํฌํ๋ก์ฐ์ ๊ฒฐํฉํ๋ ๊ฒ์ด ํจ์จ์ ์ธ ์ต์ ํ์ ํต์ฌ์ ๋๋ค. ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ์ฒด๊ณ์ ์ผ๋ก ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ง๋จํ๊ณ ์์ ํ์ธ์.
1๋จ๊ณ: ์ ์ ๋ถ์์ผ๋ก ์์ํ๊ธฐ (์์ฌ์ด ๋ชฉํ)
ํญ์ ํ๋ก๋์ ๋น๋์์ ๋ฒ๋ค ๋ถ์๊ธฐ๋ฅผ ์คํํ๋ ๊ฒ์ผ๋ก ์์ํ์ธ์. ์ด๊ฒ์ด ์ฃผ์ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ค์์ ์ฐพ์๋ณด์ธ์:
- ํฌ๊ณ ๋จ์ผ์ฒด์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋ช ๊ฐ์ง ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๋๋ฐ ๊ฑฐ๋ํ ์ฐจํธ๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์?
- ์ค๋ณต๋ ์์กด์ฑ: ์ค์๋ก ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ฌ ๋ฒ์ ์ ํฌํจํ๊ณ ์์ง๋ ์๋์?
- ํธ๋ฆฌ ์์ดํน๋์ง ์์ ๋ชจ๋: ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํธ๋ฆฌ ์์ดํน์ ์ํด ๊ตฌ์ฑ๋์ง ์์ ์ผ๋ถ๋ง ๊ฐ์ ธ์ค๋๋ผ๋ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๊ฐ ํฌํจ๋๊ณ ์์ง๋ ์๋์?
์ด ๋ถ์์ ๋ฐํ์ผ๋ก ์ฆ๊ฐ์ ์ธ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด `moment.js`๊ฐ ๋ฒ๋ค์ ํฐ ๋ถ๋ถ์ ์ฐจ์งํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ฉด, ๋ ๋ชจ๋ํ๋๊ณ ํธ๋ฆฌ ์์ดํน์ด ๊ฐ๋ฅํ `date-fns`๋ `day.js`์ ๊ฐ์ ๋ ์์ ๋์์ผ๋ก ๊ต์ฒดํ๋ ๊ฒ์ ์กฐ์ฌํ ์ ์์ต๋๋ค.
2๋จ๊ณ: ์ฑ๋ฅ ๊ธฐ์ค์ ์ค์
๋ณ๊ฒฝ์ ํ๊ธฐ ์ ์ ๊ธฐ์ค ์ธก์ ์ด ํ์ํฉ๋๋ค. ์ํฌ๋ฆฟ ๋ธ๋ผ์ฐ์ ์ฐฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ณ (ํ์ฅ ํ๋ก๊ทธ๋จ์ ๊ฐ์ญ์ ํผํ๊ธฐ ์ํด) ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ฑ๋ฅ ํญ์ ์ฌ์ฉํ์ฌ ์ฃผ์ ์ฌ์ฉ์ ํ๋ฆ์ ๊ธฐ๋กํ์ธ์. ์ด๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋, ์ ํ ๊ฒ์ ๋๋ ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ ์ถ๊ฐ ๋ฑ์ด ๋ ์ ์์ต๋๋ค. ์ด ์ฑ๋ฅ ํ๋กํ์ ์ ์ฅํ์ธ์. ์ด๊ฒ์ด ๋น์ ์ "์ด์ " ์ค๋ ์ท์ ๋๋ค. ์ด ์ฐจ๋จ ์๊ฐ(TBT) ๋ฐ ๊ฐ์ฅ ๊ธด ์์ ์ ์ง์ ์๊ฐ๊ณผ ๊ฐ์ ์ฃผ์ ๋ฉํธ๋ฆญ์ ๋ฌธ์ํํ์ธ์.
3๋จ๊ณ: ๋์ ํ๋กํ์ผ๋ง ๋ฐ ๊ฐ์ค ๊ฒ์ฆ
์ด์ ์ ์ ๋ถ์์ด๋ ์ฌ์ฉ์ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ค์ ์ธ์ฐ์ธ์. ์๋ฅผ ๋ค์ด: "์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํํฐ๋ฅผ ์ ํํ ๋ `ProductFilter` ๋ชจ๋์ด ํฐ ๋ชฉ๋ก์ ๋ค์ ๋ ๋๋งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฒ๋ฒ ์์ ์ ๋ฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค."
ํด๋น ์์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ํํ๋ฉด์ ์ฑ๋ฅ ํ๋กํ์ ๊ธฐ๋กํ์ฌ ์ด ๊ฐ์ค์ ํ ์คํธํ์ธ์. ๋๋ ค์ง๋ ์๊ฐ์ ํ๋ ์ ์ฐจํธ๋ฅผ ํ๋ํ์ธ์. `ProductFilter.js` ๋ด์ ํจ์์์ ๋น๋กฏ๋ ๊ธด ์์ ์ด ๋ณด์ด๋์? Bottom-Up ํญ์ ์ฌ์ฉํ์ฌ ์ด ๋ชจ๋์ ํจ์๊ฐ ์ด ์คํ ์๊ฐ์ ๋์ ๋น์จ์ ์๋นํ๋์ง ํ์ธํ์ธ์. ์ด ๋ฐ์ดํฐ๋ ๋น์ ์ ๊ฐ์ค์ ๊ฒ์ฆํฉ๋๋ค.
4๋จ๊ณ: ์ต์ ํ ๋ฐ ์ฌ์ธก์
๊ฒ์ฆ๋ ๊ฐ์ค์ ๋ฐํ์ผ๋ก ์ด์ ๋ชฉํ์ ๋ง๋ ์ต์ ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๋ต์ ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค:
- ์ด๊ธฐ ๋ก๋ ์ ํฐ ๋ชจ๋์ ๊ฒฝ์ฐ: ๋์
import()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์ฝ๋ ๋ถํ ํ์ฌ ์ฌ์ฉ์๊ฐ ํด๋น ๊ธฐ๋ฅ์ผ๋ก ์ด๋ํ ๋๋ง ๋ก๋๋๋๋ก ํฉ๋๋ค. - CPU ์ง์ฝ์ ์ธ ํจ์์ ๊ฒฝ์ฐ: ์๊ณ ๋ฆฌ์ฆ์ ๋ ํจ์จ์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ์ธ์. ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ๋ชจ๋ ๋ ๋๋ง์์ ์ฌ๊ณ์ฐํ๋ ๊ฒ์ ํผํ ์ ์๋์? ์์ ์ ์น ์์ปค๋ก ์คํ๋ก๋ํ์ฌ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ํ๋ณดํ ์ ์๋์?
- ๋น๋ํ ์์กด์ฑ์ ๊ฒฝ์ฐ: ๋ฌด๊ฑฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๊ฐ๋ณ๊ณ ์ง์ค๋ ๋์์ผ๋ก ๊ต์ฒดํ์ธ์.
์์ ์ฌํญ์ ๊ตฌํํ ํ 2๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ์ธ์. ๋์ผํ ์ฌ์ฉ์ ํ๋ฆ์ ์๋ก์ด ์ฑ๋ฅ ํ๋กํ์ ๊ธฐ๋กํ๊ณ ๊ธฐ์ค์ ๊ณผ ๋น๊ตํ์ธ์. ๋ฉํธ๋ฆญ์ด ๊ฐ์ ๋์๋์? ๊ธด ์์ ์ด ์ฌ๋ผ์ง๊ฑฐ๋ ์๋นํ ์งง์์ก๋์? ์ด ์ธก์ ๋จ๊ณ๋ ์ต์ ํ๊ฐ ์ํ๋ ํจ๊ณผ๋ฅผ ๋๋์ง ํ์ธํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
5๋จ๊ณ: ์๋ํ ๋ฐ ๋ชจ๋ํฐ๋ง
์ฑ๋ฅ์ ์ผํ์ฑ ์์ ์ด ์๋๋๋ค. ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์๋ํํด์ผ ํฉ๋๋ค.
- ์ฑ๋ฅ ์์ฐ: Lighthouse CI์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ์์ฐ(์: TBT๋ 200ms ๋ฏธ๋ง, ๋ฉ์ธ ๋ฒ๋ค ํฌ๊ธฐ๋ 250KB ๋ฏธ๋ง)์ ์ค์ ํ์ธ์. ์ด ์์ฐ์ ์ด๊ณผํ๋ฉด CI ํ์ดํ๋ผ์ธ์ด ๋น๋๋ฅผ ์คํจ์์ผ์ผ ํฉ๋๋ค.
- ์ค์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง(RUM): RUM ๋๊ตฌ๋ฅผ ํตํฉํ์ฌ ์ ์ธ๊ณ ์ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ธ์. ์ด๋ฅผ ํตํด ๋ค์ํ ๊ธฐ๊ธฐ, ๋คํธ์ํฌ ๋ฐ ์ง๋ฆฌ์ ์์น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ผ๋ฉฐ, ๋ก์ปฌ ํ ์คํธ ์ค์ ๋์น ์ ์๋ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํํ ํจ์ ๊ณผ ์ด๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
ํ๋กํ์ผ๋ง์ ๊น์ด ๋ค์ด๊ฐ์๋ก ๋ค์๊ณผ ๊ฐ์ ํํ ์ค์๋ฅผ ์ผ๋์ ๋์ธ์:
- ๊ฐ๋ฐ ๋ชจ๋์์ ํ๋กํ์ผ๋ง: ๊ฐ๋ฐ ์๋ฒ ๋น๋๋ฅผ ์ ๋ ํ๋กํ์ผ๋งํ์ง ๋ง์ธ์. ๊ฐ๋ฐ ๋น๋์๋ ํซ ๋ฆฌ๋ก๋ฉ ๋ฐ ๋๋ฒ๊น ์ ์ํ ์ถ๊ฐ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๊ณ , ์ถ์๋์ง ์์์ผ๋ฉฐ, ์ฑ๋ฅ์ ์ต์ ํ๋์ด ์์ง ์์ต๋๋ค. ํญ์ ํ๋ก๋์ ๊ณผ ์ ์ฌํ ๋น๋๋ฅผ ํ๋กํ์ผ๋งํ์ธ์.
- ๋คํธ์ํฌ ๋ฐ CPU ์ค๋กํ๋ง ๋ฌด์ํ๊ธฐ: ๋น์ ์ ๊ฐ๋ฐ ๋จธ์ ์ ํ๊ท ์ ์ธ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ค๋กํ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ(์: "Fast 3G")๊ณผ ๋๋ฆฐ CPU(์: "4x slowdown")๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ํ ๋ ํ์ค์ ์ธ ๊ทธ๋ฆผ์ ์ป์ผ์ธ์.
- ๋ฏธ์ธ ์ต์ ํ์ ์ง์คํ๊ธฐ: ํ๋ ํ ๋ฒ์น(80/20 ๋ฒ์น)์ ์ฑ๋ฅ์ ์ ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ 300๋ฐ๋ฆฌ์ด ๋์ ์ฐจ๋จํ๊ณ ์๋๋ฐ 2๋ฐ๋ฆฌ์ด๋ฅผ ์ ์ฝํ๋ ํจ์๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋ฉฐ์น ์ ์๋นํ์ง ๋ง์ธ์. ํญ์ ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ ํ์์ ๋จผ์ ํด๊ฒฐํ์ธ์. ํ๋ ์ ์ฐจํธ๋ ์ด๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์๋๋ก ํด์ค๋๋ค.
- ์๋ํํฐ ์คํฌ๋ฆฝํธ ์์ด๋ฒ๋ฆฌ๊ธฐ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์คํ๋๋ ๋ชจ๋ ์ฝ๋์ ์ํฅ์ ๋ฐ์ผ๋ฉฐ, ์์ ์ ์ฝ๋๋ง์ด ์๋๋๋ค. ๋ถ์, ๊ด๊ณ ๋๋ ๊ณ ๊ฐ ์ง์ ์์ ฏ์ ์ํ ์๋ํํฐ ์คํฌ๋ฆฝํธ๋ ์ข ์ข ์ฑ๋ฅ ๋ฌธ์ ์ ์ฃผ์ ์์ธ์ด ๋ฉ๋๋ค. ๊ทธ ์ํฅ์ ํ๋กํ์ผ๋งํ๊ณ ์ง์ฐ ๋ก๋ฉํ๊ฑฐ๋ ๋ ๊ฐ๋ฒผ์ด ๋์์ ์ฐพ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
๊ฒฐ๋ก : ์ง์์ ์ธ ์ค์ฒ์ผ๋ก์์ ํ๋กํ์ผ๋ง
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํ๋กํ์ผ๋ง์ ๋ชจ๋ ํ๋ ์น ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ถ์ธก์์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ณผํ์ผ๋ก ๋ณํ์ํต๋๋ค. ์ ์ ๋ฒ๋ค ๊ฒ์ฌ์ ๋์ ๋ฐํ์ ํ๋กํ์ผ๋ง์ด๋ผ๋ ๋ ๊ฐ์ง ๋ถ์ ๊ธฐ๋ฅ์ ๋ง์คํฐํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ํํ๊ฒ ์๋ณํ๊ณ ํด๊ฒฐํ ์ ์๋ ๋ฅ๋ ฅ์ ์ป๊ฒ ๋ฉ๋๋ค.
์ฒด๊ณ์ ์ธ ์ํฌํ๋ก์ฐ๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์: ๋ฒ๋ค์ ๋ถ์ํ๊ณ , ๊ธฐ์ค์ ์ ์ค์ ํ๊ณ , ๊ฐ์ค์ ์ธ์ฐ๊ณ ํ ์คํธํ๋ฉฐ, ์ต์ ํํ ํ ๋ค์ ์ธก์ ํ์ธ์. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ํ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ํตํด ์ฑ๋ฅ ๋ถ์์ ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ํตํฉํ๋ ๊ฒ์ ๋๋ค. ์ฑ๋ฅ์ ๋ชฉ์ ์ง๊ฐ ์๋๋ผ ์ง์์ ์ธ ์ฌ์ ์ ๋๋ค. ํ๋กํ์ผ๋ง์ ์ ๊ธฐ์ ์ธ ์ต๊ด์ผ๋ก ๋ง๋ค๋ฉด ์ ์ธ๊ณ ์ด๋์ ์๋ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋น ๋ฅด๊ณ , ๋ ์ ๊ทผํ๊ธฐ ์ฝ๊ณ , ๋ ์ฆ๊ฑฐ์ด ์น ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ๋ ํ๊ฒ ๋ฉ๋๋ค.