ECMAScript (ES) λͺ¨λμ μ€μ¬μΌλ‘ μλ°μ€ν¬λ¦½νΈ λͺ¨λ νμ€μ 볡μ‘μ±κ³Ό μ΄μ , μ¬μ©λ², νΈνμ± λ° μ΅μ μΉ κ°λ° λν₯μ μ¬μΈ΅μ μΌλ‘ μ΄ν΄λ΄ λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ νμ€: ECMAScript κ·κ²© μ¬μΈ΅ λΆμ
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ κ²μ λ§€μ° μ€μν΄μ‘μ΅λλ€. λͺ¨λ μμ€ν μ λκ·λͺ¨ μ½λλ² μ΄μ€λ₯Ό μ‘°μ§νκ³ κ΅¬μ‘°ννλ©°, μ¬μ¬μ©μ±μ λμ΄κ³ μ μ§λ³΄μμ±μ ν₯μμν€λ ν΅μ¬μ λλ€. μ΄ κΈμμλ μ΅μ μλ°μ€ν¬λ¦½νΈ κ°λ°μ 곡μ νμ€μΈ ECMAScript (ES) λͺ¨λμ μ€μ μ λκ³ μλ°μ€ν¬λ¦½νΈ λͺ¨λ νμ€μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡ν©λλ€. ES λͺ¨λμ μ΄μ , μ¬μ©λ², νΈνμ± κ³ λ € μ¬ν λ° λ―Έλ λν₯μ μ΄ν΄λ³΄κ³ , μ¬λ¬λΆμ νλ‘μ νΈμμ λͺ¨λμ ν¨κ³Όμ μΌλ‘ νμ©ν μ μλ μ§μμ κ°μΆλλ‘ λκ² μ΅λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ΄λ 무μμΈκ°?
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμμ κ°μ Έμ μ¬μ©ν μ μλ λ 립μ μ΄κ³ μ¬μ¬μ© κ°λ₯ν μ½λ λ¨μμ λλ€. λͺ¨λμ κΈ°λ₯μ μΊ‘μννμ¬ μ μ λ€μμ€νμ΄μ€ μ€μΌμ λ°©μ§νκ³ μ½λ ꡬμ±μ ν₯μμν΅λλ€. 볡μ‘ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν λΉλ© λΈλ‘μ΄λΌκ³ μκ°ν μ μμ΅λλ€.
λͺ¨λ μ¬μ©μ μ΄μ
- ν₯μλ μ½λ ꡬμ±: λͺ¨λμ μ¬μ©νλ©΄ λκ·λͺ¨ μ½λλ² μ΄μ€λ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λ¨μλ‘ λλ μ μμ΄ μ΄ν΄, μ μ§λ³΄μ, λλ²κΉ μ΄ λ μ¬μμ§λλ€.
- μ¬μ¬μ©μ±: λͺ¨λμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ΄λ λ€λ₯Έ νλ‘μ νΈμμλ μ¬μ¬μ©ν μ μμ΄ μ½λ μ€λ³΅μ μ€μ΄κ³ μΌκ΄μ±μ λμ λλ€.
- μΊ‘μν: λͺ¨λμ λ΄λΆ ꡬν μΈλΆ μ 보λ₯Ό μΊ‘μννμ¬ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆκ³Ό μΆ©λνλ κ²μ λ°©μ§ν©λλ€. μ΄λ λͺ¨λμ±μ μ΄μ§νκ³ μ΄λ¦ μΆ©λμ μνμ μ€μ λλ€.
- μμ‘΄μ± κ΄λ¦¬: λͺ¨λμ μμ‘΄μ±μ λͺ μμ μΌλ‘ μ μΈνμ¬ μ΄λ€ λ€λ₯Έ λͺ¨λμ μμ‘΄νλμ§ λͺ ννκ² ν©λλ€. μ΄λ μμ‘΄μ± κ΄λ¦¬λ₯Ό λ¨μννκ³ λ°νμ μ€λ₯μ μνμ μ€μ λλ€.
- ν μ€νΈ μ©μ΄μ±: λͺ¨λμ μμ‘΄μ±μ΄ λͺ ννκ² μ μλμ΄ μκ³ μ½κ² λͺ¨μ(mock)νκ±°λ μ€ν (stub)ν μ μμΌλ―λ‘ λ 립μ μΌλ‘ ν μ€νΈνκΈ°κ° λ μ½μ΅λλ€.
μμ¬μ λ°°κ²½: μ΄μ μ λͺ¨λ μμ€ν
ES λͺ¨λμ΄ νμ€μ΄ λκΈ° μ , μλ°μ€ν¬λ¦½νΈμμ μ½λ ꡬμ±μ μν νμμ±μ ν΄κ²°νκΈ° μν΄ μ¬λ¬ λ€λ₯Έ λͺ¨λ μμ€ν μ΄ λ±μ₯νμ΅λλ€. μ΄λ¬ν μμ¬μ μμ€ν μ μ΄ν΄νλ©΄ ES λͺ¨λμ μ₯μ μ μ΄ν΄νλ λ° κ·μ€ν λ§₯λ½μ μ»μ μ μμ΅λλ€.
CommonJS
CommonJSλ μ£Όλ‘ Node.jsμ κ°μ μλ² μΈ‘ μλ°μ€ν¬λ¦½νΈ νκ²½μ μν΄ μ€κ³λμμ΅λλ€. require()
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ κ°μ Έμ€κ³ module.exports
κ°μ²΄λ₯Ό μ¬μ©νμ¬ λͺ¨λμ λ΄λ³΄λ
λλ€.
μμ (CommonJS):
// math.js
function add(a, b) {
return a + b;
}
module.exports = {
add: add
};
// app.js
const math = require('./math');
console.log(math.add(2, 3)); // Output: 5
CommonJSλ λκΈ°μμΌλ‘ μλνλ©°, μ΄λ λͺ¨λμ΄ μμ²λ μμλλ‘ λ‘λλλ€λ κ²μ μλ―Έν©λλ€. μ΄λ νμΌ μ κ·Όμ΄ λΉ λ₯Έ μλ² μΈ‘ νκ²½μμλ μ μλνμ§λ§, λ€νΈμν¬ μμ²μ΄ λλ¦° λΈλΌμ°μ μμλ λ¬Έμ κ° λ μ μμ΅λλ€.
λΉλκΈ° λͺ¨λ μ μ (AMD)
AMDλ λΈλΌμ°μ μμ λΉλκΈ° λͺ¨λ λ‘λ©μ μν΄ μ€κ³λμμ΅λλ€. define()
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λκ³Ό κ·Έ μμ‘΄μ±μ μ μν©λλ€. RequireJSλ AMD λͺ
μΈμ μΈκΈ° μλ ꡬν체μ
λλ€.
μμ (AMD):
// math.js
define(function() {
function add(a, b) {
return a + b;
}
return {
add: add
};
});
// app.js
require(['./math'], function(math) {
console.log(math.add(2, 3)); // Output: 5
});
AMDλ λΈλΌμ°μ μ λΉλκΈ° λ‘λ© λ¬Έμ λ₯Ό ν΄κ²°νμ¬ λͺ¨λμ λ³λ ¬λ‘ λ‘λν μ μκ² ν΄μ€λλ€. νμ§λ§ CommonJSλ³΄λ€ λ μ₯ν©ν μ μμ΅λλ€.
μ¬μ©μ μ μ λͺ¨λ (UDM)
CommonJSμ AMDκ° νμ€νλκΈ° μ μλ μ’ μ’ μ¬μ©μ μ μ λͺ¨λ(UDM)μ΄λΌκ³ λΆλ¦¬λ λ€μν 컀μ€ν λͺ¨λ ν¨ν΄μ΄ μ‘΄μ¬νμ΅λλ€. μ΄λ μΌλ°μ μΌλ‘ ν΄λ‘μ μ μ¦μ μ€ν ν¨μ ννμ(IIFE)μ μ¬μ©νμ¬ λͺ¨λμ μ€μ½νλ₯Ό λ§λ€κ³ μμ‘΄μ±μ κ΄λ¦¬νλ λ°©μμΌλ‘ ꡬνλμμ΅λλ€. UDMμ μ΄λ μ λμ λͺ¨λμ±μ μ 곡νμ§λ§, 곡μμ μΈ λͺ μΈκ° μμ΄ λκ·λͺ¨ νλ‘μ νΈμμλ λΆμΌμΉμ μ΄λ €μμ μ΄λνμ΅λλ€.
ECMAScript λͺ¨λ (ES λͺ¨λ): νμ€
ECMAScript 2015 (ES6)μμ λμ λ ES λͺ¨λμ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ 곡μ νμ€μ λλ€. μ΅μ λΈλΌμ°μ μ Node.jsμμ λ΄μ₯ μ§μμ ν΅ν΄ μ½λλ₯Ό ꡬμ±νλ νμ€νλκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€.
ES λͺ¨λμ μ£Όμ νΉμ§
- νμ€νλ ꡬ문: ES λͺ¨λμ
import
μexport
ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μνκ³ μ¬μ©νλ λͺ ννκ³ μΌκ΄λ ꡬ문μ μ 곡ν©λλ€. - λΉλκΈ° λ‘λ©: ES λͺ¨λμ κΈ°λ³Έμ μΌλ‘ λΉλκΈ°μ μΌλ‘ λ‘λλμ΄ λΈλΌμ°μ μ μ±λ₯μ ν₯μμν΅λλ€.
- μ μ λΆμ: ES λͺ¨λμ μ μ μΌλ‘ λΆμλ μ μμ΄ λ²λ€λ¬λ νμ 체컀μ κ°μ λκ΅¬κ° μ½λλ₯Ό μ΅μ ννκ³ μ€λ₯λ₯Ό μ‘°κΈ°μ λ°κ²¬ν μ μμ΅λλ€.
- μν μμ‘΄μ± μ²λ¦¬: ES λͺ¨λμ CommonJSλ³΄λ€ μν μμ‘΄μ±μ λ μννκ² μ²λ¦¬νμ¬ λ°νμ μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
import
μ export
μ¬μ©νκΈ°
import
μ export
ν€μλλ ES λͺ¨λμ κΈ°λ³Έμ
λλ€.
λͺ¨λ λ΄λ³΄λ΄κΈ°
export
ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λμμ κ°(λ³μ, ν¨μ, ν΄λμ€)μ λ΄λ³΄λΌ μ μμ΅λλ€. λ΄λ³΄λ΄κΈ°μλ 'μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°(named exports)'μ 'κΈ°λ³Έ λ΄λ³΄λ΄κΈ°(default exports)' λ κ°μ§ μ£Όμ μ νμ΄ μμ΅λλ€.
μ΄λ¦ μλ λ΄λ³΄λ΄κΈ° (Named Exports)
μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°λ₯Ό μ¬μ©νλ©΄ λͺ¨λμμ κ°κ° νΉμ μ΄λ¦μ κ°μ§ μ¬λ¬ κ°μ λ΄λ³΄λΌ μ μμ΅λλ€.
μμ (μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°):
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
κΈ°λ³Έ λ΄λ³΄λ΄κΈ° (Default Exports)
κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ¬μ©νλ©΄ λͺ¨λμμ λ¨μΌ κ°μ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ‘ λ΄λ³΄λΌ μ μμ΅λλ€. μ΄λ μ£Όλ‘ μ£Όμ ν¨μλ ν΄λμ€λ₯Ό λ΄λ³΄λΌ λ μ¬μ©λ©λλ€.
μμ (κΈ°λ³Έ λ΄λ³΄λ΄κΈ°):
// math.js
export default function add(a, b) {
return a + b;
}
λμΌν λͺ¨λμμ μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°μ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό ν¨κ» μ¬μ©ν μλ μμ΅λλ€.
μμ (κ²°ν©λ λ΄λ³΄λ΄κΈ°):
// math.js
export function subtract(a, b) {
return a - b;
}
export default function add(a, b) {
return a + b;
}
λͺ¨λ κ°μ Έμ€κΈ°
import
ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λμμ κ°μ κ°μ Έμ¬ μ μμ΅λλ€. κ°μ Έμ€κΈ° ꡬ문μ μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°λ₯Ό κ°μ Έμ€λμ§, κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό κ°μ Έμ€λμ§μ λ°λΌ λ€λ¦
λλ€.
μ΄λ¦ μλ λ΄λ³΄λ΄κΈ° κ°μ Έμ€κΈ°
μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°λ₯Ό κ°μ Έμ€λ €λ©΄ λ€μ ꡬ문μ μ¬μ©ν©λλ€:
import { name1, name2, ... } from './module';
μμ (μ΄λ¦ μλ λ΄λ³΄λ΄κΈ° κ°μ Έμ€κΈ°):
// app.js
import { add, subtract } from './math.js';
console.log(add(2, 3)); // Output: 5
console.log(subtract(5, 2)); // Output: 3
λν as
ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ Έμ¨ κ°μ μ΄λ¦μ λ°κΏ μ μμ΅λλ€:
// app.js
import { add as sum, subtract as difference } from './math.js';
console.log(sum(2, 3)); // Output: 5
console.log(difference(5, 2)); // Output: 3
λͺ¨λ μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°λ₯Ό λ¨μΌ κ°μ²΄λ‘ κ°μ Έμ€λ €λ©΄ λ€μ ꡬ문μ μ¬μ©ν μ μμ΅λλ€:
import * as math from './math.js';
console.log(math.add(2, 3)); // Output: 5
console.log(math.subtract(5, 2)); // Output: 3
κΈ°λ³Έ λ΄λ³΄λ΄κΈ° κ°μ Έμ€κΈ°
κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό κ°μ Έμ€λ €λ©΄ λ€μ ꡬ문μ μ¬μ©ν©λλ€:
import moduleName from './module';
μμ (κΈ°λ³Έ λ΄λ³΄λ΄κΈ° κ°μ Έμ€κΈ°):
// app.js
import add from './math.js';
console.log(add(2, 3)); // Output: 5
λν λμΌν λ¬Έμ₯μμ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°μ μ΄λ¦ μλ λ΄λ³΄λ΄κΈ°λ₯Ό λͺ¨λ κ°μ Έμ¬ μ μμ΅λλ€:
// app.js
import add, { subtract } from './math.js';
console.log(add(2, 3)); // Output: 5
console.log(subtract(5, 2)); // Output: 3
λμ κ°μ Έμ€κΈ° (Dynamic Imports)
ES λͺ¨λμ λμ κ°μ Έμ€κΈ°λ μ§μν©λλ€. μ΄λ₯Ό ν΅ν΄ import()
ν¨μλ₯Ό μ¬μ©νμ¬ λ°νμμ λΉλκΈ°μ μΌλ‘ λͺ¨λμ λ‘λν μ μμ΅λλ€. μ΄λ νμμ λ°λΌ λͺ¨λμ λ‘λνμ¬ μ΄κΈ° νμ΄μ§ λ‘λ μ±λ₯μ ν₯μμν€λ λ° μ μ©ν μ μμ΅λλ€.
μμ (λμ κ°μ Έμ€κΈ°):
// app.js
async function loadModule() {
try {
const math = await import('./math.js');
console.log(math.add(2, 3)); // Output: 5
} catch (error) {
console.error('Failed to load module:', error);
}
}
loadModule();
λΈλΌμ°μ νΈνμ± λ° λͺ¨λ λ²λ€λ¬
μ΅μ λΈλΌμ°μ λ ES λͺ¨λμ κΈ°λ³Έμ μΌλ‘ μ§μνμ§λ§, ꡬν λΈλΌμ°μ μμλ ES λͺ¨λμ μ΄ν΄ν μ μλ νμμΌλ‘ λ³ννκΈ° μν΄ λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©ν΄μΌ ν μ μμ΅λλ€. λͺ¨λ λ²λ€λ¬λ μ½λ μΆμ, νΈλ¦¬ μμ΄νΉ, μμ‘΄μ± κ΄λ¦¬μ κ°μ μΆκ° κΈ°λ₯λ μ 곡ν©λλ€.
λͺ¨λ λ²λ€λ¬
λͺ¨λ λ²λ€λ¬λ ES λͺ¨λμ ν¬ν¨ν μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό κ°μ Έμ λΈλΌμ°μ μμ λ‘λν μ μλ νλ μ΄μμ νμΌλ‘ λ¬Άλ λꡬμ λλ€. μΈκΈ° μλ λͺ¨λ λ²λ€λ¬λ λ€μκ³Ό κ°μ΅λλ€:
- Webpack: λ§€μ° κ΅¬μ± κ°λ₯νκ³ λ€μ¬λ€λ₯ν λͺ¨λ λ²λ€λ¬μ λλ€.
- Rollup: λ μκ³ ν¨μ¨μ μΈ λ²λ€μ μμ±νλ λ° μ€μ μ λ λ²λ€λ¬μ λλ€.
- Parcel: μ¬μ©νκΈ° μ¬μ΄ μ λ‘ κ΅¬μ± λ²λ€λ¬μ λλ€.
μ΄λ¬ν λ²λ€λ¬λ μ½λλ₯Ό λΆμνκ³ , μμ‘΄μ±μ μλ³νλ©°, μ΄λ₯Ό λΈλΌμ°μ μμ ν¨μ¨μ μΌλ‘ λ‘λν μ μλ μ΅μ νλ λ²λ€λ‘ κ²°ν©ν©λλ€. λν μ½λλ₯Ό λ μμ μ²ν¬λ‘ λλμ΄ νμμ λ°λΌ λ‘λν μ μκ² ν΄μ£Όλ μ½λ λΆν κ³Ό κ°μ κΈ°λ₯λ μ 곡ν©λλ€.
λΈλΌμ°μ νΈνμ±
λλΆλΆμ μ΅μ λΈλΌμ°μ λ ES λͺ¨λμ κΈ°λ³Έμ μΌλ‘ μ§μν©λλ€. ꡬν λΈλΌμ°μ μμ νΈνμ±μ 보μ₯νλ €λ©΄ λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ¬ ES λͺ¨λμ μ΄ν΄ν μ μλ νμμΌλ‘ λ³νν μ μμ΅λλ€.
λΈλΌμ°μ μμ ES λͺ¨λμ μ§μ μ¬μ©ν λλ <script>
νκ·Έμ type="module"
μμ±μ μ§μ ν΄μΌ ν©λλ€.
μμ :
<script type="module" src="app.js"></script>
Node.jsμ ES λͺ¨λ
Node.jsλ ES λͺ¨λμ μ±ννμ¬ import
λ° export
ꡬ문μ κΈ°λ³Έμ μΌλ‘ μ§μν©λλ€. νμ§λ§ Node.jsμμ ES λͺ¨λμ μ¬μ©ν λ λͺ κ°μ§ μ€μν κ³ λ € μ¬νμ΄ μμ΅λλ€.
Node.jsμμ ES λͺ¨λ νμ±ννκΈ°
Node.jsμμ ES λͺ¨λμ μ¬μ©νλ €λ©΄ λ€μ μ€ νλλ₯Ό μνν μ μμ΅λλ€:
- λͺ¨λ νμΌμ
.mjs
νμΌ νμ₯μλ₯Ό μ¬μ©ν©λλ€. package.json
νμΌμ"type": "module"
μ μΆκ°ν©λλ€.
.mjs
νμ₯μλ₯Ό μ¬μ©νλ©΄ package.json
μ€μ κ³Ό κ΄κ³μμ΄ Node.jsκ° ν΄λΉ νμΌμ ES λͺ¨λλ‘ μ²λ¦¬νλλ‘ ν©λλ€.
package.json
νμΌμ "type": "module"
μ μΆκ°νλ©΄ Node.jsκ° νλ‘μ νΈμ λͺ¨λ .js
νμΌμ κΈ°λ³Έμ μΌλ‘ ES λͺ¨λλ‘ μ²λ¦¬νλλ‘ ν©λλ€. κ·Έλ° λ€μ CommonJS λͺ¨λμλ .cjs
νμ₯μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
CommonJSμμ μνΈ μ΄μ©μ±
Node.jsλ ES λͺ¨λκ³Ό CommonJS λͺ¨λ κ°μ μ΄λ μ λμ μνΈ μ΄μ©μ±μ μ 곡ν©λλ€. λμ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νμ¬ ES λͺ¨λμμ CommonJS λͺ¨λμ κ°μ Έμ¬ μ μμ΅λλ€. κ·Έλ¬λ require()
λ₯Ό μ¬μ©νμ¬ CommonJS λͺ¨λμμ ES λͺ¨λμ μ§μ κ°μ Έμ¬ μλ μμ΅λλ€.
μμ (ES λͺ¨λμμ CommonJS κ°μ Έμ€κΈ°):
// app.mjs
async function loadCommonJS() {
const commonJSModule = await import('./common.cjs');
console.log(commonJSModule);
}
loadCommonJS();
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ¬μ©μ μν λͺ¨λ² μ¬λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ ν¨κ³Όμ μΌλ‘ νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- μ¬λ°λ₯Έ λͺ¨λ μμ€ν μ ν: μ΅μ μΉ κ°λ°μ κ²½μ° νμ€ν, μ±λ₯ μ΄μ λ° μ μ λΆμ κΈ°λ₯μΌλ‘ μΈν΄ ES λͺ¨λμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
- λͺ¨λμ μκ³ μ§μ€μ μΌλ‘ μ μ§: κ° λͺ¨λμ λͺ νν μ± μκ³Ό μ νλ λ²μλ₯Ό κ°μ ΈμΌ ν©λλ€. μ΄λ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- μμ‘΄μ± λͺ
μμ μ μΈ:
import
λ°export
λ¬Έμ μ¬μ©νμ¬ λͺ¨λ μμ‘΄μ±μ λͺ ννκ² μ μνμμμ€. μ΄λ λͺ¨λ κ°μ κ΄κ³λ₯Ό λ μ½κ² μ΄ν΄ν μ μκ² ν©λλ€. - λͺ¨λ λ²λ€λ¬ μ¬μ©: λΈλΌμ°μ κΈ°λ° νλ‘μ νΈμ κ²½μ° Webpackμ΄λ Rollupκ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό μ΅μ ννκ³ κ΅¬ν λΈλΌμ°μ μμ νΈνμ±μ 보μ₯νμμμ€.
- μΌκ΄λ λͺ λͺ κ·μΉ μ€μ: λͺ¨λ λ° ν΄λΉ λ΄λ³΄λ΄κΈ°μ λν μΌκ΄λ λͺ λͺ κ·μΉμ μ립νμ¬ μ½λ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν€μμμ€.
- λ¨μ ν μ€νΈ μμ±: κ° λͺ¨λμ΄ λ 립μ μΌλ‘ μ¬λ°λ₯΄κ² μλνλμ§ νμΈνκΈ° μν΄ λ¨μ ν μ€νΈλ₯Ό μμ±νμμμ€.
- λͺ¨λ λ¬Έμν: λ€λ₯Έ μ¬λλ€(κ·Έλ¦¬κ³ λ―Έλμ μμ )μ΄ μ½λλ₯Ό μ½κ² μ΄ν΄νκ³ μ¬μ©ν μ μλλ‘ κ° λͺ¨λμ λͺ©μ , μ¬μ©λ² λ° μμ‘΄μ±μ λ¬Έμννμμμ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ λ―Έλ λν₯
μλ°μ€ν¬λ¦½νΈ λͺ¨λ νκ²½μ κ³μν΄μ μ§ννκ³ μμ΅λλ€. λͺ κ°μ§ μλ‘μ΄ λν₯μ λ€μκ³Ό κ°μ΅λλ€:
- μ΅μμ Await (Top-Level Await): μ΄ κΈ°λ₯μ μ¬μ©νλ©΄ ES λͺ¨λμμ
async
ν¨μ μΈλΆμμawait
ν€μλλ₯Ό μ¬μ©ν μ μμ΄ λΉλκΈ° λͺ¨λ λ‘λ©μ λ¨μνν©λλ€. - λͺ¨λ νλλ μ΄μ (Module Federation): μ΄ κΈ°μ μ μ¬μ©νλ©΄ λ°νμμ μ¬λ¬ μ ν리μΌμ΄μ κ°μ μ½λλ₯Ό 곡μ ν μ μμ΄ λ§μ΄ν¬λ‘νλ‘ νΈμλ μν€ν μ²λ₯Ό ꡬνν μ μμ΅λλ€.
- κ°μ λ νΈλ¦¬ μμ΄νΉ (Tree Shaking): λͺ¨λ λ²λ€λ¬μ μ§μμ μΈ κ°μ μΌλ‘ νΈλ¦¬ μμ΄νΉ κΈ°λ₯μ΄ ν₯μλμ΄ λ²λ€ ν¬κΈ°κ° λμ± μ€μ΄λ€κ³ μμ΅λλ€.
κ΅μ νμ λͺ¨λ
κΈλ‘λ² μ¬μ©μλ₯Ό μν μ ν리μΌμ΄μ μ κ°λ°ν λλ κ΅μ ν(i18n)μ νμ§ν(l10n)λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μλ°μ€ν¬λ¦½νΈ λͺ¨λμ i18n 리μμ€λ₯Ό ꡬμ±νκ³ κ΄λ¦¬νλ λ° ν΅μ¬μ μΈ μν μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ²μ λ° λ‘μΌμΌλ³ μμ κ·μΉμ ν¬ν¨νλ λ€λ₯Έ μΈμ΄μ λν λ³λμ λͺ¨λμ λ§λ€ μ μμ΅λλ€. κ·Έλ° λ€μ λμ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νμ¬ μ¬μ©μ κΈ°λ³Έ μ€μ μ λ°λΌ μ μ ν μΈμ΄ λͺ¨λμ λ‘λν μ μμ΅λλ€. i18nextμ κ°μ λΌμ΄λΈλ¬λ¦¬λ ES λͺ¨λκ³Ό μ μλνμ¬ λ²μ λ° λ‘μΌμΌ λ°μ΄ν°λ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬ν©λλ€.
μμ (λͺ¨λμ μ¬μ©ν κ΅μ ν):
// en.js (μμ΄ λ²μ)
export const translations = {
greeting: "Hello",
farewell: "Goodbye"
};
// fr.js (νλμ€μ΄ λ²μ)
export const translations = {
greeting: "Bonjour",
farewell: "Au revoir"
};
// app.js
async function loadTranslations(locale) {
try {
const translationsModule = await import(`./${locale}.js`);
return translationsModule.translations;
} catch (error) {
console.error(`Failed to load translations for locale ${locale}:`, error);
// κΈ°λ³Έ λ‘μΌμΌ(μ: μμ΄)λ‘ λ체
return (await import('./en.js')).translations;
}
}
async function displayGreeting(locale) {
const translations = await loadTranslations(locale);
console.log(`${translations.greeting}, World!`);
}
displayGreeting('fr'); // Output: Bonjour, World!
λͺ¨λ μ¬μ© μ 보μ κ³ λ € μ¬ν
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ¬μ©ν λ, νΉν μΈλΆ μμ€λ μλνν° λΌμ΄λΈλ¬λ¦¬μμ κ°μ Έμ¬ λλ μ μ¬μ μΈ λ³΄μ μνμ ν΄κ²°νλ κ²μ΄ μ€μν©λλ€. λͺ κ°μ§ μ£Όμ κ³ λ € μ¬νμ λ€μκ³Ό κ°μ΅λλ€:
- μμ‘΄μ± μ·¨μ½μ : npm audit λλ yarn auditκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ νλ‘μ νΈμ μμ‘΄μ±μ λν΄ μλ €μ§ μ·¨μ½μ μ μ κΈ°μ μΌλ‘ κ²μ¬νμμμ€. 보μ κ²°ν¨μ ν¨μΉνκΈ° μν΄ μμ‘΄μ±μ μ΅μ μνλ‘ μ μ§νμμμ€.
- νμ 리μμ€ λ¬΄κ²°μ± (SRI): CDNμμ λͺ¨λμ λ‘λν λ SRI νκ·Έλ₯Ό μ¬μ©νμ¬ λ‘λνλ νμΌμ΄ λ³μ‘°λμ§ μμλμ§ νμΈνμμμ€. SRI νκ·Έλ μμ νμΌ λ΄μ©μ μνΈν ν΄μλ₯Ό μ 곡νμ¬ λΈλΌμ°μ κ° λ€μ΄λ‘λν νμΌμ 무결μ±μ νμΈν μ μλλ‘ ν©λλ€.
- μ½λ μ£Όμ : μ¬μ©μ μ λ ₯μ κΈ°λ°μΌλ‘ λμ μΌλ‘ κ°μ Έμ€κΈ° κ²½λ‘λ₯Ό ꡬμ±νλ κ²μ μ£Όμνμμμ€. μ΄λ μ½λ μ£Όμ μ·¨μ½μ μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ¬μ©μ μ λ ₯μ μμ νκ² μ²λ¦¬νκ³ κ°μ Έμ€κΈ° λ¬Έμ μ§μ μ¬μ©νμ§ λ§μμμ€.
- κΆν λ²μ νμ₯: κ°μ Έμ€λ λͺ¨λμ κΆνκ³Ό κΈ°λ₯μ μ μ€νκ² κ²ν νμμμ€. μ ν리μΌμ΄μ μ 리μμ€μ κ³Όλν μ κ·Όμ μμ²νλ λͺ¨λμ κ°μ Έμ€μ§ λ§μμμ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ½λλ₯Ό ꡬ쑰νλκ³ ν¨μ¨μ μΈ λ°©μμΌλ‘ ꡬμ±νλ λ°©λ²μ μ 곡νλ μ΅μ μΉ κ°λ°μ νμ λꡬμ λλ€. ES λͺ¨λμ μ΄μ λͺ¨λ μμ€ν μ λΉν΄ μλ§μ μ΄μ μ μ 곡νλ©° νμ€μΌλ‘ μ리 μ‘μμ΅λλ€. ES λͺ¨λμ μ리λ₯Ό μ΄ν΄νκ³ , λͺ¨λ λ²λ€λ¬λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ©°, λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λ μ μ§λ³΄μνκΈ° μ½κ³ μ¬μ¬μ© κ°λ₯νλ©° νμ₯ κ°λ₯ν μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ μνκ³κ° κ³μ λ°μ ν¨μ λ°λΌ, μ΅μ λͺ¨λ νμ€κ³Ό λν₯μ λν μ 보λ₯Ό κ³μ μ νλ κ²μ μ μΈκ³ μ¬μ©μλ₯Ό μν κ²¬κ³ νκ³ κ³ μ±λ₯μ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. λͺ¨λμ νμ νμ©νμ¬ λ λμ μ½λλ₯Ό μμ±νκ³ νμν μ¬μ©μ κ²½νμ μ 곡νμμμ€.