์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ JavaScript ๋ชจ๋ ์ฑ๋ฅ ๋ฒค์น๋งํน ์ข ํฉ ๊ฐ์ด๋. ๋ชจ๋ฒ ์ฌ๋ก, ํ ์คํธ ๋ฐฉ๋ฒ๋ก , ์ฝ๋ ์ต์ ํ ๋๊ตฌ๋ฅผ ์ตํ์ธ์.
JavaScript ๋ชจ๋ ๋ฒค์น๋งํน: ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํ ๊ธ๋ก๋ฒ ๊ฐ์ด๋
์ค๋๋ ์ํธ ์ฐ๊ฒฐ๋ ๋์งํธ ํ๊ฒฝ์์ JavaScript ๋ชจ๋์ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ต์ฒจ๋จ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ , Node.js๋ฅผ ์ฌ์ฉํ ๊ฒฌ๊ณ ํ ๋ฐฑ์๋ ์๋น์ค, ๋๋ ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ์ฑ์ ๊ฐ๋ฐํ๋ ๊ด๊ณ์์ด, ๋ชจ๋ ๋ก๋ฉ ๋ฐ ์คํ ์๋๋ฅผ ์ดํดํ๊ณ ์ต์ ํํ๋ ๊ฒ์ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถค ์ ์๋ ์ด ์ข ํฉ ๊ฐ์ด๋๋ JavaScript ๋ชจ๋ ๋ฒค์น๋งํน์ ๋ณต์ก์ฑ์ ํ๊ตฌํ์ฌ, ๋ชจ๋ ์ฑ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ํ ์คํธํ๊ณ ๊ฐ์ ํ ์ ์๋ ์ง์๊ณผ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋งฅ๋ฝ์์ ๋ชจ๋ ์ฑ๋ฅ์ ์ค์์ฑ
์์์์ ๋ฒํํ ๋๋์๋ถํฐ ๋จ์๋ฉ๋ฆฌ์นด์ ์ธ๋ด ๋ง์๊น์ง, ์ฌ์ฉ์๋ค์ ๋ค์ํ ์ฅ์น, ๋คํธ์ํฌ ์กฐ๊ฑด ๋ฐ ์ง๋ฆฌ์ ์์น์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํฉ๋๋ค. ๋๋ฆฌ๊ฒ ๋ก๋๋๋ JavaScript ๋ชจ๋์ ๋ค์์ ์ด๋ํ ์ ์์ต๋๋ค:
- ์ฆ๊ฐ๋ ์ง์ฐ ์๊ฐ: ๋คํธ์ํฌ ์ง์ฐ์ด ๋์ ์ง์ญ์ ์ฌ์ฉ์๋ค์ ํจ์ฌ ๋ ํฐ ์ง์ฐ์ ๊ฒฝํํ ๊ฒ์ ๋๋ค.
- ๋ ๋์ ๋ฐ์ดํฐ ์๋น: ๋น๋ํ ๋ชจ๋์ ๊ณผ๋ํ ๋ฐ์ดํฐ๋ฅผ ์๋นํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๊ฐ ๋น์ธ๊ฑฐ๋ ์ ํ์ ์ธ ์ง์ญ์์ ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
- ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ์ง๋ฆฌ์ ์์น์ ๊ด๊ณ์์ด ๋๋ฆฌ๋ค๊ณ ๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ํ ์ฌ์ฉ์๊ฐ ํฌ๊ธฐํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- ๊ฐ์๋ ์ ํ์จ: ์ ์์๊ฑฐ๋ ๋๋ ์๋น์ค ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๋๋ฆฐ ์ฑ๋ฅ์ ๋น์ฆ๋์ค ๋ชฉํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
JavaScript ๋ชจ๋์ ๋ฒค์น๋งํนํ๋ฉด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ํคํ ์ฒ, ์ข ์์ฑ ๋ฐ ์ต์ ํ ์ ๋ต์ ๋ํด ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ ์๋ฐฉ์ ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ ํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ํด ์ฑ๋ฅ์ ์ ์งํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
JavaScript ๋ชจ๋ ์์คํ ์ดํดํ๊ธฐ
๋ฒค์น๋งํน์ ๋ค์ด๊ฐ๊ธฐ ์ ์ JavaScript ๊ฐ๋ฐ์ ํ์ฑํ ๋ค์ํ ๋ชจ๋ ์์คํ ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค:
CommonJS (CJS)
์ฃผ๋ก Node.js ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ CommonJS ๋ชจ๋์ ๋๊ธฐ์์ด๋ฉฐ ์๋ฒ ์ธก ์คํ์ฉ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. require()
ํจ์๋ ๋ชจ๋์ ๋ก๋ํ๊ณ , module.exports
๋๋ exports
๋ ๊ธฐ๋ฅ์ ๋
ธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฑ์ํ๊ณ ๋๋ฆฌ ์ฑํ๋์์ง๋ง, ๊ทธ ๋๊ธฐ์ ํน์ฑ์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค.
Asynchronous Module Definition (AMD)
๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ํ ๋์์ผ๋ก ๊ฐ๋ฐ๋ AMD ๋ชจ๋์ RequireJS์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ข
์ข
๊ตฌํ๋๋ฉฐ ๋น๋๊ธฐ์์
๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ ์คํํ๋ ๋์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณ์ ๋ ๋๋งํ ์ ์์ต๋๋ค. define()
ํจ์๋ AMD์ ํต์ฌ์
๋๋ค.
ECMAScript Modules (ESM)
JavaScript ๋ชจ๋์ ํ๋์ ํ์ค์ธ ESM์ ์ธ์ด ์์ฒด์ ๋ด์ฅ๋์ด ์์ต๋๋ค. import
๋ฐ export
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ESM์ ์ ์ ๋ถ์, ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ(ํธ๋ฆฌ ์
ฐ์ดํน), ๋ฐ ๋ค์ดํฐ๋ธ ๋ธ๋ผ์ฐ์ ์ง์์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ๋น๋๊ธฐ ๋ก๋ฉ ๊ธฐ๋ฅ์ ์น์ ์ต์ ํ๋์ด ์์ต๋๋ค.
๋ชจ๋ ์์คํ ์ ์ ํ์ ํนํ ์ด๊ธฐ ๋ก๋ ์๊ฐ ๋์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด๋ฌํ ์์คํ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฒค์น๋งํนํ๊ฑฐ๋ ์ฌ์ฉ ์ค์ธ ์์คํ ์ ์ฑ๋ฅ ํน์ฑ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
JavaScript ๋ชจ๋์ ์ฃผ์ ์ฑ๋ฅ ์งํ
ํจ๊ณผ์ ์ธ ๋ฒค์น๋งํน์ ๊ด๋ จ ์ฑ๋ฅ ์งํ์ ์ด์ ์ ๋ง์ถฐ์ผ ํฉ๋๋ค. JavaScript ๋ชจ๋์ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ์ญ์์ค:
1. ๋ชจ๋ ๋ก๋ ์๊ฐ
์ด๋ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ , ํ์ฑํ๊ณ , ์คํ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ด๋ ์ข
์ข
์ ์ฒด ์คํฌ๋ฆฝํธ ์คํ ์๊ฐ์ ์ผ๋ถ์
๋๋ค. Node.js์์๋ require()
๋๋ ๋์ ์ํฌํธ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์
๋๋ค.
2. ์คํ ์๊ฐ
๋ชจ๋์ด ๋ก๋๋๋ฉด ์ด ์งํ๋ ์ฝ๋ ์คํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํฉ๋๋ค. ์ด๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ๋ชจ๋ ๋๋ ์ด๊ธฐํ ๋ก์ง์ ํนํ ์ค์ํฉ๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
ํฌ๊ฑฐ๋ ๋นํจ์จ์ ์ธ ๋ชจ๋์ ์๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ฑ์ ์ํฅ์ ๋ฏธ์น๊ณ , ํนํ ๋ง์ ๊ธ๋ก๋ฒ ์์ฅ์์ ํํ ๋ณผ ์ ์๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ์ฅ์น์์๋ ์ถฉ๋๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
4. ์์ ์๊ฐ
์ ํ๋ฆฌ์ผ์ด์ , ํนํ ๋ง์ ์ด๊ธฐ ๋ชจ๋์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๋์ ๋ก๋ ๋ฐ ์คํ ์๊ฐ์ ์ธ์ง๋๋ ์์ ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๋ ์ข ์ข First Contentful Paint (FCP) ๋ฐ Time to Interactive (TTI)์ ๊ฐ์ ์งํ๋ก ์ธก์ ๋ฉ๋๋ค.
5. ๋ฒ๋ค ํฌ๊ธฐ
์ง์ ์ ์ธ ์คํ ์งํ๋ ์๋์ง๋ง, ๋ชจ๋์ ํฌํจํ๋ ๋ฒ๋ค๋ JavaScript์ ํฌ๊ธฐ๋ ๋ก๋ ์๊ฐ์ ์ค์ํ ์์์ ๋๋ค. ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์์์๋ก ํนํ ๋๋ฆฐ ๋คํธ์ํฌ์์ ๋ค์ด๋ก๋ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
๋ฒค์น๋งํน ๋ฐฉ๋ฒ๋ก ๋ฐ ๋๊ตฌ
JavaScript ๋ชจ๋์ ๋ฒค์น๋งํนํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์๊ณผ ๋๊ตฌ๊ฐ ์์ต๋๋ค:
1. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ
๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge)๋ ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๊ธฐ๋ฅ์ ํฌํจํ๋ ๊ฐ๋ ฅํ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ ํญ (Chrome DevTools): ํ์ด์ง ๋ก๋ ๋ฐ ์ํธ ์์ฉ์ ๊ธฐ๋กํ์ฌ CPU ํ๋, ์คํฌ๋ฆฝํธ ์คํ, ๋คํธ์ํฌ ์์ฒญ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ถ์ํฉ๋๋ค. ๋ชจ๋ ๋ก๋ฉ๊ณผ ๊ด๋ จ๋ ์ค๋ ์คํ๋๋ ์คํฌ๋ฆฝํธ ์์ ์ ํน๋ณํ ์๋ณํ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ํญ: ๋ชจ๋์ ํฌํจํ ๊ฐ๋ณ JavaScript ํ์ผ์ ํฌ๊ธฐ์ ๋ก๋ ์๊ฐ์ ๊ด์ฐฐํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํญ: ๋ฉ๋ชจ๋ฆฌ ์ค๋ ์ท์ ํ๋กํ์ผ๋งํ์ฌ ๋ชจ๋์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ๊ฐ์งํฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ : ํ ์คํธํ ๋, ์ ์ฌ์ ์ผ๋ก ์ ๋ขฐ๋๊ฐ ๋ฎ์ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ๊ฐ์ง ๋ค์ํ ์ง์ญ์ ์ฌ์ฉ์๋ฅผ ๋ชจ๋ฐฉํ๊ธฐ ์ํด ๋ค๋ฅธ ๋คํธ์ํฌ ์กฐ๊ฑด(์: Fast 3G, Slow 3G) ๋ฐ ์ค๋กํ๋ง์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
2. Node.js ์ฑ๋ฅ ๋๊ตฌ
๋ฐฑ์๋ ๋ฒค์น๋งํน์ ์ํด Node.js๋ ๋ด์ฅ ๋๊ตฌ ๋ฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค:
- `console.time()` ๋ฐ `console.timeEnd()`: ๊ฐ๋จํ์ง๋ง, ๋ชจ๋ ๋ก๋ฉ ๋๋ ๋ชจ๋ ๋ด ํจ์ ์คํ์ ํฌํจํ ํน์ ์์ ์ ์ง์ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.
- Node.js Inspector API: Node.js ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง์ ์ํด Chrome DevTools์ ํตํฉ์ ํ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ํ๋กํ์ผ๋ง๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- Benchmark.js: ์์คํ ๋ณ๋์ ์ํฅ์ ์ต์ํํ๋ฉด์ ์ ํํ ํต๊ณ ์ธก์ ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ๋ ๊ฒฌ๊ณ ํ JavaScript ๋ฒค์น๋งํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
์์ (Benchmark.js๋ฅผ ์ฌ์ฉํ Node.js):
const Benchmark = require('benchmark');
const suite = new Benchmark.Suite();
// Load a module
suite.add('Module Load and Execute', function() {
require('./my-module'); // Or import('./my-module') for ESM
})
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
.run();
3. ๋ฒ๋ค๋ฌ ๋ถ์ ๋๊ตฌ
Webpack Bundle Analyzer ๋๋ Rollup Plugin Visualizer์ ๊ฐ์ ๋๊ตฌ๋ JavaScript ๋ฒ๋ค์ ๋ด์ฉ๊ณผ ํฌ๊ธฐ๋ฅผ ์๊ฐํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ๋ก๋ ์๊ฐ ์ฆ๊ฐ์ ๊ธฐ์ฌํ๋ ๋ชจ๋ ๋ด์ ํฐ ์ข ์์ฑ ๋๋ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- Webpack Bundle Analyzer: ๋ฒ๋ค์ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด๋ gzip ์์ถ HTML ํ์ผ์ ์์ฑํ์ฌ ๊ณผ๋ํ๊ฒ ํฐ ๋ชจ๋์ ์ ํํ ์ฐพ์๋ผ ์ ์์ต๋๋ค.
- Rollup Plugin Visualizer: Rollup ํ๋ก์ ํธ์ ๋ํ ์ ์ฌํ ๊ธฐ๋ฅ์ ๋๋ค.
๊ธ๋ก๋ฒ ์ํฅ: ๋ฒ๋ค ๊ตฌ์ฑ์ ๋ถ์ํ๋ ๊ฒ์ ๋์ญํญ์ด ์ ํ๋ ์ฐ๊ฒฐ์ ์ฌ์ฉ์์กฐ์ฐจ๋ ํ์ํ ๊ฒ๋ง ๋ค์ด๋ก๋ํ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
4. ํฉ์ฑ ๋ชจ๋ํฐ๋ง ๋ฐ ์ค์ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง (RUM)
์ง์์ ์ธ ์ฑ๋ฅ ์ถ์ ์ ์ํด:
- ํฉ์ฑ ๋ชจ๋ํฐ๋ง: Pingdom, GTmetrix, ๋๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ ๋ค์ํ ๊ธ๋ก๋ฒ ์์น์์ ์ฌ์ฉ์ ๋ฐฉ๋ฌธ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ก๋ ์๊ฐ ๋ฐ ์ฑ๋ฅ ์ ์๋ฅผ ํ ์คํธํฉ๋๋ค. ์ด๋ ๊ฐ๊ด์ ์ด๊ณ ์ผ๊ด๋ ์ธก์ ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- ์ค์ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง (RUM): Sentry, Datadog, ๋๋ New Relic๊ณผ ๊ฐ์ ์๋น์ค๋ ์ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ง์ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค. ์ด๋ ๋ค์ํ ์ฅ์น, ๋คํธ์ํฌ ๋ฐ ์ง๋ฆฌ์ ์์น์์ ๋ชจ๋์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ๋ต: RUM ๋ฐ์ดํฐ๋ ์ ์ฒด ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๊ฑธ์น ์ค์ ์ฑ๋ฅ์ ์ดํดํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋์น ์ ์๋ ์ง์ญ๋ณ ์ฐจ์ด๋ฅผ ๋ฐํ๋ด๋ ๋ฐ ํนํ ๊ฐ๋ ฅํฉ๋๋ค.
๋ชจ๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ ๋ต
๋ฒค์น๋งํน์ ํตํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ค๋ฉด, ๋ค์ ์ต์ ํ ์ ๋ต์ ๊ตฌํํ์ญ์์ค:
1. ์ฝ๋ ๋ถํ
ํฐ JavaScript ๋ฒ๋ค์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ(์ฝ๋ ๋ถํ )๋ก ๋๋๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ํ์ฌ ํ์ด์ง ๋๋ ๊ธฐ๋ฅ์ ํ์ํ ๋ชจ๋๋ง ๋ค์ด๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. Webpack, Rollup, Parcel๊ณผ ๊ฐ์ ํ๋ ๋ฒ๋ค๋ฌ๋ ์ฌ์ด ์ฝ๋ ๋ถํ ์ ์ํด ๋์ ์ํฌํธ(import()
)๋ฅผ ์ง์ํฉ๋๋ค.
์์ (๋์ ์ํฌํธ):
// Instead of: import heavyUtil from './heavyUtil';
// Use:
const button = document.getElementById('myButton');
button.addEventListener('click', () => {
import('./heavyUtil').then(module => {
module.default(); // Or module.specificFunction()
});
});
2. ํธ๋ฆฌ ์ ฐ์ดํน
ํธ๋ฆฌ ์ ฐ์ดํน์ ๋ฒ๋ค๋ฌ๊ฐ ์ต์ข ๋ฒ๋ค์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋(๋ฐ๋ ์ฝ๋)๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ์ํฌํธ์ ์ต์คํฌํธ์ ์ ์ ํน์ฑ์ด ๋ฒ๋ค๋ฌ๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ ๊ฒฐ์ ํ ์ ์๊ฒ ํ๋ฏ๋ก ESM์์ ํนํ ํจ๊ณผ์ ์ ๋๋ค. ๋ชจ๋์ด ESM์ ์ฌ์ฉํ์ฌ ์์ฑ๋์๋์ง ํ์ธํ๊ณ ๋ฒ๋ค๋ฌ๊ฐ ํธ๋ฆฌ ์ ฐ์ดํน์ ์ํด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ญ์์ค.
3. ์ข ์์ฑ ์ต์ํ
ํฌํจํ๋ ๊ฐ ์ธ๋ถ ๋ชจ๋ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์์ฒด์ ์ธ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ์ข ์์ฑ์ ๊ฒํ ํ์ญ์์ค:
package.json
ํ์ผ์ ๊ฐ์ฌํ์ญ์์ค.- ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ ์๊ณ ์ฑ๋ฅ์ด ์ข์ ๋์์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ถํ์ํ ์ข ์์ฑ ๊น์ด ์ค์ฒฉ์ ํผํ์ญ์์ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ: ๋์ญํญ์ด ์ ํ๋ ์ง์ญ์์๋ ์ด JavaScript ํ์ด๋ก๋๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ง์ ์ ์ธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
4. Node.js์์ ๋ชจ๋ ๋ก๋ฉ ์ต์ ํ
์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ:
- ESM ์ ํธ: CommonJS๊ฐ ๋๋ฆฌ ์ฌ์ฉ๋์ง๋ง, Node.js์ ESM ์ง์์ ์ฑ์ํด์ง๊ณ ์์ต๋๋ค. ESM์ ๋ ๋์ ์ ์ ๋ถ์ ๋ฐ ์ผ๋ถ ์๋๋ฆฌ์ค์์ ์ ์ฌ์ ์ผ๋ก ๋ ๋น ๋ฅธ ๋ก๋ฉ๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์บ์ฑ: Node.js๋ ์ฒซ ๋ฒ์งธ ๋ก๋ ํ ๋ชจ๋์ ์บ์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ๋ถํ์ํ๊ฒ ๋ชจ๋์ ๋ค์ ๋ก๋ํ๋๋ก ๊ฐ์ ํ์ง ์๋๋ก ํ์ญ์์ค.
- AOT (Ahead-of-Time) ์ปดํ์ผ: ์ฑ๋ฅ์ด ์ค์ํ ๋ฐฑ์๋ ์๋น์ค์ ๊ฒฝ์ฐ, ๋ชจ๋์ ๋ฏธ๋ฆฌ ์ปดํ์ผํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ์์ ์ง์ฐ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋๊ตฌ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
5. ์๋ฒ ์ธก ๋ ๋๋ง (SSR) ๋ฐ ์ฌ์ ๋ ๋๋ง
ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, SSR ๋๋ ์ฌ์ ๋ ๋๋ง๊ณผ ๊ฐ์ ๊ธฐ์ ์ ๋ฏธ๋ฆฌ ๋ ๋๋ง๋ HTML์ ํด๋ผ์ด์ธํธ์ ์ ์กํ์ฌ ์ธ์ง๋๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋ ์คํ ์๋๋ฅผ ์ง์ ๋ฒค์น๋งํนํ์ง๋ ์์ง๋ง, JavaScript๊ฐ ์์ ํ ์ํธ ์์ฉํ๊ธฐ ์ ์ ์ด๊ธฐ ์ฌ์ฉ์ ๊ฒฝํ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
6. ์น ์์ปค
๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ธ๋กํ ์ ์๋ ๋ชจ๋ ๋ด์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๊ฒฝ์ฐ, ์ด๋ฅผ ์น ์์ปค๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ๋๋ฆฐ ์ฅ์น ๋๋ ๋คํธ์ํฌ์์๋ UI๋ฅผ ๋ฐ์ํ์ผ๋ก ์ ์งํฉ๋๋ค.
์์: ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ชจ๋์ ์น ์์ปค๋ก ์ด๋ํ ์ ์์ต๋๋ค.
7. HTTP/2 ๋ฐ HTTP/3
์๋ฒ๊ฐ ์ต์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ์ญ์์ค. HTTP/2 ๋ฐ HTTP/3์ ๋ค์คํ ๋ฐ ํค๋ ์์ถ์ ์ ๊ณตํ์ฌ HTTP/1.1์ ๋นํด ์ฌ๋ฌ ์์ ๋ชจ๋ ํ์ผ์ ๋ก๋ฉ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค.
๋ค์ํ ํ๊ฒฝ์์ ๋ฒค์น๋งํน
JavaScript๋ ๋ค์ํ ํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค. ๋ฒค์น๋งํน ์ ๋ต์ ์ด๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
- ๋ธ๋ผ์ฐ์ : ์ฃผ์ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge)์์ ํ ์คํธํ๊ณ , ๋์ ๊ณ ๊ฐ์ ๋ ๊ฑฐ์ ์์คํ ์ฌ์ฉ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ด์ ๋ฒ์ ๋ ๊ณ ๋ คํ์ญ์์ค. ๋ชจ๋ฐ์ผ ์ฅ์น ๋ฐ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์๋ฎฌ๋ ์ด์ ํ์ญ์์ค.
- Node.js: ์ฑ๋ฅ ํน์ฑ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ Node.js ๋ฒ์ ์์ ์๋ฒ ์ธก ๋ชจ๋์ ๋ฒค์น๋งํนํ์ญ์์ค.
- ์น๋ทฐ ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์ฑ: JavaScript๊ฐ ๋ชจ๋ฐ์ผ ์ฑ ์น๋ทฐ ๋ด์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ด๋ฌํ ํ๊ฒฝ์๋ ์์ฒด์ ์ธ ์ฑ๋ฅ ๋ฏธ๋ฌํจ๊ณผ ์ ํ ์ฌํญ์ด ์์ ์ ์์์ ๊ธฐ์ตํ์ญ์์ค.
๊ธ๋ก๋ฒ ํ ์คํธ ์ธํ๋ผ: ์ค์ ์ง์ฐ ์๊ฐ ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ํํ๊ฒ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ง๋ฆฌ์ ์ง์ญ์์ ๊ฐ์ ๋จธ์ ๋๋ ์ฅ์น๋ฅผ ์คํ์ ํ ์ ์๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ ์คํธ ํ๋ซํผ์ ํ์ฉํ์ญ์์ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ํจ์
- ์๊ธฐ์์กฐ ์ต์ ํ: ๋ณ๋ชฉ ํ์์ด ์๋ ์ฝ๋์ ๊ณผ๋ํ ์๊ฐ์ ๋ค์ฌ ์ต์ ํํ์ง ๋ง์ญ์์ค. ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ฅ์ ์๋ดํ์ญ์์ค.
- ๋คํธ์ํฌ ์กฐ๊ฑด ๋ฌด์: ๋น ๋ฅธ ๋ก์ปฌ ์ฐ๊ฒฐ์์๋ง ๋ฒค์น๋งํนํ๋ฉด ๋๋ฆฐ ๋คํธ์ํฌ์ ์ฌ์ฉ์๊ฐ ๊ฒฝํํ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด์ง ์์ต๋๋ค.
- ์ผ๊ด์ฑ ์๋ ํ ์คํธ: ๋ฒค์น๋งํน ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ณต ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค. ๋ถํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ซ๊ณ , ์ ์ฉ ํ ์คํธ ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ , ํ ์คํธ ์ค ์๋ ๊ฐ์ญ์ ํผํ์ญ์์ค.
- ์ฃ์ง ์ผ์ด์ค ํ ์คํธ ๋๋ฝ: ๋ชจ๋์ด ๊ณผ๋ถํ ์ํ ๋๋ ํน์ , ๋ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ ๋ ฅ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ณ ๋ คํ์ญ์์ค.
- ๋ธ๋ผ์ฐ์ /Node.js ํน์ ์ฌํญ ๋ฌด์: ๋ชจ๋ ๋ก๋ฉ ๋ฐ ์คํ์ ํ๊ฒฝ๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค. ๊ทธ์ ๋ฐ๋ผ ํ ์คํธํ์ญ์์ค.
๊ฒฐ๋ก : ๊ณ ์ฑ๋ฅ ๊ธ๋ก๋ฒ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ํฅํ์ฌ
JavaScript ๋ชจ๋ ์ฑ๋ฅ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ผํ์ฑ ์์ ์ด ์๋๋ผ ์ง์์ ์ธ ๊ณผ์ ์ ๋๋ค. ๋ชจ๋์ ์ฒด๊ณ์ ์ผ๋ก ๋ฒค์น๋งํนํ๊ณ , ๋ค์ํ ๋ชจ๋ ์์คํ ์ ์ํฅ์ ์ดํดํ๊ณ , ํจ๊ณผ์ ์ธ ์ต์ ํ ์ ๋ต์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํ์ํ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ค์ฌ ์ ๊ทผ ๋ฐฉ์์ ์์ฉํ๊ณ , ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉฐ, ์ ์ธ๊ณ ๋์งํธ ๋ฌด๋๋ฅผ ์ํ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ๊ทผ ๊ฐ๋ฅํ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ฐ๋ณตํ์ญ์์ค.
๊ธฐ์ตํ์ญ์์ค, ์ฑ๋ฅ์ ๊ธฐ๋ฅ์ ๋๋ค. ์ฌ์ฉ์๋ค์ด ์ฆ๊ฐ์ ์ธ ๋ง์กฑ์ ์๊ตฌํ๋ ์ธ์์์ JavaScript ๋ชจ๋์ ์ต์ ํํ๋ ๊ฒ์ ์ฌ์ฉ์ ๋ง์กฑ๊ณผ ๋น์ฆ๋์ค ์ฑ๊ณต์ ์ํ ์ค์ํ ํฌ์์ ๋๋ค.