μ§μ° λ‘λ©μ μν μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ§μ° μ΄κΈ°ν κΈ°λ²μ μμ보μΈμ. μ€μ μ½λ μμ μ λͺ¨λ² μ¬λ‘λ₯Ό ν΅ν΄ μΉ μ ν리μΌμ΄μ μ±λ₯μ ν₯μμν€μΈμ.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ§μ° μ΄κΈ°ν: μ±λ₯μ μν μ§μ° λ‘λ©
λμμμ΄ λ°μ νλ μΉ κ°λ°μ μΈκ³μμ μ±λ₯μ κ°μ₯ μ€μν©λλ€. μ¬μ©μλ€μ μΉμ¬μ΄νΈμ μ ν리μΌμ΄μ μ΄ λΉ λ₯΄κ² λ‘λλκ³ μ¦κ°μ μΌλ‘ λ°μνκΈ°λ₯Ό κΈ°λν©λλ€. μ΅μ μ μ±λ₯μ λ¬μ±νκΈ° μν ν΅μ¬ κΈ°μ μ€ νλλ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ§μ° μ΄κΈ°ν(lazy initialization), μ¦ μ§μ° λ‘λ©(deferred loading)μ λλ€. μ΄ μ κ·Ό λ°©μμ νμ΄μ§κ° μ²μ λ‘λλ λ λͺ¨λ λͺ¨λμ 미리 λ‘λνλ λμ , μ€μ λ‘ νμν λλ§ λͺ¨λμ λ‘λνλ κ²μ ν¬ν¨ν©λλ€. μ΄λ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ μ¬μ©μ κ²½νμ ν₯μμν¬ μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ΄ν΄νκΈ°
μ§μ° μ΄κΈ°νμ λν΄ μμΈν μμ보기 μ μ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ λν΄ κ°λ¨ν 볡μ΅ν΄ λ³΄κ² μ΅λλ€. λͺ¨λμ κΈ°λ₯κ³Ό λ°μ΄ν°λ₯Ό μΊ‘μννλ λ 립μ μΈ μ½λ λ¨μμ λλ€. λͺ¨λμ μ½λμ μ‘°μ§ν, μ¬μ¬μ©μ±, μ μ§λ³΄μμ±μ ν₯μμν΅λλ€. νλ μλ°μ€ν¬λ¦½νΈμ νμ€ λͺ¨λ μμ€ν μΈ ECMAScript λͺ¨λ(ES λͺ¨λ)μ μμ‘΄μ±μ μ μνκ³ κΈ°λ₯μ λ΄λ³΄λ΄κ³ (export)/κ°μ Έμ€λ(import) λͺ ννκ³ μ μΈμ μΈ λ°©λ²μ μ 곡ν©λλ€.
ES λͺ¨λ λ¬Έλ²:
ES λͺ¨λμ import
μ export
ν€μλλ₯Ό μ¬μ©ν©λλ€:
// moduleA.js
export function greet(name) {
return `Hello, ${name}!`;
}
// main.js
import { greet } from './moduleA.js';
console.log(greet('World')); // μΆλ ₯: Hello, World!
ES λͺ¨λ μ΄μ μλ κ°λ°μλ€μ΄ λͺ¨λ κ΄λ¦¬λ₯Ό μν΄ CommonJS(Node.js)λ AMD(λΉλκΈ° λͺ¨λ μ μ)λ₯Ό μμ£Ό μ¬μ©νμ΅λλ€. μ΄λ¬ν λ°©μλ€μ μΌλΆ λ κ±°μ νλ‘μ νΈμμ μ¬μ ν μ¬μ©λμ§λ§, νλ μΉ κ°λ°μμλ ES λͺ¨λμ΄ μ νΈλλ μ νμ λλ€.
μ¦μ λ‘λ©(Eager Loading)μ λ¬Έμ μ
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ κΈ°λ³Έ λμμ μ¦μ λ‘λ©(eager loading)μ λλ€. μ΄λ λͺ¨λμ μν¬νΈν λ λΈλΌμ°μ κ° μ¦μ ν΄λΉ λͺ¨λμ μ½λλ₯Ό λ€μ΄λ‘λ, νμ± λ° μ€ννλ€λ κ²μ μλ―Έν©λλ€. μ΄ λ°©μμ κ°λ¨νμ§λ§, νΉν ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μ λ€λ£° λ μ±λ₯ λ³λͺ© νμμ μ λ°ν μ μμ΅λλ€.
μΉμ¬μ΄νΈμ μ¬λ¬ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ΄ μκ³ , κ·Έ μ€ μΌλΆλ νΉμ μν©μμλ§ νμν κ²½μ°(μ: μ¬μ©μκ° νΉμ λ²νΌμ ν΄λ¦νκ±°λ μ¬μ΄νΈμ νΉμ μΉμ μΌλ‘ μ΄λν λ)λ₯Ό μκ°ν΄ 보μΈμ. μ΄ λͺ¨λ λͺ¨λμ μ΄κΈ°μ μ¦μ λ‘λνλ©΄ μΌλΆ λͺ¨λμ΄ μ ν μ¬μ©λμ§ μλλΌλ λΆνμνκ² μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ΄ μ¦κ°νκ² λ©λλ€.
μ§μ° μ΄κΈ°νμ μ΄μ
μ§μ° μ΄κΈ°νλ λͺ¨λμ λ‘λ©κ³Ό μ€νμ μ€μ λ‘ νμν λκΉμ§ μ§μ°μν΄μΌλ‘μ¨ μ¦μ λ‘λ©μ νκ³λ₯Ό ν΄κ²°ν©λλ€. μ΄λ λ€μκ³Ό κ°μ λͺ κ°μ§ μ£Όμ μ΄μ μ μ 곡ν©λλ€:
- μ΄κΈ° νμ΄μ§ λ‘λ μκ° λ¨μΆ: νμμ μΈ λͺ¨λλ§ λ¨Όμ λ‘λν¨μΌλ‘μ¨ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² λ¨μΆνμ¬ λ λΉ λ₯΄κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€.
- μ±λ₯ ν₯μ: μ΄κΈ°μ λ€μ΄λ‘λνκ³ νμ±νλ 리μμ€κ° μ€μ΄λ€μ΄ λΈλΌμ°μ κ° νμ΄μ§μ κ°μμ μΈ μ½ν μΈ λ₯Ό λ λλ§νλ λ° μ§μ€ν μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ μλΉ κ°μ: μ¦μ νμνμ§ μμ λͺ¨λμ λ‘λλ λκΉμ§ λ©λͺ¨λ¦¬λ₯Ό μλΉνμ§ μμΌλ―λ‘, νΉν 리μμ€κ° μ νλ μ₯μΉμ μ μ©ν μ μμ΅λλ€.
- λ λμ μ½λ ꡬμ±: μ§μ° λ‘λ©μ λͺ¨λν λ° μ½λ λΆν μ μ₯λ €νμ¬ μ½λλ² μ΄μ€λ₯Ό λ κ΄λ¦¬νκΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ’κ² λ§λλλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ§μ° μ΄κΈ°ν κΈ°λ²
μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ§μ° μ΄κΈ°νλ₯Ό ꡬννλ λ° μ¬μ©ν μ μλ λͺ κ°μ§ κΈ°λ²μ΄ μμ΅λλ€:
1. λμ μν¬νΈ(Dynamic Imports)
ES2020μ λμ
λ λμ μν¬νΈλ λͺ¨λμ μ§μ° λ‘λ©νλ κ°μ₯ κ°λ¨νκ³ λ리 μ§μλλ λ°©λ²μ μ 곡ν©λλ€. νμΌ μλ¨μ μ μ import
λ¬Έμ μ¬μ©νλ λμ , λͺ¨λμ΄ λ‘λλ λ λͺ¨λμ λ΄λ³΄λ΄κΈ°(exports)λ‘ ν΄μ(resolve)λλ νλ‘λ―Έμ€(promise)λ₯Ό λ°ννλ import()
ν¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μμ :
// main.js
async function loadModule() {
try {
const moduleA = await import('./moduleA.js');
console.log(moduleA.greet('User')); // μΆλ ₯: Hello, User!
} catch (error) {
console.error('Failed to load module:', error);
}
}
// λ²νΌμ΄ ν΄λ¦λ λ λͺ¨λμ λ‘λν©λλ€
const button = document.getElementById('myButton');
button.addEventListener('click', loadModule);
μ΄ μμ μμ moduleA.js
λ IDκ° "myButton"μΈ λ²νΌμ΄ ν΄λ¦λ λλ§ λ‘λλ©λλ€. await
ν€μλλ λͺ¨λμ λ΄λ³΄λ΄κΈ°μ μ κ·ΌνκΈ° μ μ λͺ¨λμ΄ μμ ν λ‘λλλλ‘ λ³΄μ₯ν©λλ€.
μ€λ₯ μ²λ¦¬:
λμ μν¬νΈλ₯Ό μ¬μ©ν λ λ°μν μ μλ μ€λ₯λ₯Ό μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€. μ μμ μ try...catch
λΈλ‘μ μ¬μ©νλ©΄ λͺ¨λ λ‘λμ μ€ν¨νλ κ²½μ°(μ: λ€νΈμν¬ μ€λ₯ λλ μλͺ»λ κ²½λ‘)λ₯Ό μ°μνκ² μ²λ¦¬ν μ μμ΅λλ€.
2. Intersection Observer
Intersection Observer APIλ₯Ό μ¬μ©νλ©΄ μμκ° λ·°ν¬νΈμ λ€μ΄μ€κ±°λ λκ° λλ₯Ό κ°μν μ μμ΅λλ€. μ΄λ₯Ό μ¬μ©νμ¬ νΉμ μμκ° νλ©΄μ λ³΄μΌ λ λͺ¨λ λ‘λ©μ νΈλ¦¬κ±°ν μ μμ΅λλ€.
μμ :
// main.js
const targetElement = document.getElementById('lazyLoadTarget');
const observer = new IntersectionObserver((entries) => {
entries.forEach(async (entry) => {
if (entry.isIntersecting) {
try {
const moduleB = await import('./moduleB.js');
moduleB.init(); // λͺ¨λ λ΄ ν¨μλ₯Ό νΈμΆνμ¬ μ΄κΈ°νν©λλ€
observer.unobserve(targetElement); // μΌλ¨ λ‘λλλ©΄ κ΄μ°°μ μ€λ¨ν©λλ€
} catch (error) {
console.error('Failed to load module:', error);
}
}
});
});
observer.observe(targetElement);
μ΄ μμ μμ moduleB.js
λ IDκ° "lazyLoadTarget"μΈ μμκ° λ·°ν¬νΈμ λ³΄μΌ λ λ‘λλ©λλ€. observer.unobserve()
λ©μλλ λͺ¨λμ΄ ν λ²λ§ λ‘λλλλ‘ λ³΄μ₯ν©λλ€.
μ¬μ© μ¬λ‘:
Intersection Observerλ μ΄λ―Έμ§, λΉλμ€ λλ κΈ΄ μ€ν¬λ‘€ νμ΄μ§μ μ»΄ν¬λνΈμ κ°μ΄ μ΄κΈ°μ νλ©΄ λ°μ μλ μ½ν μΈ μ κ΄λ ¨λ λͺ¨λμ μ§μ° λ‘λ©νλ λ° νΉν μ μ©ν©λλ€.
3. Promiseλ₯Ό μ΄μ©ν μ‘°κ±΄λΆ λ‘λ©
νλ‘λ―Έμ€λ₯Ό μ‘°κ±΄λΆ λ‘μ§κ³Ό κ²°ν©νμ¬ νΉμ 쑰건μ λ°λΌ λͺ¨λμ λ‘λν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ λμ μν¬νΈλ Intersection Observerλ³΄λ€ λ μΌλ°μ μ΄μ§λ§ νΉμ μλ리μ€μμ μ μ©ν μ μμ΅λλ€.
μμ :
// main.js
function loadModuleC() {
return new Promise(async (resolve, reject) => {
try {
const moduleC = await import('./moduleC.js');
resolve(moduleC);
} catch (error) {
reject(error);
}
});
}
// 쑰건μ λ°λΌ λͺ¨λμ λ‘λν©λλ€
if (someCondition) {
loadModuleC()
.then(moduleC => {
moduleC.run(); // λͺ¨λ λ΄ ν¨μλ₯Ό νΈμΆν©λλ€
})
.catch(error => {
console.error('Failed to load module:', error);
});
}
μ΄ μμ μμ moduleC.js
λ someCondition
λ³μκ° μ°ΈμΌ κ²½μ°μλ§ λ‘λλ©λλ€. νλ‘λ―Έμ€λ λͺ¨λμ λ΄λ³΄λ΄κΈ°μ μ κ·ΌνκΈ° μ μ λͺ¨λμ΄ μμ ν λ‘λλλλ‘ λ³΄μ₯ν©λλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ§μ° μ΄κΈ°νμ λν λͺ κ°μ§ μ€μ©μ μΈ μμ μ μ¬μ© μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
- λκ·λͺ¨ μ΄λ―Έμ§ κ°€λ¬λ¦¬: μ¬μ©μκ° μ΄λ―Έμ§ κ°€λ¬λ¦¬μ μνΈμμ©ν λλ§ μ΄λ―Έμ§ μ²λ¦¬ λλ μ‘°μ λͺ¨λμ μ§μ° λ‘λ©ν©λλ€.
- μΈν°λν°λΈ μ§λ: μ¬μ©μκ° μΉμ¬μ΄νΈμ μ§λ κ΄λ ¨ μΉμ μΌλ‘ μ΄λν λκΉμ§ μ§λ λΌμ΄λΈλ¬λ¦¬(μ: Leaflet, Google Maps API) λ‘λ©μ μ§μ°ν©λλ€.
- 볡μ‘ν μμ: μ¬μ©μκ° νΉμ μμ νλμ μνΈμμ©ν λλ§ μ ν¨μ± κ²μ¬ λλ UI ν₯μ λͺ¨λμ λ‘λν©λλ€.
- λΆμ λ° μΆμ : μ¬μ©μκ° μΆμ μ λμν κ²½μ°μλ§ λΆμ λͺ¨λμ μ§μ° λ‘λ©ν©λλ€.
- A/B ν μ€νΈ: μ¬μ©μκ° νΉμ μ€νμ λμμ΄ λ λλ§ A/B ν μ€νΈ λͺ¨λμ λ‘λν©λλ€.
κ΅μ ν(i18n): μ¬μ©μμ μ νΈ μΈμ΄μ λ°λΌ λ‘μΌμΌλ³ λͺ¨λ(μ: λ μ§/μκ° μμ, μ«μ μμ, λ²μ)μ λμ μΌλ‘ λ‘λν©λλ€. μλ₯Ό λ€μ΄, μ¬μ©μκ° νλμ€μ΄λ₯Ό μ ννλ©΄ νλμ€μ΄ λ‘μΌμΌ λͺ¨λμ μ§μ° λ‘λ©ν©λλ€:
// i18n.js
async function loadLocale(locale) {
try {
const localeModule = await import(`./locales/${locale}.js`);
return localeModule;
} catch (error) {
console.error(`Failed to load locale ${locale}:`, error);
// κΈ°λ³Έ λ‘μΌμΌλ‘ λ체(fallback)ν©λλ€
return import('./locales/en.js');
}
}
// μ¬μ© μμ:
loadLocale(userPreferredLocale)
.then(locale => {
// λ‘μΌμΌμ μ¬μ©νμ¬ λ μ§, μ«μ, ν
μ€νΈμ μμμ μ§μ ν©λλ€
console.log(locale.formatDate(new Date()));
});
μ΄ μ κ·Ό λ°©μμ μ€μ λ‘ νμν μΈμ΄λ³ μ½λλ§ λ‘λνλλ‘ λ³΄μ₯νμ¬ λ€λ₯Έ μΈμ΄λ₯Ό μ νΈνλ μ¬μ©μμ μ΄κΈ° λ€μ΄λ‘λ ν¬κΈ°λ₯Ό μ€μ λλ€. μ΄λ λ€μμ μΈμ΄λ₯Ό μ§μνλ μΉμ¬μ΄νΈμ νΉν μ€μν©λλ€.
μ§μ° μ΄κΈ°νλ₯Ό μν λͺ¨λ² μ¬λ‘
μ§μ° μ΄κΈ°νλ₯Ό ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμΈμ:
- μ§μ° λ‘λ©ν λͺ¨λ μλ³: μ ν리μΌμ΄μ μ λΆμνμ¬ νμ΄μ§μ μ΄κΈ° λ λλ§μ μ€μνμ§ μκ³ νμμ λ°λΌ λ‘λν μ μλ λͺ¨λμ μλ³ν©λλ€.
- μ¬μ©μ κ²½ν μ°μ : λͺ¨λμ λ‘λν λ λμ λλ μ§μ°μ΄ λ°μνμ§ μλλ‘ ν©λλ€. 미리 λ‘λ(preloading)νκ±°λ νλ μ΄μ€νλλ₯Ό νμνλ λ±μ κΈ°μ μ μ¬μ©νμ¬ μνν μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
- μ°μν μ€λ₯ μ²λ¦¬: λͺ¨λ λ‘λ μ€ν¨ μ μν©μ μ μμ μΌλ‘ μ²λ¦¬νκΈ° μν΄ κ°λ ₯ν μ€λ₯ μ²λ¦¬ κΈ°λ₯μ ꡬνν©λλ€. μ¬μ©μμκ² μ μ΅ν μ€λ₯ λ©μμ§λ₯Ό νμν©λλ€.
- μ² μ ν ν μ€νΈ: ꡬνμ΄ μμλλ‘ μλνλμ§ νμΈνκΈ° μν΄ λ€μν λΈλΌμ°μ μ μ₯μΉμμ ν μ€νΈν©λλ€.
- μ±λ₯ λͺ¨λν°λ§: λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ§μ° λ‘λ© κ΅¬νμ΄ μ±λ₯μ λ―ΈμΉλ μν₯μ λͺ¨λν°λ§ν©λλ€. νμ΄μ§ λ‘λ μκ°, μνΈμμ©κΉμ§μ μκ°(TTI), λ©λͺ¨λ¦¬ μ¬μ©λκ³Ό κ°μ μ§νλ₯Ό μΆμ ν©λλ€.
- μ½λ λΆν (Code Splitting) κ³ λ €: μ§μ° μ΄κΈ°νλ μ’ μ’ μ½λ λΆν κ³Ό ν¨κ» μ¬μ©λ©λλ€. ν° λͺ¨λμ λ 립μ μΌλ‘ λ‘λν μ μλ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ²ν¬λ‘ λλλλ€.
- λͺ¨λ λ²λ€λ¬ μ¬μ©(μ ν μ¬ν): νμλ μλμ§λ§, Webpack, Parcel λλ Rollupκ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ μ½λ λΆν λ° μ§μ° λ‘λ© κ³Όμ μ λ¨μνν μ μμ΅λλ€. μ΄λ€μ λμ μν¬νΈ λ¬Έλ² μ§μ λ° μλνλ μμ‘΄μ± κ΄λ¦¬μ κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
λμ κ³Όμ λ° κ³ λ € μ¬ν
μ§μ° μ΄κΈ°νλ μλΉν μ΄μ μ μ 곡νμ§λ§, μ μ¬μ μΈ λμ κ³Όμ μ κ³ λ € μ¬νμ μΈμ§νλ κ²μ΄ μ€μν©λλ€:
- 볡μ‘μ± μ¦κ°: μ§μ° λ‘λ©μ ꡬννλ©΄ μ½λλ² μ΄μ€μ 볡μ‘μ±μ΄ μ¦κ°ν μ μμΌλ©°, νΉν λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ§ μλ κ²½μ° λμ± κ·Έλ μ΅λλ€.
- λ°νμ μ€λ₯ κ°λ₯μ±: μ§μ° λ‘λ©μ μλͺ» ꡬννλ©΄ λͺ¨λμ΄ λ‘λλκΈ° μ μ μ κ·Όμ μλν κ²½μ° λ°νμ μ€λ₯κ° λ°μν μ μμ΅λλ€.
- SEOμ λ―ΈμΉλ μν₯: μ§μ° λ‘λ©λ μ½ν μΈ κ° κ²μ μμ§ ν¬λ‘€λ¬μκ² μ¬μ ν μ κ·Ό κ°λ₯νμ§ νμΈν©λλ€. SEOλ₯Ό κ°μ νκΈ° μν΄ μλ² μ¬μ΄λ λ λλ§ λλ μ¬μ λ λλ§κ³Ό κ°μ κΈ°μ μ μ¬μ©ν©λλ€.
- λ‘λ© νμκΈ°: λͺ¨λμ΄ λ‘λλλ λμ μ¬μ©μμκ² μκ°μ νΌλλ°±μ μ 곡νκ³ λΆμμ ν κΈ°λ₯κ³Ό μνΈμμ©νλ κ²μ λ°©μ§νκΈ° μν΄ λ‘λ© νμκΈ°λ₯Ό νμνλ κ²μ΄ μ’μ΅λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ μ§μ° μ΄κΈ°νλ μΉ μ ν리μΌμ΄μ μ±λ₯μ μ΅μ ννλ κ°λ ₯ν κΈ°μ μ λλ€. λͺ¨λ λ‘λ©μ μ€μ λ‘ νμν λκΉμ§ μ§μ°μν΄μΌλ‘μ¨ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ , μ¬μ©μ κ²½νμ κ°μ νλ©°, 리μμ€ μλΉλ₯Ό μ€μΌ μ μμ΅λλ€. λμ μν¬νΈμ Intersection Observerλ μ§μ° λ‘λ©μ ꡬννλ λ κ°μ§ λμ€μ μ΄κ³ ν¨κ³Όμ μΈ λ°©λ²μ λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ μ μ¬μ μΈ κ³Όμ λ₯Ό μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨, μ§μ° μ΄κΈ°νλ₯Ό νμ©νμ¬ λ λΉ λ₯΄κ³ , λ°μμ±μ΄ λ°μ΄λλ©°, μ¬μ©μ μΉνμ μΈ μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. μ ν리μΌμ΄μ μ νΉμ μꡬ μ¬νμ λΆμνκ³ μꡬ μ¬νμ κ°μ₯ μ ν©ν μ§μ° λ‘λ© κΈ°λ²μ μ ννλ κ²μ μμ§ λ§μΈμ.
μ μΈκ³ κ³ κ°μκ² μλΉμ€λ₯Ό μ 곡νλ μ μμκ±°λ νλ«νΌλΆν° μ보λ₯Ό μ λ¬νλ λ΄μ€ μΉμ¬μ΄νΈμ μ΄λ₯΄κΈ°κΉμ§, ν¨μ¨μ μΈ μλ°μ€ν¬λ¦½νΈ λͺ¨λ λ‘λ©μ μμΉμ 보νΈμ μΌλ‘ μ μ©λ©λλ€. μ΄λ¬ν κΈ°μ μ λ°μλ€μ¬ λͺ¨λλ₯Ό μν λ λμ μΉμ λ§λ€μ΄ κ°μΈμ.