๋์ ์ํฌํธ์ ์ฝ๋ ๋ถํ ์ ํตํ ๊ณ ๊ธ JavaScript ๋ชจ๋ ๋ก๋ฉ ๊ธฐ์ ์ ํ์ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ์ธ์.
JavaScript ๋ชจ๋ ๋ก๋ฉ: ์ฑ๋ฅ์ ์ํ ๋์ ์ํฌํธ ๋ฐ ์ฝ๋ ๋ถํ
ํ๋ ์น ๊ฐ๋ฐ์์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๋ ํต์ฌ ์์ ์ค ํ๋๋ JavaScript ์ฝ๋์ ๋ก๋ฉ ๋ฐ ์คํ ๋ฐฉ์์ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค. ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ข ์ข ๋๊ท๋ชจ ์ด๊ธฐ JavaScript ๋ฒ๋ค์ ์ด๋ํ์ฌ ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ๋๋ฆฌ๊ฒ ํ๊ณ ๋คํธ์ํฌ ๋์ญํญ ์๋น๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋คํํ ๋์ ์ํฌํธ ๋ฐ ์ฝ๋ ๋ถํ ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋์์๋ ์ด๋ฌํ ๊ธฐ์ ์ ํ์ํ๊ณ , ์ฌ์ฉ์์ ์ง๋ฆฌ์ ์์น๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์ํ์ ๊ด๊ณ์์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค์ฉ์ ์ธ ์์ ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
JavaScript ๋ชจ๋ ์ดํดํ๊ธฐ
๋์ ์ํฌํธ์ ์ฝ๋ ๋ถํ ์ ์์ธํ ์ดํด๋ณด๊ธฐ ์ ์, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ก JavaScript ๋ชจ๋์ ๋๋ค. ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๊ตฌ์ฑํ์ฌ ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ ๋ฐ ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ์ ์ด์งํ ์ ์์ต๋๋ค. ECMAScript ๋ชจ๋(ES ๋ชจ๋)์ JavaScript๋ฅผ ์ํ ํ์คํ๋ ๋ชจ๋ ์์คํ ์ผ๋ก, ์ต์ ๋ธ๋ผ์ฐ์ ์ Node.js์์ ๋ค์ดํฐ๋ธ๋ก ์ง์๋ฉ๋๋ค.
ES ๋ชจ๋: ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์
ES ๋ชจ๋์ import ๋ฐ export ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ข
์์ฑ์ ์ ์ํ๊ณ ๊ธฐ๋ฅ์ ๋
ธ์ถํฉ๋๋ค. ์ข
์์ฑ์ ๋ํ ์ด๋ฌํ ๋ช
์์ ์ธ ์ ์ธ์ ํตํด JavaScript ์์ง์ ๋ชจ๋ ๊ทธ๋ํ๋ฅผ ์ดํดํ๊ณ ๋ก๋ฉ ๋ฐ ์คํ์ ์ต์ ํํ ์ ์์ต๋๋ค.
์์ : ๊ฐ๋จํ ๋ชจ๋ (math.js)
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
์์ : ๋ชจ๋ ์ํฌํธ (app.js)
// app.js
import { add, subtract } from './math.js';
console.log(add(5, 3)); // ์ถ๋ ฅ: 8
console.log(subtract(10, 4)); // ์ถ๋ ฅ: 6
๋๊ท๋ชจ ๋ฒ๋ค์ ๋ฌธ์ ์
ES ๋ชจ๋์ ํ๋ฅญํ ์ฝ๋ ๊ตฌ์ฑ์ ์ ๊ณตํ์ง๋ง, ๋ชจ๋ JavaScript ์ฝ๋๋ฅผ ๋จ์ผ ํ์ผ๋ก ๋ฌด๋ถ๋ณํ๊ฒ ๋ฒ๋ค๋งํ๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๋ธ๋ผ์ฐ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํธ ์์ฉ ๊ฐ๋ฅํด์ง๊ธฐ ์ ์ ์ด ์ ์ฒด ๋ฒ๋ค์ ๋ค์ด๋ก๋ํ๊ณ ํ์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ์ข ์ข ๋ณ๋ชฉ ํ์์ด ๋๋ฉฐ, ํนํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ์ฌ์ฉ์๋ ์ฑ๋ฅ์ด ๋ฎ์ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋ชจ๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ์ง ์์ ์นดํ ๊ณ ๋ฆฌ์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ด๋ ๋นํจ์จ์ ์ด๋ฉฐ ๋์ญํญ์ ๋ญ๋นํฉ๋๋ค.
๋์ ์ํฌํธ: ํ์์ ๋ฐ๋ฅธ ๋ก๋ฉ
ES2020์ ๋์
๋ ๋์ ์ํฌํธ๋ ๋ชจ๋์ ํ์ํ ๋๋ง ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ์ ์๊ฒ ํจ์ผ๋ก์จ ๋๊ท๋ชจ ์ด๊ธฐ ๋ฒ๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์คํฌ๋ฆฝํธ ์์ ์ ๋ชจ๋ ๋ชจ๋์ ์ํฌํธํ๋ ๋์ import() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์์ ๋ฐ๋ผ ๋ชจ๋์ ๋ก๋ํ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
import() ํจ์๋ ๋ชจ๋์ ๋ด๋ณด๋ด๊ธฐ๋ก ํด๊ฒฐ๋๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ๋ก๋ฉ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ชจ๋์ด ์ฑ๊ณต์ ์ผ๋ก ๋ก๋๋ ํ์๋ง ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์์ : ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ ๋์ ์ํฌํธ
const button = document.getElementById('myButton');
button.addEventListener('click', async () => {
try {
const module = await import('./my-module.js');
module.myFunction(); // ๋ก๋๋ ๋ชจ๋์ ํจ์ ํธ์ถ
} catch (error) {
console.error('๋ชจ๋ ๋ก๋ ์คํจ:', error);
}
});
๋์ ์ํฌํธ์ ์ด์
- ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ ๊ฐ์ : ์ค์ํ์ง ์์ ๋ชจ๋์ ๋ก๋ฉ์ ์ฐ๊ธฐํจ์ผ๋ก์จ ์ด๊ธฐ JavaScript ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํธ ์์ฉ ๊ฐ๋ฅํด์ง๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ ์ฒ์ ๋ฐฉ๋ฌธํ๋ ์ฌ์ฉ์์ ๋์ญํญ์ด ์ ํ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ค์ํฉ๋๋ค.
- ๋คํธ์ํฌ ๋์ญํญ ์๋น ๊ฐ์: ํ์ํ ๋๋ง ๋ชจ๋์ ๋ก๋ํ๋ฉด ๋ค์ด๋ก๋ํด์ผ ํ๋ ๋ฐ์ดํฐ ์์ด ์ค์ด๋ค์ด ์ฌ์ฉ์์ ์๋ฒ ๋ชจ๋์ ๋์ญํญ์ ์ ์ฝํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ๋น์ธ๊ฑฐ๋ ์ ๋ขฐํ ์ ์๋ ์ธํฐ๋ท ์ก์ธ์ค ์ง์ญ์ ๋ชจ๋ฐ์ผ ์ฌ์ฉ์์๊ฒ ์ค์ํฉ๋๋ค.
- ์กฐ๊ฑด๋ถ ๋ก๋ฉ: ๋์ ์ํฌํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ํธ ์์ฉ, ์ฅ์น ๊ธฐ๋ฅ ๋๋ A/B ํ ์คํธ ์๋๋ฆฌ์ค์ ๊ฐ์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ชจ๋์ ๋ก๋ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์์น์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋์ ๋ก๋ํ์ฌ ์ง์ญํ๋ ์ฝํ ์ธ ๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์ง์ฐ ๋ก๋ฉ: ์ฆ์ ํ์๋๊ฑฐ๋ ํ์ํ์ง ์์ ๊ตฌ์ฑ ์์ ๋๋ ๊ธฐ๋ฅ์ ์ง์ฐ ๋ก๋ฉ์ ๊ตฌํํ์ฌ ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํฉ๋๋ค. ๋๊ท๋ชจ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ๋ฅผ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํจ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์์ผ๋ฉฐ, ํ ๋ฒ์ ๋ชจ๋ ๋ก๋ํ์ง ์์ต๋๋ค.
์ฝ๋ ๋ถํ : ๋ถํ ํ ์ ๋ณต
์ฝ๋ ๋ถํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ฅผ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ ์ฒญํฌ๋ก ๋ถํ ํ์ฌ ๋ชจ๋ํ ๊ฐ๋ ์ ํ ๋จ๊ณ ๋ ๋ฐ์ ์ํต๋๋ค. ์ด๋ฅผ ํตํด ํ์ฌ ๋ณด๊ธฐ ๋๋ ๊ธฐ๋ฅ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ ์ ์์ด ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ฝ๋ ๋ถํ ์ ์ํ ๊ธฐ์
์ฝ๋ ๋ถํ ์ ๊ตฌํํ๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ์ ์ด ์์ต๋๋ค.
- ์ํธ๋ฆฌ ํฌ์ธํธ ๋ถํ : ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์ํธ๋ฆฌ ํฌ์ธํธ๋ก ๋ถํ ํ๋ฉฐ, ๊ฐ ์ํธ๋ฆฌ ํฌ์ธํธ๋ ๋ค๋ฅธ ํ์ด์ง ๋๋ ์น์ ์ ๋ํ๋ ๋๋ค. ์ด๋ฅผ ํตํด ํ์ฌ ์ํธ๋ฆฌ ํฌ์ธํธ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋ ํ ํ์ด์ง, ์ํ ๋ชฉ๋ก ํ์ด์ง ๋ฐ ๊ฒฐ์ ํ์ด์ง์ ๋ํ ๋ณ๋์ ์ํธ๋ฆฌ ํฌ์ธํธ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๋์ ์ํฌํธ: ์์์ ์ค๋ช ํ ๋๋ก ๋์ ์ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์์ ๋ฐ๋ผ ๋ชจ๋์ ๋ก๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ํจ๊ณผ์ ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค.
- ๋ผ์ฐํธ ๊ธฐ๋ฐ ๋ถํ : ๋ผ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: React Router, Vue Router)๋ฅผ ์ฌ์ฉํ ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ๋๋ ๋ชจ๋์ ๋์ ์ผ๋ก ๋ก๋ํ๋๋ก ๋ผ์ฐํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ฌ ๋ผ์ฐํธ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ ์ ์์ต๋๋ค.
์ฝ๋ ๋ถํ ์ ์ํ ๋๊ตฌ
Webpack, Parcel ๋ฐ Rollup๊ณผ ๊ฐ์ ์ต์ JavaScript ๋ฒ๋ค๋ฌ๋ ์ฝ๋ ๋ถํ ์ ๋ํ ํ๋ฅญํ ์ง์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ถ์ํ๊ณ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ต์ ํ๋ ์ฒญํฌ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ๋ํ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ๋ก๋๋๋๋ก ํฉ๋๋ค.
Webpack: ์ฝ๋ ๋ถํ ๊ธฐ๋ฅ์ด ์๋ ๊ฐ๋ ฅํ ๋ฒ๋ค๋ฌ
Webpack์ ๊ฐ๋ ฅํ ์ฝ๋ ๋ถํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๊ณ ๋ค์ฌ๋ค๋ฅํ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํ๋ก์ ํธ์ ์ข ์์ฑ์ ๋ถ์ํ๊ณ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ์์ฑํ ๋ค์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ๋ ๋ฒ๋ค์ ์์ฑํฉ๋๋ค. Webpack์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์ฝ๋ ๋ถํ ๊ธฐ์ ์ ์ง์ํฉ๋๋ค.
- ์ํธ๋ฆฌ ํฌ์ธํธ: Webpack ๊ตฌ์ฑ์ ์ฌ๋ฌ ์ํธ๋ฆฌ ํฌ์ธํธ๋ฅผ ์ ์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ๋ณ๋์ ๋ฒ๋ค์ ์์ฑํฉ๋๋ค.
- ๋์ ์ํฌํธ: Webpack์ ๋์ ์ํฌํธ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์ํฌํธ๋ ๋ชจ๋์ ๋ํ ๋ณ๋์ ์ฒญํฌ๋ฅผ ์์ฑํฉ๋๋ค.
- SplitChunksPlugin: ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ๊ณตํต ์ข ์์ฑ์ ๋ณ๋์ ์ฒญํฌ๋ก ์ถ์ถํ์ฌ ์ค๋ณต์ ์ค์ด๊ณ ์บ์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ๋ชจ๋์ด ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Lodash, React)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Webpack์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ ๋ณ๋์ ์ฒญํฌ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ์บ์๋์ด ๋ค๋ฅธ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์์ : ์ฝ๋ ๋ถํ ์ ์ํ Webpack ๊ตฌ์ฑ
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: {
index: './src/index.js',
about: './src/about.js',
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
title: 'Code Splitting',
}),
],
optimization: {
splitChunks: {
chunks: 'all',
},
},
};
์ด ์์ ์์๋ Webpack์ด ๋ ๊ฐ์ ์ํธ๋ฆฌ ํฌ์ธํธ ๋ฒ๋ค(index.bundle.js ๋ฐ about.bundle.js)๊ณผ ๋ชจ๋ ๊ณตํต ์ข
์์ฑ์ ๋ํ ๋ณ๋์ ์ฒญํฌ๋ฅผ ์์ฑํฉ๋๋ค. HtmlWebpackPlugin์ ํ์ํ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํฌํจํ๋ HTML ํ์ผ์ ์์ฑํฉ๋๋ค.
์ฝ๋ ๋ถํ ์ ์ด์
- ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ ๊ฐ์ : ์ฝ๋๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ๋ถํ ํ๋ฉด ์ด๊ธฐ JavaScript ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํธ ์์ฉ ๊ฐ๋ฅํด์ง๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ํฅ์๋ ์บ์ฑ: ์ฝ๋๋ฅผ ์ฒญํฌ๋ก ๋ถํ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๋๋ก ์บ์ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ณ๊ฒฝ๋ ์ฒญํฌ๋ง ๋ค์ด๋ก๋ํ๋ฉด ๋๋ฏ๋ก ๋ก๋ฉ ์๊ฐ์ด ๋ ๋นจ๋ผ์ง๋๋ค.
- ๋คํธ์ํฌ ๋์ญํญ ์๋น ๊ฐ์: ํ์ฌ ๋ณด๊ธฐ ๋๋ ๊ธฐ๋ฅ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ๋ฉด ๋ค์ด๋ก๋ํด์ผ ํ๋ ๋ฐ์ดํฐ ์์ด ์ค์ด๋ค์ด ์ฌ์ฉ์์ ์๋ฒ ๋ชจ๋์ ๋์ญํญ์ ์ ์ฝํ ์ ์์ต๋๋ค.
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ๊ฐ์ ๋ ๋ฐ์์ฑ์ ์ ๋ฐ์ ์ผ๋ก ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธฐ์ฌํ์ฌ ์ฐธ์ฌ ๋ฐ ๋ง์กฑ๋๋ฅผ ๋์ ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
๋์ ์ํฌํธ์ ์ฝ๋ ๋ถํ ์ ์ค์ ์๋๋ฆฌ์ค์ ์ ์ฉํ๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ: ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํจ์ ๋ฐ๋ผ ํ์์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ๊ณ ๋์ญํญ ์๋น๋ฅผ ์ค์ ๋๋ค. ์ด๋ ์๋ง์ ์ํ ์ด๋ฏธ์ง๊ฐ ์๊ฑฐ๋ ์ด๋ฏธ์ง๊ฐ ๋ง์ ๋ธ๋ก๊ทธ๊ฐ ์๋ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์์ ์ผ๋ฐ์ ์ ๋๋ค. Intersection Observer API์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
- ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ: ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋งคํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์ ๋ก ํ์ํ ๋๋ง ๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์๋ณด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์๊ฐ ์ฐจํธ๋ฅผ ํ์ํ๋ ํ์ด์ง๋ก ์ด๋ํ ๋๋ง ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
- ์กฐ๊ฑด๋ถ ๊ธฐ๋ฅ ๋ก๋ฉ: ์ฌ์ฉ์ ์ญํ , ์ฅ์น ๊ธฐ๋ฅ ๋๋ A/B ํ ์คํธ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ฐ์ผ ์ฑ์ ๊ตฌํ ์ฅ์น ๋๋ ์ ํ๋ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ์ํด ๋จ์ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
- ํ์์ ๋ฐ๋ฅธ ๊ตฌ์ฑ ์์ ๋ก๋ฉ: ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์์ฉํจ์ ๋ฐ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ฌ ์ฐฝ์ ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ด ๋๋ง ๋ก๋๋ ์ ์์ต๋๋ค. ์ด๋ ๋ณต์กํ UI ์์๋ ์์์ ํนํ ์ ์ฉํฉ๋๋ค.
- ๊ตญ์ ํ(i18n): ์ฌ์ฉ์์ ์์น ๋๋ ์ ํธํ๋ ์ธ์ด์ ๋ฐ๋ผ ์ธ์ด๋ณ ๋ฒ์ญ์ ๋์ ์ผ๋ก ๋ก๋ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ํ์ํ ๋ฒ์ญ๋ง ๋ค์ด๋ก๋ํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ง์ญ์์๋ ๋ ์ง ํ์, ์ซ์ ํ์ ๋ฐ ํตํ ๊ธฐํธ์ ๋ณํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํน์ JavaScript ๋ชจ๋์ ๋ก๋ํ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋์ ์ํฌํธ์ ์ฝ๋ ๋ถํ ์ ์๋นํ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋ถ์: Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์๊ฐํํ๊ณ ์ฝ๋ ๋ถํ ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์์ญ์ ์๋ณํฉ๋๋ค. ์ด ๋๊ตฌ๋ ๋ฒ๋ค ํฌ๊ธฐ์ ํฌ๊ฒ ๊ธฐ์ฌํ๋ ๋๊ท๋ชจ ์ข ์์ฑ ๋๋ ๋ชจ๋์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- Webpack ๊ตฌ์ฑ ์ต์ ํ: Webpack ๊ตฌ์ฑ์ ๋ฏธ์ธ ์กฐ์ ํ์ฌ ์ฒญํฌ ํฌ๊ธฐ, ์บ์ฑ ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ต์ ํํฉ๋๋ค. ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ ๊ฒฝํ ๊ฐ์ ์ต์ ์ ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ๋ค์ํ ์ค์ ์ ์คํํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ์ฝ๋ ๋ถํ ์ ๊ตฌํํ ํ์๋ ๋ชจ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋๊ณ ์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค. ๋ชจ๋์ด ๋ก๋๋์ง ์๋ ์ฃ์ง ์ผ์ด์ค ๋ฐ ์๋๋ฆฌ์ค์ ํน๋ณํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ๊ณ ๋ ค: ์ฑ๋ฅ ์ต์ ํ๋ ์ค์ํ์ง๋ง ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ์ํ์ง ๋ง์ญ์์ค. ๋ชจ๋์ด ๋ก๋๋๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ๊ฐ ํ์๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์์ฑ์ ์ ์งํ๋์ง ํ์ธํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ง๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ๋ก๋ ๋๋ ์ฌ์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ์ฑ๋ฅ ํ๊ท ๋๋ ์ถ๊ฐ ์ต์ ํ ์์ญ์ ์๋ณํฉ๋๋ค. ๋ก๋ฉ ์๊ฐ, ์ฒซ ๋ฐ์ดํธ๊น์ง์ ์๊ฐ(TTFB) ๋ฐ ์ฒซ ์ฝํ ์ธ ๋ ๋๋ง(FCP)๊ณผ ๊ฐ์ ๋ฉํธ๋ฆญ์ ์ถ์ ํ๊ธฐ ์ํด Google PageSpeed Insights ๋๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ก๋ฉ ์ค๋ฅ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌ: ๋ชจ๋ ๋ก๋์ ์คํจํ๋ ์ํฉ์ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๊ณ ๋ก๋๋ฅผ ๋ค์ ์๋ํ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ด๋ํ๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
๊ฒฐ๋ก
๋์ ์ํฌํธ์ ์ฝ๋ ๋ถํ ์ JavaScript ๋ชจ๋ ๋ก๋ฉ์ ์ต์ ํํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ํ์์ ๋ฐ๋ผ ๋ชจ๋์ ๋ก๋ํ๊ณ ์ฝ๋๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ๋ถํ ํ๋ฉด ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ๊ณ , ๋คํธ์ํฌ ๋์ญํญ์ ์ ์ฝํ๋ฉฐ, ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฑํํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์ ์์น๋ ์ฅ์น์ ๊ด๊ณ์์ด ์ต์์ ๊ฒฝํ์ ์ ๊ณตํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ถ์, ์ต์ ํ ๋ฐ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.