JavaScript ๋ชจ๋ ์์คํ ์ ์งํ๋ฅผ ํ๊ตฌํ๊ณ CommonJS์ ES6 ๋ชจ๋(ESM)์ ์์ธํ ๋น๊ตํฉ๋๋ค. ์ต์ ์น ๊ฐ๋ฐ์์ ์ด๋ค์ ์ฐจ์ด์ , ์ด์ , ํจ๊ณผ์ ์ธ ์ฌ์ฉ๋ฒ์ ์ดํดํ์ธ์.
JavaScript ๋ชจ๋ ์์คํ : CommonJS vs ES6 ๋ชจ๋ - ์ข ํฉ ๊ฐ์ด๋
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ธ๊ณ์์ ๋ชจ๋์ฑ์ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ํต์ฌ์ ๋๋ค. ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๋ถํดํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ด์งํ๊ณ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ ๋ ๊ฐ์ง ์ฃผ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ธ CommonJS์ ES6 ๋ชจ๋(ESM)์ ์์ธํ ๋น๊ตํ๊ณ ์ค์ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ด๋ ๋ฌด์์ธ๊ฐ์?
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ ๋ชจ๋์ ํน์ ๊ธฐ๋ฅ์ ์บก์ํํ๊ณ ๋ค๋ฅธ ๋ชจ๋์ด ์ฌ์ฉํ ์ ์๋๋ก ๊ณต์ฉ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ: ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ: ํ ๋ชจ๋์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ์ ์ด ์ฝ๋ ์ ์ง๋ณด์ ๋ฐ ๋๋ฒ๊น ์ด ์ฌ์์ง๋๋ค.
- ๋ค์์คํ์ด์ค ๊ด๋ฆฌ: ๋ชจ๋์ ์์ฒด ์ค์ฝํ๋ฅผ ์์ฑํ์ฌ ์ฝ๋์ ๋ค๋ฅธ ๋ถ๋ถ ๊ฐ์ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ๋ชจ๋ ์์คํ ์ ํตํด ๋ชจ๋์ ์์กด์ฑ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ ์ ์์ผ๋ฏ๋ก ์ฝ๋์ ๋ค๋ฅธ ๋ถ๋ถ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ดํดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์์ง๋๋ค.
CommonJS: ์๋ฒ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ์ ๊ตฌ์
CommonJS ์๊ฐ
CommonJS๋ ์ฃผ๋ก Node.js์ ๊ฐ์ ์๋ฒ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ์ด๋ ๋ชจ๋์ ์ ์ํ๊ณ ์ฌ์ฉํ๋ ๊ฐ๋จํ๊ณ ๋๊ธฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. CommonJS๋ require()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ module.exports
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๋ด๋ณด๋
๋๋ค.
CommonJS ๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
CommonJS์์ ๋ชจ๋์ ์ ์ํ๊ณ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ชจ๋ (math.js):
// math.js
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = {
add: add,
subtract: subtract
};
์ฌ์ฉ๋ฒ (app.js):
// app.js
const math = require('./math');
console.log(math.add(5, 3)); // Output: 8
console.log(math.subtract(5, 3)); // Output: 2
CommonJS์ ์ฃผ์ ํน์ง
- ๋๊ธฐ ๋ก๋ฉ: ๋ชจ๋์ ๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๊ณ ์คํ๋ฉ๋๋ค. ์ด๋
require()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ๋, ๋ชจ๋์ด ๋ก๋๋๊ณ ์คํ๋ ๋๊น์ง ์ฝ๋ ์คํ์ด ์ผ์ ์ค์ง๋จ์ ์๋ฏธํฉ๋๋ค. - ์๋ฒ ์ธก ์ง์ค: ์ฃผ๋ก Node.js์ ๊ฐ์ ์๋ฒ ์ธก ํ๊ฒฝ์ ์ํด ์ค๊ณ๋์์ต๋๋ค.
- ๋์
require()
: ๋ฐํ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ชจ๋์ ๋ก๋ํ ์ ์์ต๋๋ค (๊ฐ๋ ์ฑ์ ์ํด ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์). - ๋จ์ผ ๋ด๋ณด๋ด๊ธฐ: ๊ฐ ๋ชจ๋์ ๋จ์ผ ๊ฐ ๋๋ ์ฌ๋ฌ ๊ฐ์ ํฌํจํ๋ ๊ฐ์ฒด๋ง ๋ด๋ณด๋ผ ์ ์์ต๋๋ค.
CommonJS์ ์ฅ์
- ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์:
require()
๋ฐmodule.exports
๊ตฌ๋ฌธ์ ์ง๊ด์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. - ์ฑ์ํ ์ํ๊ณ: CommonJS๋ ์ค๋ซ๋์ ์กด์ฌํ์ผ๋ฉฐ ๋ฐฉ๋ํ๊ณ ์ฑ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋๊ตฌ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋๋ฆฌ ์ง์๋จ: Node.js ๋ฐ ๋ค์ํ ๋น๋ ๋๊ตฌ์์ ์ง์๋ฉ๋๋ค.
CommonJS์ ๋จ์
- ๋๊ธฐ ๋ก๋ฉ: ๋๊ธฐ ๋ก๋ฉ์ ํนํ ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์์: CommonJS๋ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ค๋ฉด Browserify ๋๋ Webpack๊ณผ ๊ฐ์ ๋น๋ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
ES6 ๋ชจ๋ (ESM): ํ๋ ํ์ค
ES6 ๋ชจ๋ ์๊ฐ
ES6 ๋ชจ๋(ECMAScript ๋ชจ๋ ๋๋ ESM์ด๋ผ๊ณ ๋ ํจ)์ ECMAScript 2015 (ES6)์ ๋์ ๋ ๊ณต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ๋๋ค. ์ด๋ค์ ๋๊ธฐ ๋ฐ ๋น๋๊ธฐ ๋ก๋ฉ์ ๋ชจ๋ ์ง์ํ์ฌ ๋ชจ๋์ฑ์ ๋ํ ๋ณด๋ค ํ๋์ ์ด๊ณ ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
ES6 ๋ชจ๋ ๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
ES6 ๋ชจ๋์ ์ฌ์ฉํ ๋์ผํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ชจ๋ (math.js):
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
๋๋:
// math.js
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
export {
add,
subtract
};
์ฌ์ฉ๋ฒ (app.js):
// app.js
import { add, subtract } from './math.js';
console.log(add(5, 3)); // Output: 8
console.log(subtract(5, 3)); // Output: 2
์ ์ฒด ๋ชจ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค:
// app.js
import * as math from './math.js';
console.log(math.add(5, 3)); // Output: 8
console.log(math.subtract(5, 3)); // Output: 2
ES6 ๋ชจ๋์ ์ฃผ์ ํน์ง
- ๋น๋๊ธฐ ๋ก๋ฉ: ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๊ณ ์คํ๋์ด ํนํ ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์ง์: ๋น๋ ๋๊ตฌ ์์ด ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์ ์ ๋ถ์: ES6 ๋ชจ๋์ ์ ์ ์ผ๋ก ๋ถ์ํ ์ ์์ต๋๋ค. ์ฆ, ๋ชจ๋์ ์์กด์ฑ์ ์ปดํ์ผ ์๊ฐ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ ํธ๋ฆฌ ์์ดํน(์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ์ ๊ฑฐ)๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ช ๋ช ๋ ๋ด๋ณด๋ด๊ธฐ ๋ฐ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ: ๋ช ๋ช ๋ ๋ด๋ณด๋ด๊ธฐ(์ด๋ฆ์ด ์๋ ์ฌ๋ฌ ๊ฐ ๋ด๋ณด๋ด๊ธฐ)์ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ(๋จ์ผ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ด๋ณด๋ด๊ธฐ)๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค.
ES6 ๋ชจ๋์ ์ฅ์
- ํฅ์๋ ์ฑ๋ฅ: ๋น๋๊ธฐ ๋ก๋ฉ์ ํนํ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์ง์: ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ๋น๋ ๋๊ตฌ๊ฐ ํ์ ์์ต๋๋ค (ํธํ์ฑ ๋ฐ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ํด ์ฌ์ ํ ์์ฃผ ์ฌ์ฉ๋์ง๋ง).
- ์ ์ ๋ถ์: ํธ๋ฆฌ ์์ดํน๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ํ์คํ: ๊ณต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ผ๋ก, ๋ฏธ๋ ํธํ์ฑ๊ณผ ๊ด๋ฒ์ํ ์ฑํ์ ๋ณด์ฅํฉ๋๋ค.
ES6 ๋ชจ๋์ ๋จ์
- ๋ณต์ก์ฑ: ๊ตฌ๋ฌธ์ด CommonJS๋ณด๋ค ์ฝ๊ฐ ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
- ๋๊ตฌ ํ์: ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฐ ์ผ๋ถ ํ๊ฒฝ์์๋ ์ฌ์ ํ Babel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์คํ์ผ๋งํด์ผ ํฉ๋๋ค.
CommonJS vs ES6 ๋ชจ๋: ์์ธ ๋น๊ต
CommonJS์ ES6 ๋ชจ๋์ ์ฃผ์ ์ฐจ์ด์ ์ ์์ฝํ ํ์ ๋๋ค:
ํน์ง | CommonJS | ES6 ๋ชจ๋ |
---|---|---|
๋ก๋ฉ | ๋๊ธฐ์ | ๋น๋๊ธฐ์ (๊ธฐ๋ณธ์ ์ผ๋ก) |
๊ตฌ๋ฌธ | require() , module.exports |
import , export |
ํ๊ฒฝ | ์ฃผ๋ก ์๋ฒ ์ธก (Node.js) | ์๋ฒ ์ธก ๋ฐ ํด๋ผ์ด์ธํธ ์ธก (๋ธ๋ผ์ฐ์ ) ๋ชจ๋ |
๋ธ๋ผ์ฐ์ ์ง์ | ๋น๋ ๋๊ตฌ ํ์ | ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ ์ง์ |
์ ์ ๋ถ์ | ๋ถ์ํ๊ธฐ ์ด๋ ค์ | ์ ์ ๋ถ์ ๊ฐ๋ฅ |
๋ด๋ณด๋ด๊ธฐ | ๋จ์ผ ๋ด๋ณด๋ด๊ธฐ | ๋ช ๋ช ๋ ๋ฐ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ |
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
์์ 1: ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ
๋ฌธ์์ด ์กฐ์ ํจ์๋ฅผ ํฌํจํ๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ES6 ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
string-utils.js:
// string-utils.js
export function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
export function reverse(str) {
return str.split('').reverse().join('');
}
export function toSnakeCase(str) {
return str.replace(/\s+/g, '_').toLowerCase();
}
app.js:
// app.js
import { capitalize, reverse, toSnakeCase } from './string-utils.js';
console.log(capitalize('hello world')); // Output: Hello world
console.log(reverse('hello')); // Output: olleh
console.log(toSnakeCase('Hello World')); // Output: hello_world
์์ 2: React ์ปดํฌ๋ํธ ๊ตฌ์ถ
React ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ ๋ ES6 ๋ชจ๋์ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋๋ค:
MyComponent.js:
// MyComponent.js
import React from 'react';
function MyComponent(props) {
return (
<div>
<h1>Hello, {props.name}!</h1>
</div>
);
}
export default MyComponent;
app.js:
// app.js
import React from 'react';
import ReactDOM from 'react-dom';
import MyComponent from './MyComponent.js';
ReactDOM.render(<MyComponent name="World" />, document.getElementById('root'));
์์ 3: Node.js ์๋ฒ ๊ตฌ์ฑ
CommonJS๊ฐ ์ ํต์ ์ธ ํ์ค์ด์ง๋ง, Node.js๋ ์ด์ ES6 ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค (.mjs
ํ์ฅ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ package.json
์์ "type": "module"
์ ์ค์ ํ์ฌ). ์๋ฒ ์ธก ์ฝ๋์๋ ES6 ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
server.mjs:
// server.mjs
import express from 'express';
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
export default app; // Or, more likely, just leave this out if you aren't importing it anywhere.
์ฌ๋ฐ๋ฅธ ๋ชจ๋ ์์คํ ์ ํ
CommonJS์ ES6 ๋ชจ๋ ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง๋ ํน์ ํ๋ก์ ํธ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:
- Node.js ํ๋ก์ ํธ: ์๋ก์ด Node.js ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค๋ฉด ES6 ๋ชจ๋ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์. Node.js๋ ํ๋ฅญํ ์ง์์ ์ ๊ณตํ๋ฉฐ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค๊ณผ ์ผ์นํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๊ฑฐ์ Node.js ํ๋ก์ ํธ์์ ์์ ํ๋ ๊ฒฝ์ฐ, ํธํ์ฑ ๋ฌธ์ ๋ก CommonJS๊ฐ ๊ธฐ๋ณธ์ ์ด๊ณ ๋ ์ค์ฉ์ ์ธ ์ ํ์ผ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ํ๋ก์ ํธ: ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ํ๋ก์ ํธ์์๋ ES6 ๋ชจ๋์ด ์ ํธ๋๋ ์ ํ์ ๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉฐ, ๋น๋๊ธฐ ๋ก๋ฉ๊ณผ ์ ์ ๋ถ์์ ํตํด ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฒ์ฉ ์๋ฐ์คํฌ๋ฆฝํธ: ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๋ชจ๋์์ ์คํ๋๋ ๋ฒ์ฉ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ, ์ฝ๋ ๊ณต์ ๋ฐ ์ผ๊ด์ฑ์ ์ํด ES6 ๋ชจ๋์ด ์ต์ ์ ์ ํ์ ๋๋ค.
- ๊ธฐ์กด ํ๋ก์ ํธ: ๊ธฐ์กด ํ๋ก์ ํธ์์ ์์ ํ ๋๋ ๊ธฐ์กด ๋ชจ๋ ์์คํ ๊ณผ ๋ค๋ฅธ ์์คํ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋น์ฉ์ ๊ณ ๋ คํ์ธ์. ๊ธฐ์กด ์์คํ ์ด ์ ์๋ํ๊ณ ์๋ค๋ฉด ์ ํํ๋ ๋ ธ๋ ฅ์ด ๊ฐ์น ์์ ์ ์์ต๋๋ค.
CommonJS์์ ES6 ๋ชจ๋๋ก ์ ํํ๊ธฐ
CommonJS์์ ES6 ๋ชจ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ๋ฅผ ๊ณ ๋ คํ์ธ์:
- Babel๋ก ํธ๋์คํ์ผ: ES6 ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ ๊ตฌํ ํ๊ฒฝ์ ์ํด Babel์ ์ฌ์ฉํ์ฌ ES6 ๋ชจ๋ ์ฝ๋๋ฅผ CommonJS๋ก ํธ๋์คํ์ผํ์ธ์.
- ์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ : ์ค๋จ์ ์ต์ํํ๊ธฐ ์ํด ๋ชจ๋์ ํ ๋ฒ์ ํ๋์ฉ ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ์.
- ๋น๋ ๋๊ตฌ ์ ๋ฐ์ดํธ: ๋น๋ ๋๊ตฌ (์: Webpack, Parcel)๊ฐ ES6 ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธ: ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ํ์ ์ฝ๋๋ฅผ ํ ์คํธํ์ฌ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ธ์.
๊ณ ๊ธ ๊ฐ๋ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๋์ import
ES6 ๋ชจ๋์ ๋์ import๋ฅผ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐํ์์ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋ ๋ถํ ๋ฐ ์ง์ฐ ๋ก๋ฉ์ ์ ์ฉํ ์ ์์ต๋๋ค.
async function loadModule() {
const module = await import('./my-module.js');
module.doSomething();
}
loadModule();
ํธ๋ฆฌ ์์ดํน
ํธ๋ฆฌ ์์ดํน์ ๋ชจ๋์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ์ ์ ๋๋ค. ES6 ๋ชจ๋์ ์ ์ ๋ถ์์ ํธ๋ฆฌ ์์ดํน์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์ํ ์์กด์ฑ
์ํ ์์กด์ฑ์ CommonJS์ ES6 ๋ชจ๋ ๋ชจ๋์์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์ด๋ ์์์น ๋ชปํ ๋์๊ณผ ๋ฐํ์ ์ค๋ฅ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ช ํํ ์์กด์ฑ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ์ฌ ์ํ ์์กด์ฑ์ ํผํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ
Webpack, Parcel, Rollup๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ํ ํ์ ๋๊ตฌ์ ๋๋ค. ์ด๋ค์ ๋ฐฐํฌ๋ฅผ ์ํด ๋ชจ๋์ ๋จ์ผ ํ์ผ ๋๋ ์ฌ๋ฌ ํ์ผ๋ก ๋ฌถ๊ณ , ์ฝ๋๋ฅผ ์ต์ ํํ๋ฉฐ, ๊ธฐํ ๋น๋ ์๊ฐ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๋ฏธ๋
ES6 ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ฑ์ ๋ฏธ๋์ ๋๋ค. ์ด๋ค์ ์ฑ๋ฅ, ํ์คํ ๋ฐ ๋๊ตฌ ์ธก๋ฉด์์ CommonJS์ ๋นํด ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ES6 ๋ชจ๋์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์ฑ ๋ณดํธ์ ์ด๊ณ ํ์์ ์ด ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ์ดํดํ๋ ๊ฒ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์๊ฒ ์ค์ํฉ๋๋ค. CommonJS์ ES6 ๋ชจ๋์ ๊ฐ๊ฐ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ํ์ฑํด ์์ต๋๋ค. CommonJS๊ฐ ํนํ Node.js ํ๊ฒฝ์์ ์์ ์ ์ธ ์๋ฃจ์ ์ด์๋ ๋ฐ๋ฉด, ES6 ๋ชจ๋์ ๋ ํ๋์ ์ด๊ณ ํ์คํ๋์์ผ๋ฉฐ ๊ณ ์ฑ๋ฅ์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์ด ๋์ ๋ชจ๋ ์๋ฌํจ์ผ๋ก์จ ์ด๋ค ํ๋ซํผ์์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ค๋น๋ฅผ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์ ๋๋ค.