ν¨μ¨μ μ΄κ³ μ μ§λ³΄μ κ°λ₯νλ©° νμ₯ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ μν΄ μλ°μ€ν¬λ¦½νΈ λͺ¨λ λ‘λ© μμμ μμ‘΄μ± ν΄κ²°μ λ§μ€ν°νμΈμ. λ€μν λͺ¨λ μμ€ν κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό λ°°μ보μΈμ.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ λ‘λ© μμ: μμ‘΄μ± ν΄κ²°μ λν μ’ ν© κ°μ΄λ
νλ μλ°μ€ν¬λ¦½νΈ κ°λ°μμ λͺ¨λμ μ½λλ₯Ό ꡬμ±νκ³ , μ¬μ¬μ©μ±μ λμ΄λ©°, μ μ§λ³΄μμ±μ ν₯μμν€λ λ° νμμ μ λλ€. λͺ¨λ μμ μ μ€μν μΈ‘λ©΄μ μλ°μ€ν¬λ¦½νΈκ° λͺ¨λ λ‘λ© μμμ μμ‘΄μ± ν΄κ²°μ μ΄λ»κ² μ²λ¦¬νλμ§ μ΄ν΄νλ κ²μ λλ€. μ΄ κ°μ΄λλ μ΄λ¬ν κ°λ μ λν΄ μ¬λ μκ² λ€λ£¨λ©°, λ€μν λͺ¨λ μμ€ν μ μ΄ν΄λ³΄κ³ κ²¬κ³ νκ³ νμ₯ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν μ€μ©μ μΈ μ‘°μΈμ μ 곡ν©λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ΄λ 무μμΈκ°?
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ κΈ°λ₯μ μΊ‘μννκ³ κ³΅κ° μΈν°νμ΄μ€λ₯Ό λ ΈμΆνλ λ 립μ μΈ μ½λ λ¨μμ λλ€. λͺ¨λμ λκ·λͺ¨ μ½λλ² μ΄μ€λ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λΆλΆμΌλ‘ λλμ΄ λ³΅μ‘μ±μ μ€μ΄κ³ μ½λ ꡬμ±μ κ°μ νλ λ° λμμ΄ λ©λλ€. λ³μμ ν¨μμ λν 격리λ μ€μ½νλ₯Ό μμ±νμ¬ μ΄λ¦ μΆ©λμ λ°©μ§ν©λλ€.
λͺ¨λ μ¬μ©μ μ΄μ :
- μ½λ κ΅¬μ± κ°μ : λͺ¨λμ λͺ νν ꡬ쑰λ₯Ό μ΄μ§νμ¬ μ½λλ² μ΄μ€λ₯Ό νμνκ³ μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- μ¬μ¬μ©μ±: λͺ¨λμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ΄λ μ¬μ§μ΄ λ€λ₯Έ νλ‘μ νΈμμλ μ¬μ¬μ©λ μ μμ΅λλ€.
- μ μ§λ³΄μμ±: ν λͺ¨λμ λ³κ²½ μ¬νμ΄ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ μν₯μ λ―ΈμΉ κ°λ₯μ±μ΄ μ μ΅λλ€.
- λ€μμ€νμ΄μ€ κ΄λ¦¬: λͺ¨λμ 격리λ μ€μ½νλ₯Ό μμ±νμ¬ μ΄λ¦ μΆ©λμ λ°©μ§ν©λλ€.
- ν μ€νΈ μ©μ΄μ±: λͺ¨λμ λ 립μ μΌλ‘ ν μ€νΈν μ μμ΄ ν μ€νΈ κ³Όμ μ λ¨μνν©λλ€.
λͺ¨λ μμ€ν μ΄ν΄νκΈ°
μλ μ κ±Έμ³ μλ°μ€ν¬λ¦½νΈ μνκ³μλ μ¬λ¬ λͺ¨λ μμ€ν μ΄ λ±μ₯νμ΅λλ€. κ° μμ€ν μ λͺ¨λμ μ μνκ³ , λ΄λ³΄λ΄κ³ , κ°μ Έμ€λ κ³ μ ν λ°©μμ μ μν©λλ€. μ΄λ¬ν λ€μν μμ€ν μ μ΄ν΄νλ κ²μ κΈ°μ‘΄ μ½λλ² μ΄μ€λ‘ μμ νκ³ μ νλ‘μ νΈμμ μ¬μ©ν μμ€ν μ λν΄ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦¬λ λ° μ€μν©λλ€.
CommonJS
CommonJSλ μ΄κΈ°μ Node.jsμ κ°μ μλ² μΈ‘ μλ°μ€ν¬λ¦½νΈ νκ²½μ μν΄ μ€κ³λμμ΅λλ€. require()
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ κ°μ Έμ€κ³ module.exports
κ°μ²΄λ₯Ό μ¬μ©νμ¬ λ΄λ³΄λ
λλ€.
μμ :
// 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 λͺ¨λμ λκΈ°μ μΌλ‘ λ‘λλλ―λ‘ νμΌ μ κ·Όμ΄ λΉ λ₯Έ μλ² μΈ‘ νκ²½μ μ ν©ν©λλ€. κ·Έλ¬λ λκΈ°μ λ‘λ©μ λ€νΈμν¬ μ§μ° μκ°μ΄ μ±λ₯μ ν° μν₯μ λ―ΈμΉ μ μλ λΈλΌμ°μ μμλ λ¬Έμ κ° λ μ μμ΅λλ€. CommonJSλ μ¬μ ν Node.jsμμ λ리 μ¬μ©λλ©° λΈλΌμ°μ κΈ°λ° μ ν리μΌμ΄μ μ μν΄ μΉν©κ³Ό κ°μ λ²λ€λ¬μ ν¨κ» μμ£Ό μ¬μ©λ©λλ€.
λΉλκΈ° λͺ¨λ μ μ (AMD)
AMDλ λΈλΌμ°μ μμ λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λνκΈ° μν΄ μ€κ³λμμ΅λλ€. define()
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μνκ³ μμ‘΄μ±μ λ¬Έμμ΄ λ°°μ΄λ‘ μ§μ ν©λλ€. RequireJSλ 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 λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λλμ΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μμΌλ―λ‘ λΈλΌμ°μ μμ μ±λ₯μ ν₯μμν΅λλ€. μ΄λ¬ν λΉλκΈ°μ νΉμ±μ λ§μ μμ‘΄μ±μ κ°μ§ ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μ λ€λ£° λ νΉν μ μ©ν©λλ€. AMDλ λν λμ λͺ¨λ λ‘λ©μ μ§μνμ¬ νμμ λ°λΌ λͺ¨λμ λ‘λν μ μλλ‘ ν©λλ€.
λ²μ© λͺ¨λ μ μ (UMD)
UMDλ λͺ¨λμ΄ CommonJS λ° AMD νκ²½ λͺ¨λμμ μλνλλ‘ νλ ν¨ν΄μ λλ€. λ€μν λͺ¨λ λ‘λμ μ‘΄μ¬λ₯Ό νμΈνκ³ κ·Έμ λ°λΌ μ μνλ λνΌ ν¨μλ₯Ό μ¬μ©ν©λλ€.
μμ :
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['exports'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS
factory(module.exports);
} else {
// Browser globals (root is window)
factory(root.myModule = {});
})(this, function (exports) {
exports.add = function (a, b) {
return a + b;
};
});
UMDλ μμ μμ΄ λ€μν νκ²½μμ μ¬μ©ν μ μλ λͺ¨λμ λ§λλ νΈλ¦¬ν λ°©λ²μ μ 곡ν©λλ€. μ΄κ²μ λ€μν λͺ¨λ μμ€ν κ³Ό νΈνλμ΄μΌ νλ λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬μ νΉν μ μ©ν©λλ€.
ECMAScript λͺ¨λ (ESM)
ESMμ ECMAScript 2015(ES6)μμ λμ
λ νμ€νλ λͺ¨λ μμ€ν
μ
λλ€. import
λ° export
ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μνκ³ μ¬μ©ν©λλ€.
μμ :
// math.js
export function add(a, b) {
return a + b;
}
// app.js
import { add } from './math.js';
console.log(add(2, 3)); // Output: 5
ESMμ μ μ λΆμ, ν₯μλ μ±λ₯, λ λμ ꡬ문μ ν¬ν¨νμ¬ μ΄μ λͺ¨λ μμ€ν
μ λΉν΄ μ¬λ¬ κ°μ§ μ΄μ μ μ 곡ν©λλ€. λΈλΌμ°μ μ Node.jsλ ESMμ κΈ°λ³Έμ μΌλ‘ μ§μνμ§λ§, Node.jsμμλ .mjs
νμ₯μλ₯Ό μ¬μ©νκ±°λ package.json
μ "type": "module"
μ μ§μ ν΄μΌ ν©λλ€.
μμ‘΄μ± ν΄κ²°
μμ‘΄μ± ν΄κ²°μ λͺ¨λμ μμ‘΄μ±μ λ°λΌ λͺ¨λμ΄ λ‘λλκ³ μ€νλλ μμλ₯Ό κ²°μ νλ νλ‘μΈμ€μ λλ€. μμ‘΄μ± ν΄κ²°μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ κ²μ μν μμ‘΄μ±μ νΌνκ³ νμν λ λͺ¨λμ μ¬μ©ν μ μλλ‘ λ³΄μ₯νλ λ° μ€μν©λλ€.
μμ‘΄μ± κ·Έλν μ΄ν΄νκΈ°
μμ‘΄μ± κ·Έλνλ μ ν리μΌμ΄μ μ λͺ¨λ κ° μμ‘΄μ±μ μκ°μ μΌλ‘ ννν κ²μ λλ€. κ·Έλνμ κ° λ Έλλ λͺ¨λμ λνλ΄κ³ κ° μ£μ§λ μμ‘΄μ±μ λνλ λλ€. μμ‘΄μ± κ·Έλνλ₯Ό λΆμνμ¬ μν μμ‘΄μ±κ³Ό κ°μ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νκ³ λͺ¨λ λ‘λ© μμλ₯Ό μ΅μ νν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ€μ λͺ¨λμ κ³ λ €ν΄ λ³΄μΈμ:
- λͺ¨λ Aλ λͺ¨λ Bμ μμ‘΄
- λͺ¨λ Bλ λͺ¨λ Cμ μμ‘΄
- λͺ¨λ Cλ λͺ¨λ Aμ μμ‘΄
μ΄κ²μ μν μμ‘΄μ±μ μμ±νμ¬ μ€λ₯λ μκΈ°μΉ μμ λμμ μ λ°ν μ μμ΅λλ€. λ§μ λͺ¨λ λ²λ€λ¬λ μν μμ‘΄μ±μ κ°μ§νκ³ μ΄λ₯Ό ν΄κ²°νλ λ° λμμ΄ λλ κ²½κ³ λ μ€λ₯λ₯Ό μ 곡ν μ μμ΅λλ€.
λͺ¨λ λ‘λ© μμ
λͺ¨λ λ‘λ© μμλ μμ‘΄μ± κ·Έλνμ μ¬μ© μ€μΈ λͺ¨λ μμ€ν μ μν΄ κ²°μ λ©λλ€. μΌλ°μ μΌλ‘ λͺ¨λμ κΉμ΄ μ°μ μμλ‘ λ‘λλλ©°, μ΄λ λͺ¨λμ μμ‘΄μ±μ΄ λͺ¨λ μμ²΄λ³΄λ€ λ¨Όμ λ‘λλ¨μ μλ―Έν©λλ€. κ·Έλ¬λ νΉμ λ‘λ© μμλ λͺ¨λ μμ€ν κ³Ό μν μμ‘΄μ±μ μ‘΄μ¬ μ¬λΆμ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
CommonJS λ‘λ© μμ
CommonJSμμ λͺ¨λμ requireλλ μμλλ‘ λκΈ°μ μΌλ‘ λ‘λλ©λλ€. μν μμ‘΄μ±μ΄ κ°μ§λλ©΄ μ¬μ΄ν΄μ 첫 λ²μ§Έ λͺ¨λμ λΆμμ ν λ΄λ³΄λ΄κΈ°(export) κ°μ²΄λ₯Ό λ°κ² λ©λλ€. μ΄λ‘ μΈν΄ λͺ¨λμ΄ μμ ν μ΄κΈ°νλκΈ° μ μ λΆμμ ν λ΄λ³΄λ΄κΈ°λ₯Ό μ¬μ©νλ €κ³ νλ©΄ μ€λ₯κ° λ°μν μ μμ΅λλ€.
μμ :
// a.js
const b = require('./b');
console.log('a.js: b.message =', b.message);
exports.message = 'Hello from a.js';
// b.js
const a = require('./a');
exports.message = 'Hello from b.js';
console.log('b.js: a.message =', a.message);
μ΄ μμ μμ a.js
κ° λ‘λλ λ b.js
λ₯Ό requireν©λλ€. b.js
κ° λ‘λλ λ a.js
λ₯Ό requireν©λλ€. μ΄κ²μ μν μμ‘΄μ±μ μμ±ν©λλ€. μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€:
b.js: a.message = undefined
a.js: b.message = Hello from b.js
보μλ€μνΌ, a.js
λ μ΄κΈ°μ b.js
λ‘λΆν° λΆμμ ν λ΄λ³΄λ΄κΈ° κ°μ²΄λ₯Ό λ°μ΅λλ€. μ΄λ μ½λλ₯Ό μ¬κ΅¬μ±νμ¬ μν μμ‘΄μ±μ μ κ±°νκ±°λ μ§μ° μ΄κΈ°ν(lazy initialization)λ₯Ό μ¬μ©νμ¬ νΌν μ μμ΅λλ€.
AMD λ‘λ© μμ
AMDμμλ λͺ¨λμ΄ λΉλκΈ°μ μΌλ‘ λ‘λλμ΄ μμ‘΄μ± ν΄κ²°μ΄ λ 볡μ‘ν΄μ§ μ μμ΅λλ€. μΈκΈ° μλ AMD ꡬνμ²΄μΈ RequireJSλ μμ‘΄μ± μ£Όμ
λ©μ»€λμ¦μ μ¬μ©νμ¬ μ½λ°± ν¨μμ λͺ¨λμ μ 곡ν©λλ€. λ‘λ© μμλ define()
ν¨μμ μ§μ λ μμ‘΄μ±μ μν΄ κ²°μ λ©λλ€.
ESM λ‘λ© μμ
ESMμ λͺ¨λμ λ‘λνκΈ° μ μ μ μ λΆμ λ¨κ³λ₯Ό μ¬μ©νμ¬ λͺ¨λ κ°μ μμ‘΄μ±μ κ²°μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λ λ‘λλ λ‘λ© μμλ₯Ό μ΅μ ννκ³ μν μμ‘΄μ±μ μ‘°κΈ°μ κ°μ§ν μ μμ΅λλ€. ESMμ 컨ν μ€νΈμ λ°λΌ λκΈ° λ° λΉλκΈ° λ‘λ©μ λͺ¨λ μ§μν©λλ€.
λͺ¨λ λ²λ€λ¬μ μμ‘΄μ± ν΄κ²°
μΉν©(Webpack), νμ (Parcel), λ‘€μ (Rollup)κ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ λΈλΌμ°μ κΈ°λ° μ ν리μΌμ΄μ μ μμ‘΄μ± ν΄κ²°μ μ€μν μν μ ν©λλ€. μ΄λ€μ μ ν리μΌμ΄μ μ μμ‘΄μ± κ·Έλνλ₯Ό λΆμνκ³ λͺ¨λ λͺ¨λμ λΈλΌμ°μ κ° λ‘λν μ μλ νλ μ΄μμ νμΌλ‘ λ¬Άμ΅λλ€. λͺ¨λ λ²λ€λ¬λ λ²λ€λ§ κ³Όμ μμ μ½λ λΆν , νΈλ¦¬ μμ΄νΉ, μμΆκ³Ό κ°μ λ€μν μ΅μ νλ₯Ό μννμ¬ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μΉν© (Webpack)
μΉν©μ CommonJS, AMD, ESMμ ν¬ν¨ν λ€μν λͺ¨λ μμ€ν
μ μ§μνλ κ°λ ₯νκ³ μ μ°ν λͺ¨λ λ²λ€λ¬μ
λλ€. κ΅¬μ± νμΌ(webpack.config.js
)μ μ¬μ©νμ¬ μ ν리μΌμ΄μ
μ μ§μ
μ , μΆλ ₯ κ²½λ‘, λ€μν λ‘λ λ° νλ¬κ·ΈμΈμ μ μν©λλ€.
μΉν©μ μ§μ μ μμ μμνμ¬ μμ‘΄μ± κ·Έλνλ₯Ό λΆμνκ³ λͺ¨λ μμ‘΄μ±μ μ¬κ·μ μΌλ‘ ν΄κ²°ν©λλ€. κ·Έλ° λ€μ λ‘λλ₯Ό μ¬μ©νμ¬ λͺ¨λμ λ³ννκ³ νλ μ΄μμ μΆλ ₯ νμΌλ‘ λ¬Άμ΅λλ€. μΉν©μ λν μ½λ λΆν μ μ§μνμ¬ μ ν리μΌμ΄μ μ νμμ λ°λΌ λ‘λν μ μλ λ μμ μ²ν¬λ‘ λλ μ μμ΅λλ€.
νμ (Parcel)
νμ μ μ¬μ©νκΈ° μ½λλ‘ μ€κ³λ μ λ‘ κ΅¬μ±(zero-configuration) λͺ¨λ λ²λ€λ¬μ λλ€. μ ν리μΌμ΄μ μ μ§μ μ μ μλμΌλ‘ κ°μ§νκ³ κ΅¬μ± μμ΄ λͺ¨λ μμ‘΄μ±μ λ²λ€λ§ν©λλ€. νμ μ λν ν« λͺ¨λ κ΅μ²΄(hot module replacement)λ₯Ό μ§μνμ¬ νμ΄μ§λ₯Ό μλ‘ κ³ μΉμ§ μκ³ λ μ ν리μΌμ΄μ μ μ€μκ°μΌλ‘ μ λ°μ΄νΈν μ μμ΅λλ€.
λ‘€μ (Rollup)
λ‘€μ μ μ£Όλ‘ λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬λ₯Ό λ§λλ λ° μ€μ μ λ λͺ¨λ λ²λ€λ¬μ λλ€. ESMμ κΈ°λ³Έ λͺ¨λ μμ€ν μΌλ‘ μ¬μ©νκ³ νΈλ¦¬ μμ΄νΉμ μννμ¬ μ¬μ©νμ§ μλ μ½λ(dead code)λ₯Ό μ κ±°ν©λλ€. λ‘€μ μ λ€λ₯Έ λͺ¨λ λ²λ€λ¬μ λΉν΄ λ μκ³ ν¨μ¨μ μΈ λ²λ€μ μμ±ν©λλ€.
λͺ¨λ λ‘λ© μμ κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
λ€μμ μλ°μ€ν¬λ¦½νΈ νλ‘μ νΈμμ λͺ¨λ λ‘λ© μμμ μμ‘΄μ± ν΄κ²°μ κ΄λ¦¬νκΈ° μν λͺ κ°μ§ λͺ¨λ² μ¬λ‘μ λλ€:
- μν μμ‘΄μ± νΌνκΈ°: μν μμ‘΄μ±μ μ€λ₯μ μκΈ°μΉ μμ λμμ μ λ°ν μ μμ΅λλ€. madge(https://github.com/pahen/madge)μ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ½λλ² μ΄μ€μ μν μμ‘΄μ±μ κ°μ§νκ³ μ½λλ₯Ό 리ν©ν λ§νμ¬ μ κ±°νμΈμ.
- λͺ¨λ λ²λ€λ¬ μ¬μ©νκΈ°: μΉν©, νμ , λ‘€μ κ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ μμ‘΄μ± ν΄κ²°μ λ¨μννκ³ νλ‘λμ μ μν΄ μ ν리μΌμ΄μ μ μ΅μ νν μ μμ΅λλ€.
- ESM μ¬μ©νκΈ°: ESMμ μ μ λΆμ, ν₯μλ μ±λ₯, λ λμ ꡬ문μ ν¬ν¨νμ¬ μ΄μ λͺ¨λ μμ€ν μ λΉν΄ μ¬λ¬ κ°μ§ μ΄μ μ μ 곡ν©λλ€.
- λͺ¨λ μ§μ° λ‘λ©νκΈ°: μ§μ° λ‘λ©μ νμμ λ°λΌ λͺ¨λμ λ‘λνμ¬ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ κ°μ ν μ μμ΅λλ€.
- μμ‘΄μ± κ·Έλν μ΅μ ννκΈ°: μμ‘΄μ± κ·Έλνλ₯Ό λΆμνμ¬ μ μ¬μ μΈ λ³λͺ© νμμ μλ³νκ³ λͺ¨λ λ‘λ© μμλ₯Ό μ΅μ ννμΈμ. μΉν© λ²λ€ λΆμκΈ°μ κ°μ λꡬλ λ²λ€ ν¬κΈ°λ₯Ό μκ°ννκ³ μ΅μ ν κΈ°νλ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μ μ μ€μ½νμ μ μνκΈ°: μ μ μ€μ½νλ₯Ό μ€μΌμν€μ§ λ§μΈμ. νμ λͺ¨λμ μ¬μ©νμ¬ μ½λλ₯Ό μΊ‘μννμΈμ.
- μμ μ μΈ λͺ¨λ μ΄λ¦ μ¬μ©νκΈ°: λͺ¨λμ λͺ©μ μ λ°μνλ λͺ ννκ³ μμ μ μΈ μ΄λ¦μ μ§μ νμΈμ. μ΄λ κ² νλ©΄ μ½λλ² μ΄μ€λ₯Ό μ΄ν΄νκ³ μμ‘΄μ±μ κ΄λ¦¬νκΈ°κ° λ μ¬μμ§λλ€.
μ€μ©μ μΈ μμ λ° μλ리μ€
μλλ¦¬μ€ 1: 볡μ‘ν UI μ»΄ν¬λνΈ κ΅¬μΆ
λ°μ΄ν° ν μ΄λΈκ³Ό κ°μ 볡μ‘ν UI μ»΄ν¬λνΈλ₯Ό ꡬμΆνκ³ μμΌλ©° μ¬λ¬ λͺ¨λμ΄ νμνλ€κ³ μμν΄ λ³΄μΈμ:
data-table.js
: λ©μΈ μ»΄ν¬λνΈ λ‘μ§.data-source.js
: λ°μ΄ν° κ°μ Έμ€κΈ° λ° μ²λ¦¬ λ΄λΉ.column-sort.js
: μ΄ μ λ ¬ κΈ°λ₯ ꡬν.pagination.js
: ν μ΄λΈμ νμ΄μ§λ€μ΄μ μΆκ°.template.js
: ν μ΄λΈμ HTML ν νλ¦Ώ μ 곡.
data-table.js
λͺ¨λμ λ€λ₯Έ λͺ¨λ λͺ¨λμ μμ‘΄ν©λλ€. column-sort.js
μ pagination.js
λ μ λ ¬μ΄λ νμ΄μ§λ€μ΄μ
μμ
μ λ°λΌ λ°μ΄ν°λ₯Ό μ
λ°μ΄νΈνκΈ° μν΄ data-source.js
μ μμ‘΄ν μ μμ΅λλ€.
μΉν©κ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ¬ data-table.js
λ₯Ό μ§μ
μ μΌλ‘ μ μν©λλ€. μΉν©μ μμ‘΄μ±μ λΆμνκ³ λ¨μΌ νμΌ(λλ μ½λ λΆν μ ν΅ν΄ μ¬λ¬ νμΌ)λ‘ λ²λ€λ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ data-table.js
μ»΄ν¬λνΈκ° μ΄κΈ°νλκΈ° μ μ νμν λͺ¨λ λͺ¨λμ΄ λ‘λλλλ‘ λ³΄μ₯ν©λλ€.
μλλ¦¬μ€ 2: μΉ μ ν리μΌμ΄μ μ κ΅μ ν(i18n)
μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ μ ν리μΌμ΄μ μ μκ°ν΄ 보μΈμ. κ° μΈμ΄μ λ²μμ μν λͺ¨λμ΄ μμ μ μμ΅λλ€:
i18n.js
: μΈμ΄ μ ν λ° λ²μ μ‘°νλ₯Ό μ²λ¦¬νλ λ©μΈ i18n λͺ¨λ.en.js
: μμ΄ λ²μ.fr.js
: νλμ€μ΄ λ²μ.de.js
: λ μΌμ΄ λ²μ.es.js
: μ€νμΈμ΄ λ²μ.
i18n.js
λͺ¨λμ μ¬μ©μκ° μ νν μΈμ΄μ λ°λΌ μ μ ν μΈμ΄ λͺ¨λμ λμ μΌλ‘ κ°μ Έμ΅λλ€. λμ κ°μ Έμ€κΈ°(ESM λ° μΉν©μμ μ§μ)λ λͺ¨λ μΈμ΄ νμΌμ 미리 λ‘λν νμ μμ΄ νμν νμΌλ§ λ‘λνλ―λ‘ μ¬κΈ°μ μ μ©ν©λλ€. μ΄λ μ ν리μΌμ΄μ
μ μ΄κΈ° λ‘λ μκ°μ μ€μ¬μ€λλ€.
μλλ¦¬μ€ 3: λ§μ΄ν¬λ‘ νλ‘ νΈμλ μν€ν μ²
λ§μ΄ν¬λ‘ νλ‘ νΈμλ μν€ν μ²μμ λκ·λͺ¨ μ ν리μΌμ΄μ μ λ μκ³ λ 립μ μΌλ‘ λ°°ν¬ κ°λ₯ν νλ‘ νΈμλλ‘ λλ©λλ€. κ° λ§μ΄ν¬λ‘ νλ‘ νΈμλλ μ체μ μΈ λͺ¨λκ³Ό μμ‘΄μ± μ§ν©μ κ°μ§ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, ν λ§μ΄ν¬λ‘ νλ‘ νΈμλλ μ¬μ©μ μΈμ¦μ μ²λ¦¬νκ³ λ€λ₯Έ νλλ μ ν μΉ΄νλ‘κ·Έ λΈλΌμ°μ§μ μ²λ¦¬ν μ μμ΅λλ€. κ° λ§μ΄ν¬λ‘ νλ‘ νΈμλλ μ체 λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ¬ μμ‘΄μ±μ κ΄λ¦¬νκ³ λ 립μ μΈ λ²λ€μ μμ±ν©λλ€. μΉν©μ λͺ¨λ νλλ μ΄μ νλ¬κ·ΈμΈμ μ¬μ©νλ©΄ μ΄λ¬ν λ§μ΄ν¬λ‘ νλ‘ νΈμλκ° λ°νμμ μ½λμ μμ‘΄μ±μ 곡μ νμ¬ λ λͺ¨λνλκ³ νμ₯ κ°λ₯ν μν€ν μ²λ₯Ό ꡬνν μ μμ΅λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ λ‘λ© μμμ μμ‘΄μ± ν΄κ²°μ μ΄ν΄νλ κ²μ ν¨μ¨μ μ΄κ³ μ μ§λ³΄μ κ°λ₯νλ©° νμ₯ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ€μν©λλ€. μ¬λ°λ₯Έ λͺ¨λ μμ€ν μ μ ννκ³ , λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νλ©°, λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ μΌλ°μ μΈ ν¨μ μ νΌνκ³ κ²¬κ³ νκ³ μ μ 리λ μ½λλ² μ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. μμ μΉμ¬μ΄νΈλ₯Ό λ§λ€λ λκ·λͺ¨ μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μ λ§λ€λ , μ΄λ¬ν κ°λ μ λ§μ€ν°νλ©΄ κ°λ° μν¬νλ‘μ°μ μ½λμ νμ§μ΄ ν¬κ² ν₯μλ κ²μ λλ€.
μ΄ μ’ ν© κ°μ΄λλ μλ°μ€ν¬λ¦½νΈ λͺ¨λ λ‘λ© λ° μμ‘΄μ± ν΄κ²°μ νμμ μΈ μΈ‘λ©΄μ λ€λ£¨μμ΅λλ€. λ€μν λͺ¨λ μμ€ν κ³Ό λ²λ€λ¬λ₯Ό μ€ννμ¬ νλ‘μ νΈμ κ°μ₯ μ ν©ν μ κ·Ό λ°©μμ μ°ΎμΌμμμ€. μμ‘΄μ± κ·Έλνλ₯Ό λΆμνκ³ , μν μμ‘΄μ±μ νΌνλ©°, μ΅μ μ μ±λ₯μ μν΄ λͺ¨λ λ‘λ© μμλ₯Ό μ΅μ ννλ κ²μ μμ§ λ§μμμ€.