ํจ์จ์ ์ธ ๊ธ๋ก๋ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ธํ๋ผ ๋ฐ JavaScript ์ต์ ํ ํ๋ ์์ํฌ์ ๋ํ ์ฌ์ธต ๋ถ์.
๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ธํ๋ผ: JavaScript ์ต์ ํ ํ๋ ์์ํฌ ์ข ํฉ ๊ฐ์ด๋
์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ฐธ์ฌ์ ๋น์ฆ๋์ค ์ฑ๊ณต์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ ์ฅ์น๋ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ด๊ณ์์ด ์ํํ ๊ฒฝํ์ ๊ธฐ๋ํฉ๋๋ค. ๋๋ฆฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ๊ฐ, ํฌ๊ธฐ, ๊ถ๊ทน์ ์ผ๋ก๋ ์์ต ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ธํ๋ผ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ๊ณ JavaScript ์ต์ ํ ํ๋ ์์ํฌ์ ์ธ๊ณ๋ฅผ ํ๊ตฌํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ธํ๋ผ ์ดํด
์ต์ ํ ํ๋ ์์ํฌ๋ฅผ ํ์ํ๊ธฐ ์ ์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ๋ํ๋ ๊ธฐ๋ณธ ์ธํ๋ผ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ์ธํ๋ผ๋ ์ฌ๋ฌ ํต์ฌ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๊ตฌ์ฑ ์์๋ ์น ์ฝํ ์ธ ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
JavaScript ์์ง: ์คํ์ ํต์ฌ
JavaScript ์์ง์ JavaScript ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํ๋ ํต์ฌ ๊ตฌ์ฑ ์์์ ๋๋ค. ์๋ก ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ ๊ณ ์ ํ ์์ง์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ์์ง์ ์์ฒด ์ต์ ํ ๊ธฐ์ ๊ณผ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ์๋ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- V8: Google Chrome ๋ฐ Node.js์์ ์ฌ์ฉ๋๋ฉฐ, JIT(Just-In-Time) ์ปดํ์ผ์ ํฌํจํ ์๋์ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
- SpiderMonkey: Mozilla Firefox์์ ์ฌ์ฉ๋๋ฉฐ, ์ง์์ ์ธ ์ฑ๋ฅ ํฅ์๊ณผ ํจ๊ป ๋ณด์ ๋ฐ ํ์ค ์ค์์ ์ค์ ์ ๋ก๋๋ค.
- JavaScriptCore (Nitro): Safari์์ ์ฌ์ฉ๋๋ฉฐ, ์๋์ง ํจ์จ์ฑ๊ณผ Apple ์ํ๊ณ์์ ํตํฉ์ ๊ฐ์กฐํฉ๋๋ค.
- ChakraCore: ์ด์ ์๋ Microsoft Edge์์ ์ฌ์ฉ๋์์ผ๋ฉฐ, ํ์ฌ๋ ์คํ ์์ค์ด๋ฉฐ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจ๋๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
๊ฐ ์์ง์ ๋์์ค๋ฅผ ์ดํดํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์๋ก ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์ ์ต์ ์ ์ฑ๋ฅ์ ์ํด ์ฝ๋๋ฅผ ์กฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, V8์ ์ ๊ทน์ ์ธ JIT ์ปดํ์ผ์ ๋ ๋์ ์ต์ ํ๋ฅผ ํ์ฉํ๋ ํน์ ์ฝ๋ฉ ํจํด์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
๋ ๋๋ง ์์ง: ์ฝ๋๋ฅผ ์๊ฐ์ ์์๋ก ๋ณํ
๋ ๋๋ง ์์ง์ HTML, CSS ๋ฐ JavaScript๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ค์ ์น ํ์ด์ง์ ์๊ฐ์ ํํ์ ๊ตฌ์ฑํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ ๋๋ง ํ๋ก์ธ์ค์ ์ฃผ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์: ์์ง์ HTML ๋ฐ CSS๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ๊ฐ๊ฐ DOM(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ) ๋ฐ CSSOM(CSS ๊ฐ์ฒด ๋ชจ๋ธ)์ ๋ง๋ญ๋๋ค.
- ๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์ฑ: DOM๊ณผ CSSOM์ด ๊ฒฐํฉ๋์ด ํ๋ฉด์ ํ์๋ ์๊ฐ์ ์์๋ฅผ ๋ํ๋ด๋ ๋ ๋๋ง ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- ๋ ์ด์์: ์์ง์ ๋ ๋๋ง ํธ๋ฆฌ์ ๊ฐ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ํ์ธํ : ์์ง์ ์๊ฐ์ ์์๋ฅผ ํ๋ฉด์ ํ์ธํ ํฉ๋๋ค.
์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋ ๋๋ง ํ๋ก์ธ์ค์ ๋ชจ๋ ๋จ๊ณ์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ CSS ์ ํ๊ธฐ๋ CSSOM ๊ตฌ์ฑ์ ๋๋ฆฌ๊ฒ ํ ์ ์๋ ๋ฐ๋ฉด, ํฐ DOM์ ๋ ์ด์์ ์๊ฐ์ ๋๋ฆด ์ ์์ต๋๋ค. DOM์ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๊ณ CSS ๊ท์น์ ์ต์ ํํ๋ ๊ฒ์ ๋ ๋๋ง ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋คํธ์ํน: ์ฝํ ์ธ ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ฌ
๋คํธ์ํน ๊ณ์ธต์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋น ๋ฅธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ ํจ์จ์ ์ธ ์ฝํ ์ธ ์ ๋ฌ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์บ์ฑ: ์์ฒญ ์์ ์ ์ก๋๋ ๋ฐ์ดํฐ ์์ ์ค์ด๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ๋ฐ ์๋ฒ์ธก ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ํ์ฉํฉ๋๋ค.
- ์์ถ: Gzip ๋๋ Brotli์ ๊ฐ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ HTTP ์๋ต์ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ): ํนํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์๋น์คํ๋ ๋ฐ ์ค์ํ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ๋ค์ด๋ก๋ ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ง๋ฆฌ์ ์ผ๋ก ์ฌ์ฉ์์ ๋ ๊ฐ๊น์ด ์ฌ๋ฌ ์๋ฒ์ ์ฝํ ์ธ ๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ธ๊ธฐ์๋ CDN ์ ๊ณต ์ ์ฒด๋ก๋ Cloudflare, Akamai ๋ฐ Amazon CloudFront๊ฐ ์์ต๋๋ค.
- HTTP/2 ๋ฐ HTTP/3: ๋ฉํฐํ๋ ์ฑ ๋ฐ ํค๋ ์์ถ๊ณผ ๊ฐ์ด HTTP/1.1๋ณด๋ค ์ฑ๋ฅ์ด ํฅ์๋ ์ต์ HTTP ํ๋กํ ์ฝ์ ํ์ฉํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ CDN์ ์ ํํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๊ด๋ฒ์ํ ๊ธ๋ก๋ฒ ์ ์ง๋ฅผ ํ๋ณดํ๊ณ ์ง๋ฆฌ์ ์์น ๋ผ์ฐํ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ง์ํ๋ CDN์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
JavaScript ์ต์ ํ ํ๋ ์์ํฌ: ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๊ณ
JavaScript ์ต์ ํ ํ๋ ์์ํฌ๋ JavaScript ์ฝ๋์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ๋ ์ฝ๋ ํฌ๊ธฐ ์ถ์, ๋ฐํ์ ์ฑ๋ฅ ํฅ์ ๋ฐ ํจ์จ์ ์ธ ๋ฆฌ์์ค ๋ก๋ฉ์ ํฌํจํ ์ต์ ํ์ ๋ค์ํ ์ธก๋ฉด์ ๋ค๋ฃน๋๋ค.
์ฝ๋ ๋ถํ : ๋ถํ ๋ฐ ์ ๋ณต
์ฝ๋ ๋ถํ ์ ํฐ JavaScript ๋ฒ๋ค์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ์ค์ด๋ค๊ณ ์ธ์ง๋ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ฝ๋ ๋ถํ ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Webpack: ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํฌํจํ ๋ค์ํ ์ฝ๋ ๋ถํ ์ ๋ต์ ์ง์ํ๋ ๊ฐ๋ ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค.
- Parcel: ๊ฐ์ ธ์ค๊ธฐ ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ถํ ํ๋ ์ ๋ก ๊ตฌ์ฑ ๋ฒ๋ค๋ฌ์ ๋๋ค.
- Rollup: ์๊ณ ํจ์จ์ ์ธ ๋ฒ๋ค์ ์์ฑํ๋ ๋ฐ ์ค์ ์ ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ด๋ฉฐ ํนํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํฉํฉ๋๋ค.
์: ๋๊ท๋ชจ ์ ์ ์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ JavaScript ์ฝ๋๋ฅผ ์ ํ ๋ชฉ๋ก ํ์ด์ง, ์ ํ ์ธ๋ถ ์ ๋ณด ํ์ด์ง ๋ฐ ๊ฒฐ์ ํ๋ก์ธ์ค์ ๋ํ ๋ณ๋์ ๋ฒ๋ค๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฌ์ฉ์๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋์ ํ์ํ ์ฝ๋๋ง ๋ค์ด๋ก๋ํ์ฌ ๋ํ ํ ์๊ฐ(time to interactive)์ ์ค์ ๋๋ค.
ํธ๋ฆฌ ์์ดํน: ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ
ํธ๋ฆฌ ์์ดํน์ JavaScript ๋ฒ๋ค์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ๋ฒ๋ค์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ์ ์ ๋ถ์์ ์ฌ์ฉํ์ฌ ์คํ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํฉ๋๋ค.
- Webpack: Webpack์ ES ๋ชจ๋ ๋ฐ Terser์ ๊ฐ์ ์ต์ํ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ๋ ํธ๋ฆฌ ์์ดํน์ ์ง์ํฉ๋๋ค.
- Rollup: Rollup์ ์๊ณ ํจ์จ์ ์ธ ๋ฒ๋ค์ ๋ง๋๋ ๋ฐ ์ค์ ์ ๋๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ ์์ดํน์ ํนํ ํจ๊ณผ์ ์ ๋๋ค.
ํธ๋ฆฌ ์์ดํน์ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ๋ ค๋ฉด ES ๋ชจ๋์ ์ฌ์ฉํ๊ณ ์ฝ๋์์ ๋ถ์์ฉ์ ํผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ถ์์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ญ ์ํ๋ฅผ ์์ ํ๋ ์์ ์ผ๋ก, ๋ฒ๋ค๋ฌ๊ฐ ์ ๊ฑฐํ๊ธฐ์ ์์ ํ ์ฝ๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
์ต์ํ: ์ฝ๋ ํฌ๊ธฐ ์ค์ด๊ธฐ
์ต์ํ๋ ๊ณต๋ฐฑ, ์ฃผ์ ๋ฐ ๊ธด ๋ณ์ ์ด๋ฆ๊ณผ ๊ฐ์ด JavaScript ์ฝ๋์์ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฝ๋ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ๋ค์ด๋ก๋ ์๋๊ฐ ํฅ์๋ฉ๋๋ค.
- Terser: ES6+์ ๋ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ JavaScript ํ์, ๋งน๊ธ๋ฌ ๋ฐ ์์ถ๊ธฐ ํดํท์ ๋๋ค.
- UglifyJS: JavaScript ํ์, ๋งน๊ธ๋ฌ/์์ถ๊ธฐ/๋ฏธํ๊ธฐ ํดํท์ ๋๋ค. (Terser๋ณด๋ค ๊ฐ๋ฐ ํ๋์ด ์ ์ต๋๋ค).
- Babel Minify: Babel ํด์ฒด์ธ์ ์ผ๋ถ๋ก, ํธ๋์คํ์ผ ๊ณผ์ ์์ ์ฝ๋ ์ต์ํ์ ์ค์ ์ ๋ก๋๋ค.
์ต์ํ๋ ํนํ ์ฝ๋ ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ต์ ํ ๊ธฐ์ ๊ณผ ๊ฒฐํฉ๋ ๋ JavaScript ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
์์ถ: ๋ง์ง๋ง ๋ฐ์ดํธ๊น์ง ์์ฐฉ
Gzip ๋ฐ Brotli์ ๊ฐ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ JavaScript ํ์ผ์ ํฌํจํ HTTP ์๋ต์ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ๋ค์ด๋ก๋ ์๋๊ฐ ํฅ์๋๊ณ ๋์ญํญ ์๋น๊ฐ ์ค์ด๋ญ๋๋ค. ๋๋ถ๋ถ์ ์น ์๋ฒ์ CDN์ ์์ถ์ ์ง์ํฉ๋๋ค.
์๋ฒ ๋๋ CDN์์ ์์ถ์ ํ์ฑํํ๋ ๊ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฐ๋จํ์ง๋ง ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. Brotli๋ ์ผ๋ฐ์ ์ผ๋ก Gzip๋ณด๋ค ๋ ๋์ ์์ถ๋ฅ ์ ์ ๊ณตํ์ง๋ง ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์๋์ง ์์ ์ ์์ต๋๋ค.
๋ ์ด์ง ๋ก๋ฉ: ์ฃผ๋ฌธํ ๋ฆฌ์์ค ๋ก๋ฉ
๋ ์ด์ง ๋ก๋ฉ์ ํ์ํ ๋๊น์ง ์ค์ํ์ง ์์ ๋ฆฌ์์ค์ ๋ก๋ฉ์ ์ฐ๊ธฐํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ์ค์ด๋ค๊ณ ์ธ์ง๋ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด๋ฏธ์ง ๋ ์ด์ง ๋ก๋ฉ: `loading="lazy"` ์์ฑ ๋๋ lazysizes์ ๊ฐ์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ทฐํฌํธ์ ํ์๋ ๋๋ง ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค.
- ์ปดํฌ๋ํธ ๋ ์ด์ง ๋ก๋ฉ: ๋์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ React.lazy์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ JavaScript ์ปดํฌ๋ํธ๋ฅผ ์ฃผ๋ฌธํ์ผ๋ก ๋ก๋ํฉ๋๋ค.
๋ ์ด์ง ๋ก๋ฉ์ ์ด๋ฏธ์ง๊ฐ ๋ง๊ฑฐ๋ ๋ณต์กํ ์ปดํฌ๋ํธ๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ ์ฉํฉ๋๋ค. ์ด๋ฌํ ๋ฆฌ์์ค์ ๋ก๋ฉ์ ์ฐ๊ธฐํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ๋ณด๋ค ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
ํ๋ ์์ํฌ ํน์ ์ต์ ํ
๋ง์ JavaScript ํ๋ ์์ํฌ๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ํน์ ์ต์ ํ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- React: ๋ฉ๋ชจ์ด์ ์ด์ (React.memo), React.lazy๋ฅผ ์ฌ์ฉํ ์ฝ๋ ๋ถํ , ๊ฐ์ํ๋ ๋ชฉ๋ก(react-window, react-virtualized)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
- Angular: AOT(Ahead-of-Time) ์ปดํ์ผ, ๋ชจ๋์ ๋ ์ด์ง ๋ก๋ฉ ๋ฐ ๋ณ๊ฒฝ ๊ฐ์ง ์ต์ ํ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- Vue.js: <keep-alive>๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ ์บ์ฑ, ๋น๋๊ธฐ ์ปดํฌ๋ํธ ๋ฐ ์ต์ ํ๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์ ํํ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํน์ ์ต์ ํ ๊ธฐ์ ์ ์ดํดํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํ๋กํ์ผ๋ง ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
ํ๋กํ์ผ๋ง ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ต์ ํ ๋ ธ๋ ฅ์ ์ํฅ์ ์ถ์ ํ๋ ๋ฐ ํ์์ ์ ๋๋ค. JavaScript ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Chrome DevTools: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋๋ฒ๊น , ํ๋กํ์ผ๋ง ๋ฐ ๋ถ์ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ ๋ชจ์์ ๋๋ค. ์ฑ๋ฅ ํญ์ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ์ ํ์๋ผ์ธ์ ๊ธฐ๋กํ๊ณ ๋ถ์ํ์ฌ ๋๋ฆฐ ํจ์์ ๋ ๋๋ง ๋ณ๋ชฉ ํ์์ ์๋ณํ ์ ์์ต๋๋ค.
- Firefox ๊ฐ๋ฐ์ ๋๊ตฌ: Chrome DevTools์ ์ ์ฌํ๋ฉฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋๋ฒ๊น , ํ๋กํ์ผ๋ง ๋ฐ ๋ถ์ํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- WebPageTest: ์ ์ธ๊ณ ์ฌ๋ฌ ์์น์์ ์น ํ์ด์ง์ ์ฑ๋ฅ์ ํ ์คํธํ๊ธฐ ์ํ ์น ๊ธฐ๋ฐ ๋๊ตฌ์ ๋๋ค.
- Lighthouse: ์น ํ์ด์ง์ ํ์ง์ ๊ฐ์ ํ๊ธฐ ์ํ ์คํ ์์ค ์๋ํ ๋๊ตฌ์ ๋๋ค. ์ฑ๋ฅ, ์ ๊ทผ์ฑ, ํ๋ก๊ทธ๋ ์๋ธ ์น ์ฑ, SEO ๋ฑ์ ๋ํ ๊ฐ์ฌ๊ฐ ์์ต๋๋ค.
์ ๊ธฐ์ ์ธ ํ๋กํ์ผ๋ง ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์กฐ๊ธฐ์ ์๋ณํ๊ณ ํด๊ฒฐํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ผ๊ด๋๊ฒ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฑ๋ฅ์ด ์ข์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ๊ธ๋ก๋ฒ ๊ด์ ์ด ํ์ํฉ๋๋ค. ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ์ต์ ํ: ๋ชจ๋ฐ์ผ ์ฅ์น๋ ์ข ์ข ์ฒ๋ฆฌ ๋ฅ๋ ฅ๊ณผ ๋คํธ์ํฌ ๋์ญํญ์ด ์ ํ๋์ด ์์ต๋๋ค. ์์ฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ๋ฐ์ํ ๋์์ธ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ , HTTP ์์ฒญ ์๋ฅผ ์ต์ํํ์ฌ ๋ชจ๋ฐ์ผ ์ฅ์น์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ๋๋ฌ ๋ฒ์๋ฅผ ๊ฐ์ง CDN ์ ํ: ๊ด๋ฒ์ํ ๊ธ๋ก๋ฒ ์ ์ง๋ฅผ ํ๋ณดํ๊ณ ์ง๋ฆฌ์ ์์น ๋ผ์ฐํ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ง์ํ๋ CDN์ ์ ํํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๊ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์ฝํ ์ธ ํ์งํ: ๋ค์ํ ์ธ์ด์ ์ง์ญ์ ๋ง๊ฒ ์ฝํ ์ธ ๋ฅผ ํ์งํํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๊ฐ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ์์น์์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ๋ฌ ์์น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ํน์ ์ง์ญ์ ํน์ ํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค.
- ์ค์ ์ฅ์น์์ ํ ์คํธ: ํ๋ฉด ํฌ๊ธฐ, ์ด์ ์ฒด์ ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ด ๋ค๋ฅธ ์ค์ ์ฅ์น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์๋ฎฌ๋ ์ดํฐ ๋๋ ์๋ฎฌ๋ ์ดํฐ์์ ๋ช ํํ์ง ์์ ์ ์๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค.
- ์ฃผ์ ์ฝํ ์ธ ์ฐ์ ์์ ์ง์ : ์คํฌ๋กคํ์ง ์๊ณ ๋ ๋ณด์ด๋ ์ฝํ ์ธ ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๋๋กํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ธ์ง๋ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ์ฌ์ฉ์์ ์ฐธ์ฌ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ์์ ์ฌ์ฉ: ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ผ๋ก ๊ธฐ๋ณธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ๋ง์ญ์์ค. `setTimeout`, `requestAnimationFrame` ๋ฐ ์น ์์ ์์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํฉ๋๋ค.
๊ฒฐ๋ก
๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ธํ๋ผ์ ๋ํ ๊น์ ์ดํด์ JavaScript ์ต์ ํ ํ๋ ์์ํฌ์ ํจ๊ณผ์ ์ธ ์ฌ์ฉ์ด ํ์ํฉ๋๋ค. ์ฝ๋ ๋ถํ , ํธ๋ฆฌ ์์ดํน, ์ต์ํ, ์์ถ ๋ฐ ๋ ์ด์ง ๋ก๋ฉ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ์ด ๊ธฐ์ฌ์ ์์ฝ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๋ฉฐ ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ์ก์ธ์ค ํ ์์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ์ฌ์ฉ์ ์ฐธ์ฌ ๋ฐ ๋น์ฆ๋์ค ์ฑ๊ณต์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.