ν¨μ¨μ μΈ μ½λ μμ±μ μν JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄μ νμνμΈμ. ν νλ¦Ώμ νμ©νμ¬ λͺ¨λ μμ±μ μλννκ³ μ½λ μΌκ΄μ±μ κ°μ νλ©° κ°λ°μ μμ°μ±μ ν₯μμν€λ λ°©λ²μ μμ보μΈμ.
JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄: μ½λ μμ± κ°μν
νλ JavaScript κ°λ°μμ λͺ¨λμ±μ 무μλ³΄λ€ μ€μν©λλ€. λκ·λͺ¨ μ ν리μΌμ΄μ μ μκ³ μ¬μ¬μ© κ°λ₯ν λͺ¨λλ‘ λΆν΄νλ©΄ μ½λ ꡬμ±, μ μ§ κ΄λ¦¬μ± λ° νμ μ΄ ν₯μλ©λλ€. κ·Έλ¬λ μ΄λ¬ν λͺ¨λμ μλμΌλ‘ λ§λλ κ²μ λ°λ³΅μ μ΄κ³ μκ°μ΄ λ§μ΄ μμλ μ μμ΅λλ€. μ΄λ΄ λ JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄μ΄ λ±μ₯νμ¬ λͺ¨λ μμ±μ μλννκ³ μ½λλ² μ΄μ€ μ 체μ μΌκ΄μ±μ 보μ₯νλ κ°λ ₯ν μ κ·Ό λ°©μμ μ 곡ν©λλ€.
JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄μ΄λ 무μμΈκ°μ?
JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄μ νμ€νλ λͺ¨λ ꡬ쑰λ₯Ό μμ±νκΈ° μν μ²μ¬μ§μ μ 곡ν©λλ€. νΉμ μ νμ λͺ¨λμ νμν κΈ°λ³Έ κ΅¬μ± μμμ 보μΌλ¬νλ μ΄νΈ μ½λλ₯Ό μ μνμ¬ κ°λ°μκ° λͺ¨λ κ²μ μ²μλΆν° μμ±νμ§ μκ³ λ μ λͺ¨λμ λΉ λ₯΄κ² μΈμ€ν΄μ€νν μ μμ΅λλ€. μ΄λ¬ν ν¨ν΄μ μ’ μ’ μ½λ μμ± λꡬλ κ°λ¨ν λ¬Έμμ΄ μ‘°μ κΈ°μ μ μ¬μ©νμ¬ κ΅¬νλ©λλ€.
μΏ ν€ μ»€ν° μ¬μ©κ³Ό κ°λ€κ³ μκ°ν΄λ³΄μΈμ. κ° μΏ ν€λ₯Ό μμΌλ‘ νλ€κ² λͺ¨μμ λ§λλ λμ , 컀ν°λ₯Ό μ¬μ©νμ¬ μΌκ΄λ λͺ¨μκ³Ό ν¬κΈ°μ μΏ ν€λ₯Ό μ¬λ¬ κ° λ§λλλ€. λͺ¨λ ν νλ¦Ώ ν¨ν΄μ μ½λμλ λμΌνκ² μ μ©λμ΄ κ° λͺ¨λμ΄ λ―Έλ¦¬ μ μλ ꡬ쑰μ μ€νμΌμ μ€μνλλ‘ ν©λλ€.
λͺ¨λ ν νλ¦Ώ ν¨ν΄ μ¬μ©μ μ΄μ
- μμ°μ± ν₯μ: μ λͺ¨λ μμ±μ μλννμ¬ κ°λ°μκ° λ 볡μ‘ν μμ μ μ§μ€ν μ μλλ‘ ν©λλ€.
- μ½λ μΌκ΄μ± ν₯μ: λͺ¨λ λͺ¨λμ κ±Έμ³ μΌκ΄λ ꡬ쑰μ μ€νμΌμ μ μ©νμ¬ μ½λλ² μ΄μ€λ₯Ό λ μμΈ‘ κ°λ₯νκ³ μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- μ€λ₯ κ°μ: μ¬λ°λ₯Έ κ²μΌλ‘ μλ €μ§ λ³΄μΌλ¬νλ μ΄νΈ μ½λλ₯Ό μλμΌλ‘ μμ±νμ¬ μ€λ₯ μνμ μ΅μνν©λλ€.
- μ μ§ κ΄λ¦¬μ± ν₯μ: λͺ¨λ λͺ¨λμ΄ νμ€νλ ν¨ν΄μ λ°λ₯΄λλ‘ νμ¬ μ½λ μ μ§ κ΄λ¦¬ λ° λ¦¬ν©ν λ§μ λ¨μνν©λλ€.
- λΉ λ₯Έ μ¨λ³΄λ©: λͺ ννκ³ μΌκ΄λ λͺ¨λ ꡬ쑰λ₯Ό μ 곡νμ¬ μ ν ꡬμ±μμ΄ μ½λλ² μ΄μ€λ₯Ό λΉ λ₯΄κ² μ΄ν΄νλλ‘ λμ΅λλ€.
μΌλ°μ μΈ λͺ¨λ μμ€ν λ° ν΄λΉ ν νλ¦Ώ
JavaScriptλ μ¬λ¬ λͺ¨λ μμ€ν μ κ±°μ³ λ°μ νμΌλ©°, κ°κ° κ³ μ ν ꡬ문과 κ΄λ‘λ₯Ό κ°μ§κ³ μμ΅λλ€. ν νλ¦Ώ ν¨ν΄μ λ€μμ ν¬ν¨ν λͺ¨λ μμ€ν κ³Ό μλνλλ‘ μ‘°μ λ μ μμ΅λλ€.
ES λͺ¨λ (ESM)
ES λͺ¨λμ μ΅μ JavaScriptμ νμ€ λͺ¨λ μμ€ν μΌλ‘, λΈλΌμ°μ μ Node.jsμμ κΈ°λ³Έμ μΌλ‘ μ§μλ©λλ€. `import` λ° `export` ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λ μ’ μμ±κ³Ό λ΄λ³΄λ΄κΈ°λ₯Ό μ μν©λλ€.
μμ ν νλ¦Ώ (ESM):
// {moduleName}.js
// κ°μΈ λ³μ λ° ν¨μ (νμν κ²½μ°)
/**
* {moduleDescription}
*/
export function {functionName}() {
// ꡬν μΈλΆ μ 보
}
// κΈ°ν λ΄λ³΄λ΄μ§ ν¨μ λ° λ³μ
μμ μ¬μ©λ² (ESM):
// myModule.js
/**
* μ΄ λͺ¨λμ μΌλΆ κ³μ°μ μνν©λλ€.
*/
export function calculateSum(a, b) {
return a + b;
}
CommonJS
CommonJSλ μ£Όλ‘ Node.jsμμ μ¬μ©λλ λͺ¨λ μμ€ν μ λλ€. `require()` ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ κ°μ Έμ€κ³ `module.exports` κ°μ²΄λ₯Ό μ¬μ©νμ¬ λ΄λ³΄λ λλ€.
μμ ν νλ¦Ώ (CommonJS):
// {moduleName}.js
// κ°μΈ λ³μ λ° ν¨μ (νμν κ²½μ°)
/**
* {moduleDescription}
*/
exports.{functionName} = function() {
// ꡬν μΈλΆ μ 보
};
// κΈ°ν λ΄λ³΄λ΄μ§ ν¨μ λ° λ³μ
μμ μ¬μ©λ² (CommonJS):
// myModule.js
/**
* μ΄ λͺ¨λμ μΌλΆ κ³μ°μ μνν©λλ€.
*/
exports.calculateSum = function(a, b) {
return a + b;
};
λΉλκΈ° λͺ¨λ μ μ (AMD)
AMDλ λΈλΌμ°μ μμ λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λνκΈ° μν΄ μ€κ³λ λͺ¨λ μμ€ν μ λλ€. `define()` ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λκ³Ό ν΄λΉ μ’ μμ±μ μ μν©λλ€.
μμ ν νλ¦Ώ (AMD):
define(['dependency1', 'dependency2'], function(dependency1, dependency2) {
// κ°μΈ λ³μ λ° ν¨μ (νμν κ²½μ°)
/**
* {moduleDescription}
*/
function {functionName}() {
// ꡬν μΈλΆ μ 보
}
// κΈ°ν λ΄λ³΄λ΄μ§ ν¨μ λ° λ³μ
return {
{functionName}: {functionName}
};
});
μμ μ¬μ©λ² (AMD):
define([], function() {
/**
* μ΄ λͺ¨λμ μΌλΆ κ³μ°μ μνν©λλ€.
*/
function calculateSum(a, b) {
return a + b;
}
return {
calculateSum: calculateSum
};
});
λͺ¨λ ν νλ¦Ώ ν¨ν΄ ꡬν
JavaScript νλ‘μ νΈμμ λͺ¨λ ν νλ¦Ώ ν¨ν΄μ ꡬννλ λ°λ μ¬λ¬ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
1. λ¬Έμμ΄ μ‘°μ
κ°μ₯ κ°λ¨ν μ κ·Ό λ°©μμ λ¬Έμμ΄ μ‘°μμ μ¬μ©νμ¬ ν νλ¦Ώ λ¬Έμμ΄μ κΈ°λ°μΌλ‘ λͺ¨λ μ½λλ₯Ό λμ μΌλ‘ μμ±νλ κ²μ λλ€. μ΄λ ES6μ ν νλ¦Ώ 리ν°λ΄μ΄λ μ΄μ λ²μ JavaScriptμ λ¬Έμμ΄ μ°κ²°μ μ¬μ©νμ¬ μνν μ μμ΅λλ€.
μμ :
function createModule(moduleName, functionName, description) {
const template = `
/**
* ${description}
*/
export function ${functionName}() {
// ꡬν μΈλΆ μ 보
}
`;
return template;
}
const moduleCode = createModule('myModule', 'calculateSum', 'μ΄ λͺ¨λμ μΌλΆ κ³μ°μ μνν©λλ€.');
console.log(moduleCode);
2. ν νλ¦Ώ μμ§
Handlebars, Mustache λλ EJSμ κ°μ ν νλ¦Ώ μμ§μ ν νλ¦Ώμμ μ½λλ₯Ό μμ±νλ λ μ κ΅ν λ°©λ²μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ νλ μ΄μ€νλ, 쑰건문 λ° λ£¨νλ₯Ό μ¬μ©νμ¬ λμ λͺ¨λ ꡬ쑰λ₯Ό λ§λ€ μ μμ΅λλ€.
μμ (Handlebars):
// ν
νλ¦Ώ (module.hbs)
/**
* {{description}}
*/
export function {{functionName}}() {
// ꡬν μΈλΆ μ 보
}
// JavaScript μ½λ
const Handlebars = require('handlebars');
const fs = require('fs');
const templateSource = fs.readFileSync('module.hbs', 'utf8');
const template = Handlebars.compile(templateSource);
const data = {
functionName: 'calculateSum',
description: 'μ΄ λͺ¨λμ μΌλΆ κ³μ°μ μνν©λλ€.'
};
const moduleCode = template(data);
console.log(moduleCode);
3. μ½λ μμ± λꡬ
Yeoman, Plop λλ Hygenκ³Ό κ°μ μ½λ μμ± λꡬλ μ½λ ν νλ¦Ώμ λ§λ€κ³ κ΄λ¦¬νκΈ° μν λ ν¬κ΄μ μΈ νλ μμν¬λ₯Ό μ 곡ν©λλ€. μΌλ°μ μΌλ‘ ν둬ννΈλ₯Ό μ μνκ³ μ¬μ©μ μ λ ₯μ μ ν¨μ± κ²μ¬νλ©° ν νλ¦Ώμ κΈ°λ°μΌλ‘ νμΌμ μμ±νλ κΈ°λ₯μ ν¬ν¨ν©λλ€.
μμ (Yeoman):
Yeomanμ νλ‘μ νΈ μμ±κΈ°λ₯Ό λ§λ€ μ μλ μ€μΊν΄λ© λꡬμ λλ€. μμ±κΈ°λ ν νλ¦Ώμ μ μνκ³ μ¬μ©μμκ² μ 보λ₯Ό μμ²νμ¬ ν΄λΉ ν νλ¦Ώμ μ±μΈ μ μμ΅λλ€.
Yeomanμ μ¬μ©νλ €λ©΄ μΌλ°μ μΌλ‘ νΉμ ν΄λ ꡬ쑰λ₯Ό κ°μ§ μμ±κΈ° νλ‘μ νΈλ₯Ό λ§λλλ€. μ¬κΈ°μλ λͺ¨λ ν νλ¦Ώμ΄ ν¬ν¨λ `templates` ν΄λκ° ν¬ν¨λ©λλ€. κ·Έλ° λ€μ μμ±κΈ°λ μ¬μ©μμκ² μ λ ₯(μ: λͺ¨λ μ΄λ¦, μ€λͺ )μ μμ²νκ³ ν΄λΉ μ λ ₯μ μ¬μ©νμ¬ ν νλ¦Ώμ μ±μ°κ³ ν΄λΉ λͺ¨λ νμΌμ μμ±ν©λλ€.
μ 체 Yeoman μμ λ₯Ό μ 곡νλ κ²μ κ΄λ²μνκ² μ§λ§, κΈ°λ³Έ κ°λ μ νλ μ΄μ€νλκ° μλ ν νλ¦Ώμ μ μνκ³ Yeomanμ APIλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ λ ₯μ μμ§νκ³ ν΄λΉ ν νλ¦Ώμ κΈ°λ°μΌλ‘ νμΌμ μμ±νλ κ²μ λλ€.
4. μ¬μ©μ μ§μ μ€ν¬λ¦½νΈ
Node.js λλ κΈ°ν μ€ν¬λ¦½ν μΈμ΄λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ§μ μ€ν¬λ¦½νΈλ₯Ό μμ±νμ¬ νΉμ μꡬ μ¬νμ λ°λΌ λͺ¨λ μ½λλ₯Ό μμ±ν μλ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ κ°μ₯ ν° μ μ°μ±μ μ 곡νμ§λ§ ꡬννλ €λ©΄ λ λ§μ λ Έλ ₯μ΄ νμν©λλ€.
λͺ¨λ ν νλ¦Ώ ν¨ν΄ μ¬μ©μ λν λͺ¨λ² μ¬λ‘
- λͺ ννκ³ μΌκ΄λ ν νλ¦Ώ μ μ: ν νλ¦Ώμ΄ μ μ μλμ΄ μκ³ μΌκ΄λ ꡬ쑰μ μ€νμΌμ λ°λ₯΄λλ‘ ν©λλ€.
- λμ κ°μ λν νλ μ΄μ€νλ μ¬μ©: λͺ¨λ μ΄λ¦, ν¨μ μ΄λ¦ λ° μ€λͺ κ³Ό κ°μ΄ λ°νμμ μ±μμ§ λμ κ°μ λνλ΄κΈ° μν΄ νλ μ΄μ€νλλ₯Ό μ¬μ©ν©λλ€.
- μλ―Έ μλ λ¬Έμ μ 곡: ν νλ¦Ώμ λ¬Έμννκ³ μ λͺ¨λμ μμ±νκΈ° μν΄ ν νλ¦Ώμ μ¬μ©νλ λ°©λ²μ μ€λͺ ν©λλ€.
- μμ± νλ‘μΈμ€ μλν: λͺ¨λ μμ± νλ‘μΈμ€λ₯Ό λΉλ νμ΄νλΌμΈ λλ κ°λ° μν¬νλ‘μ ν΅ν©ν©λλ€.
- λ²μ κ΄λ¦¬ μ¬μ©: μ½λλ² μ΄μ€μ λλ¨Έμ§ λΆλΆκ³Ό ν¨κ» ν νλ¦Ώμ λ²μ κ΄λ¦¬μ μ μ₯ν©λλ€.
- κ΅μ ν(i18n) κ³ λ €: μ ν리μΌμ΄μ μ΄ μ¬λ¬ μΈμ΄λ₯Ό μ§μν΄μΌ νλ κ²½μ° ν νλ¦Ώμ μ€κ³νμ¬ λ€μν μΈμ΄ μꡬ μ¬νμ μΆ©μ‘±νλλ‘ ν©λλ€. μλ₯Ό λ€μ΄, μ€λ₯Έμͺ½μμ μΌμͺ½ μΈμ΄λ λ€λ₯Έ λ μ§ λ° μ«μ νμμ κ³ λ €ν΄μΌ ν μ μμ΅λλ€. i18n μ§μμ΄ μλ ν νλ¦Ώ μμ§μ μ¬μ©νλ©΄ μ΄ νλ‘μΈμ€λ₯Ό λ¨μνν μ μμ΅λλ€.
- μ κ·Όμ±(a11y) 보μ₯: μμ±λ λͺ¨λμ΄ UI κ΅¬μ± μμλ₯Ό λ λλ§νλ κ²½μ° ν νλ¦Ώμ μ κ·Όμ± κ³ λ € μ¬νμ΄ ν¬ν¨λλλ‘ ν©λλ€. μ¬κΈ°μλ ARIA μμ±μ μΆκ°νκ±°λ μ μ ν μλ§¨ν± HTML ꡬ쑰λ₯Ό 보μ₯νλ κ²μ΄ ν¬ν¨λ μ μμ΅λλ€.
μ€μ μ ν리μΌμ΄μ μμ
- React κ΅¬μ± μμ μμ±: μ¬μ μ μλ props λ° μν κ΄λ¦¬ λ Όλ¦¬λ₯Ό μ¬μ©νμ¬ νμ€νλ React κ΅¬μ± μμ ν νλ¦Ώμ μμ±ν©λλ€.
- API μλν¬μΈνΈ μμ±: μ¬μ μ μλ μμ² μ ν¨μ± κ²μ¬ λ° μ€λ₯ μ²λ¦¬ λ Όλ¦¬λ₯Ό μ¬μ©νμ¬ API μλν¬μΈνΈ νΈλ€λ¬ μμ±μ μλνν©λλ€.
- λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈ λΉλ: μ¬μ μ μλ νλ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈ ν΄λμ€λ₯Ό μμ±ν©λλ€.
- λ§μ΄ν¬λ‘μλΉμ€ κ°λ°: κ΅¬μ± νμΌ, λ‘κΉ λ° λͺ¨λν°λ§ μΈνλΌλ₯Ό ν¬ν¨νμ¬ μ λ§μ΄ν¬λ‘μλΉμ€μ λν 보μΌλ¬νλ μ΄νΈ μ½λλ₯Ό μμ±ν©λλ€.
κΈλ‘λ² μμ: μΈλ, λ―Έκ΅, λ μΌμ κ°λ° νμ΄ μλ νμ¬λ₯Ό μμν΄ λ³΄μΈμ. νμ€νλ λͺ¨λ ν νλ¦Ώμ μ¬μ©νλ©΄ ν κ³³μμ μμ±λ μ½λκ° λ€λ₯Έ κ³³μ κ°λ°μκ° μ½κ² μ΄ν΄νκ³ μ μ§ κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ μ½λ© μ€νμΌμ΄λ μ§μ κ΄λ‘μ μ μ¬μ μΈ μ°¨μ΄μλ λΆκ΅¬νκ³ κ°λ₯ν©λλ€. μλ₯Ό λ€μ΄, λͺ¨λ API μλν¬μΈνΈλ νμ΄ μλν¬μΈνΈλ₯Ό κ°λ°νλμ§ μ¬λΆμ κ΄κ³μμ΄ μΈμ¦, κΆν λΆμ¬ λ° λ°μ΄ν° μ ν¨μ± κ²μ¬λ₯Ό μ²λ¦¬νκΈ° μν μΌκ΄λ ν νλ¦Ώμ λ°λ₯Ό μ μμ΅λλ€.
κ²°λ‘
JavaScript λͺ¨λ ν νλ¦Ώ ν¨ν΄μ JavaScript νλ‘μ νΈμμ μ½λ μμ± λ° μ½λ μΌκ΄μ± ν₯μμ κ°μννλ κ·μ€ν λꡬμ λλ€. μ λͺ¨λ μμ±μ μλνν¨μΌλ‘μ¨ κ°λ°μλ μκ°μ μ μ½νκ³ μ€λ₯λ₯Ό μ€μ΄λ©° λ 볡μ‘ν μμ μ μ§μ€ν μ μμ΅λλ€. κ°λ¨ν λ¬Έμμ΄ μ‘°μ, ν νλ¦Ώ μμ§ λλ μ½λ μμ± λꡬλ₯Ό μ ννλ λͺ¨λ ν νλ¦Ώ ν¨ν΄μ μ±ννλ©΄ κ°λ° μν¬νλ‘κ° ν¬κ² ν₯μλκ³ μ½λλ² μ΄μ€μ μ λ°μ μΈ νμ§μ΄ ν₯μλ μ μμ΅λλ€. νΉν μΌκ΄μ±κ³Ό μ μ§ κ΄λ¦¬μ±μ΄ μ€μν λκ·λͺ¨ λΆμ° νμμλ λμ± μ μ©ν©λλ€.
λͺ¨λ² μ¬λ‘λ₯Ό ꡬννκ³ ν νλ¦Ώμ μ μ€νκ² μ€κ³ν¨μΌλ‘μ¨ νμ μλ κ° λμμ΄ λ κ°λ ₯νκ³ ν¨μ¨μ μΈ μ½λ μμ± μμ€ν μ λ§λ€ μ μμ΅λλ€. λͺ¨λ ν νλ¦Ώ ν¨ν΄μ μ±ννλ κ²μ μμΉλ ν κ·λͺ¨μ κ΄κ³μμ΄ λ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯νλ©° νμ μ μΈ JavaScript μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν λ¨κ³μ λλ€.