μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±μ μν μ’ ν© κ°μ΄λ. νμ₯ κ°λ₯νκ³ μ μ§λ³΄μνκΈ° μ’μ μ ν리μΌμ΄μ μ μν΄ λͺ¨λ μν€ν μ²(CommonJS, ES λͺ¨λ)μ μμ‘΄μ± κ΄λ¦¬ μ λ΅μ λ€λ£Ήλλ€.
μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±: λͺ¨λ μν€ν μ²μ μμ‘΄μ± κ΄λ¦¬
λμμμ΄ λ°μ νλ μΉ κ°λ° νκ²½μμ μλ°μ€ν¬λ¦½νΈλ μ¬μ ν ν΅μ¬ κΈ°μ λ‘ μ리 μ‘κ³ μμ΅λλ€. μ ν리μΌμ΄μ μ΄ λ³΅μ‘ν΄μ§μ λ°λΌ, μ μ§λ³΄μμ±, νμ₯μ±, νμ μ μν΄ μ½λλ₯Ό ν¨κ³Όμ μΌλ‘ ꡬ쑰ννλ κ²μ΄ 무μλ³΄λ€ μ€μν΄μ‘μ΅λλ€. μ΄ κ°μ΄λλ μ μΈκ³μμ λ€μν κ·λͺ¨μ νλ‘μ νΈλ₯Ό μ§ννλ κ°λ°μλ€μ μν΄ λͺ¨λ μν€ν μ²μ μμ‘΄μ± κ΄λ¦¬ κΈ°λ²μ μ΄μ μ λ§μΆ° μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡ν©λλ€.
μ½λ ꡬμ±μ μ€μμ±
μ μ 리λ μ½λλ μλ§μ μ΄μ μ μ 곡ν©λλ€:
- ν₯μλ μ μ§λ³΄μμ±: μ½λλ₯Ό μ΄ν΄, μμ , λλ²κΉ νκΈ° λ μ¬μμ§λλ€.
- κ°νλ νμ₯μ±: μμ μ±μ ν΄μΉμ§ μμΌλ©΄μ μλ‘μ΄ κΈ°λ₯μ μ½κ² μΆκ°ν μ μμ΅λλ€.
- μ¦κ°λ μ¬μ¬μ©μ±: μ¬λ¬ νλ‘μ νΈμμ 곡μ ν μ μλ λͺ¨λμ μ»΄ν¬λνΈ μμ±μ μ΄μ§ν©λλ€.
- λ λμ νμ : λͺ ννκ³ μΌκ΄λ ꡬ쑰λ₯Ό μ 곡νμ¬ νμν¬λ₯Ό λ¨μνν©λλ€.
- 볡μ‘μ± κ°μ: ν° λ¬Έμ λ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ‘°κ°μΌλ‘ λλλλ€.
λμΏ, λ°λ, λ΄μμ κ°λ°μ νμ΄ λκ·λͺ¨ μ΄μ»€λ¨Έμ€ νλ«νΌμμ ν¨κ» μμ νλ€κ³ μμν΄ λ³΄μΈμ. λͺ νν μ½λ κ΅¬μ± μ λ΅μ΄ μλ€λ©΄, κ·Έλ€μ κ³§ μΆ©λ, μ€λ³΅, ν΅ν©μ μ λͺ½μ μ§λ©΄νκ² λ κ²μ λλ€. κ²¬κ³ ν λͺ¨λ μμ€ν κ³Ό μμ‘΄μ± κ΄λ¦¬ μ λ΅μ ν¨κ³Όμ μΈ νμ κ³Ό μ₯κΈ°μ μΈ νλ‘μ νΈ μ±κ³΅μ μν κ²¬κ³ ν κΈ°λ°μ μ 곡ν©λλ€.
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μν€ν μ²
λͺ¨λμ κΈ°λ₯μ μΊ‘μννκ³ κ³΅κ° μΈν°νμ΄μ€λ₯Ό λ ΈμΆνλ λ 립μ μΈ μ½λ λ¨μμ λλ€. λͺ¨λμ μ΄λ¦ μΆ©λμ νΌνκ³ , μ½λ μ¬μ¬μ©μ μ΄μ§νλ©°, μ μ§λ³΄μμ±μ ν₯μμν€λ λ° λμμ΄ λ©λλ€. μλ°μ€ν¬λ¦½νΈλ κ°κ°μ μ₯λ¨μ μ κ°μ§ μ¬λ¬ λͺ¨λ μν€ν μ²λ₯Ό κ±°μ³ λ°μ ν΄ μμ΅λλ€.
1. μ μ μ€μ½ν (μ¬μ© μ§μ!)
μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±μ κ°μ₯ μ΄κΈ° μ κ·Ό λ°©μμ λͺ¨λ λ³μμ ν¨μλ₯Ό λ¨μν μ μ μ€μ½νμ μ μΈνλ κ²μ΄μμ΅λλ€. μ΄ λ°©μμ μ΄λ¦ μΆ©λμ μ λ°νκ³ μ½λμ λν΄ μΆλ‘ νκΈ° μ΄λ ΅κ² λ§λ€κΈ° λλ¬Έμ λ¬Έμ κ° λ§μ΅λλ€. μκ³ μΌνμ±μΈ μ€ν¬λ¦½νΈλ₯Ό μ μΈνκ³ λ μ λ μ μ μ€μ½νλ₯Ό μ¬μ©νμ§ λ§μμμ€.
μμ (λμ μ΅κ΄):
// script1.js
var myVariable = "Hello";
// script2.js
var myVariable = "World"; // μ΄λ°! μΆ©λ λ°μ!
2. μ¦μ μ€ν ν¨μ ννμ (IIFE)
IIFEλ μλ°μ€ν¬λ¦½νΈμμ λΉκ³΅κ° μ€μ½νλ₯Ό μμ±νλ λ°©λ²μ μ 곡ν©λλ€. μ½λλ₯Ό ν¨μλ‘ κ°μΈκ³ μ¦μ μ€νν¨μΌλ‘μ¨ λ³μμ ν¨μκ° μ μ μ€μ½νλ₯Ό μ€μΌμν€λ κ²μ λ°©μ§ν μ μμ΅λλ€.
μμ:
(function() {
var privateVariable = "Secret";
window.myModule = {
getSecret: function() {
return privateVariable;
}
};
})();
console.log(myModule.getSecret()); // μΆλ ₯: Secret
// console.log(privateVariable); // μ€λ₯: privateVariableμ΄ μ μλμ§ μμ
IIFEκ° μ μ μ€μ½νλ³΄λ€ κ°μ λ λ°©λ²μ΄κΈ°λ νμ§λ§, μ¬μ ν μμ‘΄μ±μ κ΄λ¦¬νλ 곡μμ μΈ λ©μ»€λμ¦μ΄ λΆμ‘±νκ³ λκ·λͺ¨ νλ‘μ νΈμμλ λ²κ±°λ‘μμ§ μ μμ΅λλ€.
3. 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)); // μΆλ ₯: 5
CommonJSλ λκΈ°μμΌλ‘ λμν©λλ€. μ¦, λͺ¨λμ require λλ μμλλ‘ λ‘λλκ³ μ€νλ©λλ€. μ΄λ μΌλ°μ μΌλ‘ νμΌ μ κ·Όμ΄ λΉ λ₯Έ μλ² μ¬μ΄λ νκ²½μ μ ν©ν©λλ€. κ·Έλ¬λ μ΄λ¬ν λκΈ°μ νΉμ±μ λ€νΈμν¬μμ λͺ¨λμ λ‘λνλ μλκ° λ릴 μ μλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μλ°μ€ν¬λ¦½νΈμλ μ΄μμ μ΄μ§ μμ΅λλ€.
4. λΉλκΈ° λͺ¨λ μ μ (AMD)
AMDλ λΈλΌμ°μ μμ λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λνκΈ° μν΄ μ€κ³λ λͺ¨λ μμ€ν
μ
λλ€. define()
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μνκ³ require()
ν¨μλ₯Ό μ¬μ©νμ¬ λ‘λν©λλ€. AMDλ νΉν μμ‘΄μ±μ΄ λ§μ λκ·λͺ¨ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μ ν리μΌμ΄μ
μ μ ν©ν©λλ€.
μμ (RequireJS μ¬μ©):
// 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)); // μΆλ ₯: 5
});
AMDλ λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λνμ¬ λκΈ°μ λ‘λ©μ μ±λ₯ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. κ·Έλ¬λ μ½λκ° λ 볡μ‘ν΄μ§ μ μμΌλ©° RequireJSμ κ°μ λͺ¨λ λ‘λ λΌμ΄λΈλ¬λ¦¬κ° νμν©λλ€.
5. ES λͺ¨λ (ESM)
ES λͺ¨λ(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)); // μΆλ ₯: 5
ES λͺ¨λμ μ΄μ λͺ¨λ μμ€ν μ λΉν΄ μ¬λ¬ κ°μ§ μ₯μ μ μ 곡ν©λλ€:
- νμ€ λ¬Έλ²: μλ°μ€ν¬λ¦½νΈ μΈμ΄μ λ΄μ₯λμ΄ μμ΄ μΈλΆ λΌμ΄λΈλ¬λ¦¬κ° νμ μμ΅λλ€.
- μ μ λΆμ: μ»΄νμΌ μκ°μ λͺ¨λ μμ‘΄μ±μ νμΈν μ μμ΄ μ±λ₯μ κ°μ νκ³ μ€λ₯λ₯Ό μ‘°κΈ°μ λ°κ²¬ν μ μμ΅λλ€.
- νΈλ¦¬ μμ΄νΉ(Tree Shaking): λΉλ κ³Όμ μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νμ¬ μ΅μ’ λ²λ€ ν¬κΈ°λ₯Ό μ€μΌ μ μμ΅λλ€.
- λΉλκΈ° λ‘λ©: λͺ¨λμ λΉλκΈ° λ‘λ©μ μ§μνμ¬ λΈλΌμ°μ μ±λ₯μ ν₯μμν΅λλ€.
ES λͺ¨λμ νμ¬ μ΅μ λΈλΌμ°μ μ Node.jsμμ λ리 μ§μλ©λλ€. μλ‘μ΄ μλ°μ€ν¬λ¦½νΈ νλ‘μ νΈμ κΆμ₯λλ μ νμ λλ€.
μμ‘΄μ± κ΄λ¦¬
μμ‘΄μ± κ΄λ¦¬λ νλ‘μ νΈκ° μμ‘΄νλ μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬λ₯Ό κ΄λ¦¬νλ νλ‘μΈμ€μ λλ€. ν¨κ³Όμ μΈ μμ‘΄μ± κ΄λ¦¬λ νλ‘μ νΈκ° λͺ¨λ μμ‘΄μ±μ μ νν λ²μ μ κ°λλ‘ λ³΄μ₯νκ³ , μΆ©λμ νΌνλ©°, λΉλ νλ‘μΈμ€λ₯Ό λ¨μννλ λ° λμμ΄ λ©λλ€.
1. μλ μμ‘΄μ± κ΄λ¦¬
μμ‘΄μ± κ΄λ¦¬μ λν κ°μ₯ κ°λ¨ν μ κ·Ό λ°©μμ νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό μλμΌλ‘ λ€μ΄λ‘λνμ¬ νλ‘μ νΈμ ν¬ν¨μν€λ κ²μ λλ€. μ΄ λ°©μμ μμ‘΄μ±μ΄ κ±°μ μλ μκ·λͺ¨ νλ‘μ νΈμλ μ ν©νμ§λ§, νλ‘μ νΈκ° 컀μ§μ λ°λΌ κΈλ°© κ΄λ¦¬νκΈ° μ΄λ €μμ§λλ€.
μλ μμ‘΄μ± κ΄λ¦¬μ λ¬Έμ μ :
- λ²μ μΆ©λ: λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬κ° λμΌν μμ‘΄μ±μ λ€λ₯Έ λ²μ μ μꡬν μ μμ΅λλ€.
- λ²κ±°λ‘μ΄ μ λ°μ΄νΈ: μμ‘΄μ±μ μ΅μ μνλ‘ μ μ§νλ €λ©΄ νμΌμ μλμΌλ‘ λ€μ΄λ‘λνκ³ κ΅μ²΄ν΄μΌ ν©λλ€.
- μ μ΄ μμ‘΄μ±(Transitive Dependencies): λ΄ μμ‘΄μ±μ μμ‘΄μ±μ κ΄λ¦¬νλ κ²μ 볡μ‘νκ³ μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€.
2. ν¨ν€μ§ κ΄λ¦¬μ (npmκ³Ό Yarn)
ν¨ν€μ§ κ΄λ¦¬μλ μμ‘΄μ± κ΄λ¦¬ νλ‘μΈμ€λ₯Ό μλνν©λλ€. μ€μ ν¨ν€μ§ μ μ₯μλ₯Ό μ 곡νκ³ , μ€μ νμΌμ νλ‘μ νΈμ μμ‘΄μ±μ λͺ μν μ μκ² νλ©°, ν΄λΉ μμ‘΄μ±μ μλμΌλ‘ λ€μ΄λ‘λνκ³ μ€μΉν©λλ€. κ°μ₯ μΈκΈ° μλ λ μλ°μ€ν¬λ¦½νΈ ν¨ν€μ§ κ΄λ¦¬μλ npmκ³Ό Yarnμ λλ€.
npm (Node Package Manager)
npmμ Node.jsμ κΈ°λ³Έ ν¨ν€μ§ κ΄λ¦¬μμ
λλ€. Node.jsμ ν¨κ» μ 곡λλ©° λ°©λν μλ°μ€ν¬λ¦½νΈ ν¨ν€μ§ μνκ³μ μ κ·Όν μ μκ² ν΄μ€λλ€. npmμ package.json
νμΌμ μ¬μ©νμ¬ νλ‘μ νΈμ μμ‘΄μ±μ μ μν©λλ€.
package.json
μμ:
{
"name": "my-project",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.21",
"axios": "^0.27.2"
}
}
package.json
μ λͺ
μλ μμ‘΄μ±μ μ€μΉνλ €λ©΄ λ€μμ μ€ννμΈμ:
npm install
Yarn
Yarnμ νμ΄μ€λΆμμ λ§λ λ λ€λ₯Έ μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ ν¨ν€μ§ κ΄λ¦¬μμ
λλ€. λ λΉ λ₯Έ μ€μΉ μκ°κ³Ό ν₯μλ 보μ λ± npmμ λΉν΄ λͺ κ°μ§ μ₯μ μ μ 곡ν©λλ€. Yarn λν package.json
νμΌμ μ¬μ©νμ¬ μμ‘΄μ±μ μ μν©λλ€.
YarnμΌλ‘ μμ‘΄μ±μ μ€μΉνλ €λ©΄ λ€μμ μ€ννμΈμ:
yarn install
npmκ³Ό Yarn λͺ¨λ λ€μν μ νμ μμ‘΄μ±(μ: κ°λ° μμ‘΄μ±, νΌμ΄ μμ‘΄μ±)μ κ΄λ¦¬νκ³ λ²μ λ²μλ₯Ό μ§μ νλ κΈ°λ₯μ μ 곡ν©λλ€.
3. λ²λ€λ¬ (Webpack, Parcel, Rollup)
λ²λ€λ¬λ μ¬λ¬ μλ°μ€ν¬λ¦½νΈ λͺ¨λκ³Ό κ·Έ μμ‘΄μ±μ κ°μ Έμ λΈλΌμ°μ κ° λ‘λν μ μλ λ¨μΌ νμΌ(λλ μμμ νμΌ)λ‘ κ²°ν©νλ λꡬμ λλ€. λ²λ€λ¬λ μ±λ₯μ μ΅μ ννκ³ μΉ μ ν리μΌμ΄μ μ λ‘λνλ λ° νμν HTTP μμ² μλ₯Ό μ€μ΄λ λ° νμμ μ λλ€.
Webpack
Webpackμ μ½λ λΆν , μ§μ° λ‘λ©, ν« λͺ¨λ κ΅μ²΄ λ± λ€μν κΈ°λ₯μ μ§μνλ κ³ λλ‘ μ€μ κ°λ₯ν λ²λ€λ¬μ
λλ€. Webpackμ μ€μ νμΌ(webpack.config.js
)μ μ¬μ©νμ¬ λͺ¨λμ λ²λ€λ§νλ λ°©λ²μ μ μν©λλ€.
webpack.config.js
μμ:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
Parcel
Parcelμ μ¬μ©νκΈ° μ½λλ‘ μ€κ³λ μ€μ μ΄ νμ μλ(zero-configuration) λ²λ€λ¬μ λλ€. νλ‘μ νΈμ μμ‘΄μ±μ μλμΌλ‘ κ°μ§νκ³ λ³λμ μ€μ μμ΄ λ²λ€λ§ν©λλ€.
Rollup
Rollupμ νΉν λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬λ₯Ό λ§λλ λ° μ ν©ν λ²λ€λ¬μ λλ€. μ΅μ’ λ²λ€μ ν¬κΈ°λ₯Ό ν¬κ² μ€μΌ μ μλ νΈλ¦¬ μμ΄νΉμ μ§μν©λλ€.
μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±μ μν λͺ¨λ² μ¬λ‘
μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ꡬμ±ν λ λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- λͺ¨λ μμ€ν μ¬μ©: λͺ¨λ μμ€ν (ES λͺ¨λ κΆμ₯)μ μ ννκ³ νλ‘μ νΈ μ 체μμ μΌκ΄λκ² μ¬μ©νμΈμ.
- ν° νμΌ λΆν : ν° νμΌμ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λͺ¨λλ‘ λλμΈμ.
- λ¨μΌ μ± μ μμΉ μ€μ: κ° λͺ¨λμ λ¨ νλμ μ μ μλ λͺ©μ μ κ°μ ΈμΌ ν©λλ€.
- μ€λͺ μ μΈ μ΄λ¦ μ¬μ©: λͺ¨λκ³Ό ν¨μμ κ·Έ λͺ©μ μ μ ννκ² λ°μνλ λͺ ννκ³ μ€λͺ μ μΈ μ΄λ¦μ λΆμ¬νμΈμ.
- μ μ λ³μ λ°©μ§: μ μ λ³μ μ¬μ©μ μ΅μννκ³ λͺ¨λμ μ¬μ©νμ¬ μνλ₯Ό μΊ‘μννμΈμ.
- μ½λ λ¬Έμν: λͺ¨λκ³Ό ν¨μμ λͺ©μ μ μ€λͺ νκΈ° μν΄ λͺ ννκ³ κ°κ²°ν μ£Όμμ μμ±νμΈμ.
- λ¦°ν° μ¬μ©: λ¦°ν°(μ: ESLint)λ₯Ό μ¬μ©νμ¬ μ½λ© μ€νμΌμ κ°μ νκ³ μ μ¬μ μΈ μ€λ₯λ₯Ό μ‘μλ΄μΈμ.
- μλνλ ν μ€νΈ: μ½λμ 무결μ±μ 보μ₯νκΈ° μν΄ μλνλ ν μ€νΈ(λ¨μ, ν΅ν©, E2E ν μ€νΈ)λ₯Ό ꡬννμΈμ.
κ΅μ ν κ³ λ €μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ κ°λ°ν λλ λ€μμ κ³ λ €ν΄μΌ ν©λλ€:
- κ΅μ ν (i18n): λ€μν μΈμ΄, ν΅ν, λ μ§/μκ° νμμ μ²λ¦¬νκΈ° μν΄ κ΅μ νλ₯Ό μ§μνλ λΌμ΄λΈλ¬λ¦¬λ νλ μμν¬λ₯Ό μ¬μ©νμΈμ.
- νμ§ν (l10n): λ²μμ μ 곡νκ³ , λ μ΄μμμ μ‘°μ νλ©°, λ¬Ένμ μ°¨μ΄λ₯Ό μ²λ¦¬νμ¬ νΉμ μ§μμ λ§κ² μ ν리μΌμ΄μ μ μ‘°μ νμΈμ.
- μ λμ½λ: λ€μν μΈμ΄μ κ΄λ²μν λ¬Έμλ₯Ό μ§μνκΈ° μν΄ μ λμ½λ(UTF-8) μΈμ½λ©μ μ¬μ©νμΈμ.
- μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ(RTL) μΈμ΄: λ μ΄μμκ³Ό ν μ€νΈ λ°©ν₯μ μ‘°μ νμ¬ μλμ΄ λ° νλΈλ¦¬μ΄μ κ°μ RTL μΈμ΄λ₯Ό μ§μνλλ‘ νμΈμ.
- μ κ·Όμ± (a11y): μ κ·Όμ± κ°μ΄λλΌμΈμ μ€μνμ¬ μ₯μ κ° μλ μ¬μ©μλ μ ν리μΌμ΄μ μ μ κ·Όν μ μλλ‘ λ§λμΈμ.
μλ₯Ό λ€μ΄, μΌλ³Έ, λ μΌ, λΈλΌμ§μ κ³ κ°μ λμμΌλ‘ νλ μ΄μ»€λ¨Έμ€ νλ«νΌμ λ€λ₯Έ ν΅ν(JPY, EUR, BRL), λ μ§/μκ° νμ, μΈμ΄ λ²μμ μ²λ¦¬ν΄μΌ ν©λλ€. κ° μ§μμμ κΈμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄μλ μ μ ν κ΅μ ν(i18n)μ νμ§ν(l10n)κ° λ§€μ° μ€μν©λλ€.
κ²°λ‘
ν¨κ³Όμ μΈ μλ°μ€ν¬λ¦½νΈ μ½λ ꡬμ±μ νμ₯ κ°λ₯νκ³ , μ μ§λ³΄μνκΈ° μ¬μ°λ©°, νμ μ΄ μ©μ΄ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° νμμ μ λλ€. κ°λ°μλ μ¬μ© κ°λ₯ν λ€μν λͺ¨λ μν€ν μ²μ μμ‘΄μ± κ΄λ¦¬ κΈ°λ²μ μ΄ν΄ν¨μΌλ‘μ¨, λμμμ΄ λ³ννλ μΉμ μꡬμ μ μν μ μλ κ²¬κ³ νκ³ μ ꡬ쑰νλ μ½λλ₯Ό λ§λ€ μ μμ΅λλ€. λͺ¨λ² μ¬λ‘λ₯Ό μμ©νκ³ κ΅μ ν μΈ‘λ©΄μ κ³ λ €νλ©΄ μ ν리μΌμ΄μ μ΄ μ μΈκ³ μ¬μ©μκ° μ κ·Όνκ³ μ¬μ©ν μ μλλ‘ λ³΄μ₯ν μ μμ΅λλ€.