ν¨μ¨μ μ΄κ³ μ°μν μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μν μλ°μ€ν¬λ¦½νΈ λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌμ κΈ°λ₯μ μ΄ν΄λ³΄μΈμ. μ΄ μ νΈλ¦¬ν°κ° λΉλκΈ° λ°μ΄ν° μ‘°μμ λ¨μννκ³ μλ‘μ΄ κ°λ₯μ±μ μ¬λ λ°©λ²μ μμ보μΈμ.
μλ°μ€ν¬λ¦½νΈ λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌ: μ€νΈλ¦Ό μ²λ¦¬μ νμ λ°ννλ€
λμμμ΄ μ§ννλ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μμ λΉλκΈ° νλ‘κ·Έλλ°μ μ μ λ μ€μν΄μ§κ³ μμ΅λλ€. νΉν λ°μ΄ν° μ€νΈλ¦Όμ λ€λ£° λ λΉλκΈ° μμ μ ν¨μ¨μ μ΄κ³ μ°μνκ² μ²λ¦¬νλ κ²μ λ§€μ° μ€μν©λλ€. μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μ΄ν°λ μ΄ν°μ μ λλ μ΄ν°λ μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μν κ°λ ₯ν κΈ°λ°μ μ 곡νλ©°, λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ μ΄λ₯Ό ν μ°¨μ λμ λ¨μμ±κ³Ό ννλ ₯μΌλ‘ λμ΄μ¬λ¦½λλ€. μ΄ κ°μ΄λμμλ λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌμ μΈκ³λ₯Ό νꡬνλ©° κ·Έ κΈ°λ₯κ³Ό λΉλκΈ° λ°μ΄ν° μ‘°μ μμ μ κ°μννλ λ°©λ²μ 보μ¬μ€λλ€.
λΉλκΈ° μ΄ν°λ μ΄ν°μ μ λλ μ΄ν°λ 무μμΈκ°?
ν¬νΌμ λν΄ μμ보기 μ μ, λΉλκΈ° μ΄ν°λ μ΄ν°μ μ λλ μ΄ν°μ λν΄ κ°λ¨ν 볡μ΅ν΄ λ³΄κ² μ΅λλ€. λΉλκΈ° μ΄ν°λ μ΄ν°λ μ΄ν°λ μ΄ν° νλ‘ν μ½μ λ°λ₯΄μ§λ§ λΉλκΈ°μ μΌλ‘ μλνλ κ°μ²΄μ λλ€. μ¦, `next()` λ©μλκ° `value`μ `done` μμ±μ κ°μ§ κ°μ²΄λ‘ ν΄μλλ Promiseλ₯Ό λ°νν©λλ€. λΉλκΈ° μ λλ μ΄ν°λ λΉλκΈ° μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ ν¨μλ‘, λΉλκΈ°μ μΈ κ°μ μνμ€λ₯Ό μμ±ν μ μκ² ν΄μ€λλ€.
μ격 APIμμ λ°μ΄ν°λ₯Ό μ²ν¬ λ¨μλ‘ μ½μ΄μΌ νλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. λΉλκΈ° μ΄ν°λ μ΄ν°μ μ λλ μ΄ν°λ₯Ό μ¬μ©νλ©΄ μ 체 λ°μ΄ν°μ μ΄ λ€μ΄λ‘λλ λκΉμ§ κΈ°λ€λ¦¬λ λμ , λ°μ΄ν°κ° μ¬μ© κ°λ₯ν΄μ§λ λλ‘ μ²λ¦¬λλ λ°μ΄ν° μ€νΈλ¦Όμ λ§λ€ μ μμ΅λλ€.
async function* fetchUserData(url) {
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(`${url}?page=${page}`);
const data = await response.json();
if (data.users.length === 0) {
hasMore = false;
break;
}
for (const user of data.users) {
yield user;
}
page++;
}
}
// Example usage:
const userStream = fetchUserData('https://api.example.com/users');
for await (const user of userStream) {
console.log(user);
}
μ΄ μμ λ λΉλκΈ° μ λλ μ΄ν°λ₯Ό μ¬μ©νμ¬ APIμμ κ°μ Έμ¨ μ¬μ©μ λ°μ΄ν° μ€νΈλ¦Όμ λ§λλ λ°©λ²μ 보μ¬μ€λλ€. `yield` ν€μλλ₯Ό μ¬μ©νλ©΄ ν¨μ μ€νμ μΌμ μ€μ§νκ³ κ°μ λ°νν μ μμΌλ©°, μ΄ κ°μ `for await...of` 루νμ μν΄ μλΉλ©λλ€.
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌ μκ°
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ λΉλκΈ° μ΄ν°λ μ΄ν°μ λν΄ μλνλ μ νΈλ¦¬ν° λ©μλ μ§ν©μ μ 곡νμ¬, μΌλ°μ μΈ λ°μ΄ν° λ³ν λ° νν°λ§ μμ μ κ°κ²°νκ³ κ°λ μ± λμ λ°©μμΌλ‘ μνν μ μκ² ν΄μ€λλ€. μ΄ ν¬νΌλ€μ `map`, `filter`, `reduce`μ κ°μ λ°°μ΄ λ©μλμ μ μ¬νμ§λ§, λΉλκΈ°μ μΌλ‘ μλνλ©° λ°μ΄ν° μ€νΈλ¦Όμ λν΄ μλν©λλ€.
κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ λ€μκ³Ό κ°μ΅λλ€:
- map: μ΄ν°λ μ΄ν°μ κ° μμλ₯Ό λ³νν©λλ€.
- filter: νΉμ 쑰건μ μΆ©μ‘±νλ μμλ₯Ό μ νν©λλ€.
- take: μ΄ν°λ μ΄ν°μμ μ§μ λ μμ μμλ₯Ό κ°μ Έμ΅λλ€.
- drop: μ΄ν°λ μ΄ν°μμ μ§μ λ μμ μμλ₯Ό 건λλλλ€.
- reduce: μ΄ν°λ μ΄ν°μ μμλ€μ λ¨μΌ κ°μΌλ‘ λμ ν©λλ€.
- toArray: μ΄ν°λ μ΄ν°λ₯Ό λ°°μ΄λ‘ λ³νν©λλ€.
- forEach: μ΄ν°λ μ΄ν°μ κ° μμμ λν΄ ν¨μλ₯Ό μ€νν©λλ€.
- some: μ μ΄λ νλμ μμκ° μ‘°κ±΄μ λ§μ‘±νλμ§ νμΈν©λλ€.
- every: λͺ¨λ μμκ° μ‘°κ±΄μ λ§μ‘±νλμ§ νμΈν©λλ€.
- find: 쑰건μ λ§μ‘±νλ 첫 λ²μ§Έ μμλ₯Ό λ°νν©λλ€.
- flatMap: κ° μμλ₯Ό μ΄ν°λ μ΄ν°μ λ§€ννκ³ κ²°κ³Όλ₯Ό νννν©λλ€.
μ΄ ν¬νΌλ€μ μμ§ κ³΅μ ECMAScript νμ€μ μΌλΆλ μλμ§λ§, λ§μ μλ°μ€ν¬λ¦½νΈ λ°νμμμ μ¬μ©ν μ μμΌλ©° ν΄λ¦¬νμ΄λ νΈλμ€νμΌλ¬λ₯Ό ν΅ν΄ μ¬μ©ν μ μμ΅λλ€.
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌμ μ€μ μμ
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌκ° μ€νΈλ¦Ό μ²λ¦¬ μμ μ μ΄λ»κ² λ¨μνν μ μλμ§ λͺ κ°μ§ μ€μ μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³΄κ² μ΅λλ€.
μμ 1: μ¬μ©μ λ°μ΄ν° νν°λ§ λ° λ§€ν
μ΄μ μμ μ μ¬μ©μ μ€νΈλ¦Όμμ νΉμ κ΅κ°(μ: μΊλλ€)μ μ¬μ©μλ§ νν°λ§ν λ€μ, κ·Έλ€μ μ΄λ©μΌ μ£Όμλ₯Ό μΆμΆνκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
async function* fetchUserData(url) { ... } // Same as before
async function main() {
const userStream = fetchUserData('https://api.example.com/users');
const canadianEmails = userStream
.filter(user => user.country === 'Canada')
.map(user => user.email);
for await (const email of canadianEmails) {
console.log(email);
}
}
main();
μ΄ μμ λ `filter`μ `map`μ ν¨κ» μ°κ²°νμ¬ λ³΅μ‘ν λ°μ΄ν° λ³νμ μ μΈμ μ€νμΌλ‘ μννλ λ°©λ²μ 보μ¬μ€λλ€. μ½λλ μ ν΅μ μΈ λ£¨νμ 쑰건문μ μ¬μ©νλ κ²λ³΄λ€ ν¨μ¬ λ μ½κΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ’μ΅λλ€.
μμ 2: μ¬μ©μ νκ· μ°λ Ή κ³μ°
μ€νΈλ¦Όμ μλ λͺ¨λ μ¬μ©μμ νκ· μ°λ Ήμ κ³μ°νκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
async function* fetchUserData(url) { ... } // Same as before
async function main() {
const userStream = fetchUserData('https://api.example.com/users');
const totalAge = await userStream.reduce((acc, user) => acc + user.age, 0);
const userCount = await userStream.toArray().then(arr => arr.length); // Need to convert to array to get the length reliably (or maintain a separate counter)
const averageAge = totalAge / userCount;
console.log(`Average age: ${averageAge}`);
}
main();
μ΄ μμ μμλ `reduce`λ₯Ό μ¬μ©νμ¬ λͺ¨λ μ¬μ©μμ μ΄ μ°λ Ήμ λμ ν©λλ€. λΉλκΈ° μ΄ν°λ μ΄ν°μμ μ§μ `reduce`λ₯Ό μ¬μ©ν λ μ¬μ©μ μλ₯Ό μ ννκ² μ»μΌλ €λ©΄ (리λμ κ³Όμ μμ μ΄ν°λ μ΄ν°κ° μλΉλκΈ° λλ¬Έμ), `toArray`λ₯Ό μ¬μ©νμ¬ λ°°μ΄λ‘ λ³ννκ±°λ(λͺ¨λ μμλ₯Ό λ©λͺ¨λ¦¬μ λ‘λν¨) `reduce` ν¨μ λ΄μμ λ³λμ μΉ΄μ΄ν°λ₯Ό μ μ§ν΄μΌ ν©λλ€. λ°°μ΄λ‘ λ³ννλ κ²μ λ§€μ° ν° λ°μ΄ν°μ μλ μ ν©νμ§ μμ μ μμ΅λλ€. λ§μ½ λ¨μν κ°μμ ν©κ³λ₯Ό κ³μ°νλ κ²μ΄ λͺ©νλΌλ©΄, λ μμ μ λ¨μΌ `reduce`λ‘ κ²°ν©νλ κ²μ΄ λ λμ μ κ·Ό λ°©μμ λλ€.
async function* fetchUserData(url) { ... } // Same as before
async function main() {
const userStream = fetchUserData('https://api.example.com/users');
const { totalAge, userCount } = await userStream.reduce(
(acc, user) => ({
totalAge: acc.totalAge + user.age,
userCount: acc.userCount + 1,
}),
{ totalAge: 0, userCount: 0 }
);
const averageAge = totalAge / userCount;
console.log(`Average age: ${averageAge}`);
}
main();
μ΄ κ°μ λ λ²μ μ μ΄ μ°λ Ήκ³Ό μ¬μ©μ μμ λμ μ `reduce` ν¨μ λ΄μμ κ²°ν©νμ¬, μ€νΈλ¦Όμ λ°°μ΄λ‘ λ³νν νμκ° μμ΄μ§λ―λ‘ νΉν λμ©λ λ°μ΄ν°μ μμ λ ν¨μ¨μ μ λλ€.
μμ 3: λΉλκΈ° μ€νΈλ¦Όμμ μ€λ₯ μ²λ¦¬νκΈ°
λΉλκΈ° μ€νΈλ¦Όμ λ€λ£° λλ μ μ¬μ μΈ μ€λ₯λ₯Ό μ°μνκ² μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€. λ°λ³΅ μ€μ λ°μν μ μλ λͺ¨λ μμΈλ₯Ό μ‘κΈ° μν΄ μ€νΈλ¦Ό μ²λ¦¬ λ‘μ§μ `try...catch` λΈλ‘μΌλ‘ κ°μ μ μμ΅λλ€.
async function* fetchUserData(url) {
try {
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(`${url}?page=${page}`);
response.throwForStatus(); // Throw an error for non-200 status codes
const data = await response.json();
if (data.users.length === 0) {
hasMore = false;
break;
}
for (const user of data.users) {
yield user;
}
page++;
}
} catch (error) {
console.error('Error fetching user data:', error);
// Optionally, yield an error object or re-throw the error
// yield { error: error.message }; // Example of yielding an error object
}
}
async function main() {
const userStream = fetchUserData('https://api.example.com/users');
try {
for await (const user of userStream) {
console.log(user);
}
} catch (error) {
console.error('Error processing user stream:', error);
}
}
main();
μ΄ μμ μμλ λ°μ΄ν° κ°μ Έμ€κΈ° λ° μ²λ¦¬ μ€ λ°μν μ μλ μ μ¬μ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ `fetchUserData` ν¨μμ `for await...of` 루νλ₯Ό `try...catch` λΈλ‘μΌλ‘ κ°μλλ€. `response.throwForStatus()` λ©μλλ HTTP μλ΅ μν μ½λκ° 200-299 λ²μμ μμ§ μμΌλ©΄ μ€λ₯λ₯Ό λ°μμμΌ λ€νΈμν¬ μ€λ₯λ₯Ό μ‘μ μ μκ² ν΄μ€λλ€. λν μ λλ μ΄ν° ν¨μμμ μ€λ₯ κ°μ²΄λ₯Ό `yield`νμ¬ μ€νΈλ¦Ό μλΉμμκ² λ λ§μ μ 보λ₯Ό μ 곡νλλ‘ μ νν μλ μμ΅λλ€. μ΄λ λ€νΈμν¬ μ λ’°μ±μ΄ ν¬κ² λ€λ₯Ό μ μλ μ μΈκ³μ μΌλ‘ λΆμ°λ μμ€ν μμ λ§€μ° μ€μν©λλ€.
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌ μ¬μ©μ μ΄μ
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νλ©΄ λ€μκ³Ό κ°μ μ¬λ¬ μ΄μ μ΄ μμ΅λλ€:
- κ°λ μ± ν₯μ: λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌμ μ μΈμ μ€νμΌμ μ½λλ₯Ό λ μ½κ² μ½κ³ μ΄ν΄ν μ μκ² λ§λλλ€.
- μμ°μ± μ¦λ: μΌλ°μ μΈ λ°μ΄ν° μ‘°μ μμ μ λ¨μννμ¬ μμ±ν΄μΌ νλ μμ©κ΅¬ μ½λμ μμ μ€μ¬μ€λλ€.
- μ μ§λ³΄μμ± ν₯μ: μ΄λ¬ν ν¬νΌμ ν¨μν νΉμ±μ μ½λ μ¬μ¬μ©μ μ΄μ§νκ³ μ€λ₯ λ°μ μνμ μ€μ λλ€.
- μ±λ₯ ν₯μ: λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ λΉλκΈ° λ°μ΄ν° μ²λ¦¬μ μ΅μ νλ μ μμ΄, μ ν΅μ μΈ λ£¨ν κΈ°λ° μ κ·Ό λ°©μμ λΉν΄ λ λμ μ±λ₯μ μ΄λμ΄λΌ μ μμ΅λλ€.
κ³ λ €μ¬ν λ° λͺ¨λ² μ¬λ‘
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μν κ°λ ₯ν λꡬ λͺ¨μμ μ 곡νμ§λ§, νΉμ κ³ λ €μ¬νκ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μΈμ§νλ κ²μ΄ μ€μν©λλ€:
- λ©λͺ¨λ¦¬ μ¬μ©λ: νΉν λμ©λ λ°μ΄ν°μ μ λ€λ£° λ λ©λͺ¨λ¦¬ μ¬μ©λμ μ μν΄μΌ ν©λλ€. νμν κ²½μ°κ° μλλ©΄ `toArray`μ κ°μ΄ μ 체 μ€νΈλ¦Όμ λ©λͺ¨λ¦¬μ λ‘λνλ μμ μ νΌνμΈμ. κ°λ₯νλ©΄ `reduce`λ `forEach`μ κ°μ μ€νΈλ¦¬λ° μμ μ μ¬μ©νμΈμ.
- μ€λ₯ μ²λ¦¬: λΉλκΈ° μμ μ€ λ°μν μ μλ μ μ¬μ μ€λ₯λ₯Ό μ°μνκ² μ²λ¦¬νκΈ° μν΄ κ²¬κ³ ν μ€λ₯ μ²λ¦¬ λ©μ»€λμ¦μ ꡬννμΈμ.
- μ·¨μ: μ€νΈλ¦Όμ΄ λ μ΄μ νμνμ§ μμ λ λΆνμν μ²λ¦¬λ₯Ό λ°©μ§νκΈ° μν΄ μ·¨μ μ§μμ μΆκ°νλ κ²μ κ³ λ €νμΈμ. μ΄λ μ₯κΈ° μ€ν μμ μ΄λ μ¬μ©μ μνΈ μμ©μ λ€λ£° λ νΉν μ€μν©λλ€.
- λ°°μ(Backpressure): μμ°μκ° μλΉμλ₯Ό μλνμ§ μλλ‘ λ°°μ λ©μ»€λμ¦μ ꡬννμΈμ. μ΄λ μλ μ νμ΄λ λ²νΌλ§κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ λ¬μ±ν μ μμ΅λλ€. μ΄λ νΉν μμΈ‘ν μ μλ λ°μ΄ν° μμ€λ₯Ό λ€λ£° λ μ ν리μΌμ΄μ μ μμ μ±μ 보μ₯νλ λ° μ€μν©λλ€.
- νΈνμ±: μ΄ ν¬νΌλ€μ μμ§ νμ€μ΄ μλλ―λ‘, ꡬν νκ²½μ λμμΌλ‘ ν κ²½μ° ν΄λ¦¬νμ΄λ νΈλμ€νμΌλ¬λ₯Ό μ¬μ©νμ¬ νΈνμ±μ 보μ₯νμΈμ.
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌμ κΈλ‘λ² μ ν리μΌμ΄μ
λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Ό μ²λ¦¬κ° νμμ μΈ λ€μν κΈλ‘λ² μ ν리μΌμ΄μ μμ νΉν μ μ©ν©λλ€:
- μ€μκ° λ°μ΄ν° μ²λ¦¬: μμ λ―Έλμ΄ νΌλ, κΈμ΅ μμ₯, μΌμ λ€νΈμν¬ λ± λ€μν μμ€λ‘λΆν°μ μ€μκ° λ°μ΄ν° μ€νΈλ¦Όμ λΆμνμ¬ μΆμΈλ₯Ό νμ νκ³ , μ΄μμ κ°μ§νκ±°λ, ν΅μ°°λ ₯μ μμ±ν©λλ€. μλ₯Ό λ€μ΄, κΈλ‘λ² μ΄λ²€νΈμ λν λμ€μ μ견μ μ΄ν΄νκΈ° μν΄ μΈμ΄μ κ°μ μ κΈ°λ°μΌλ‘ νΈμμ νν°λ§νλ κ²½μ°μ λλ€.
- λ°μ΄ν° ν΅ν©: λ€μν νμκ³Ό νλ‘ν μ½μ κ°μ§ μ¬λ¬ APIλ λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ₯Ό ν΅ν©ν©λλ€. λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ€μ μ μ₯μμ μ μ₯νκΈ° μ μ λ³ννκ³ μ κ·νν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ°κ° μ체 APIλ₯Ό κ°μ§ μ¬λ¬ μ μμκ±°λ νλ«νΌμ νλ§€ λ°μ΄ν°λ₯Ό ν΅ν© λ³΄κ³ μμ€ν μΌλ‘ μ§κ³νλ κ²½μ°μ λλ€.
- λμ©λ νμΌ μ²λ¦¬: λ‘κ·Έ νμΌμ΄λ λΉλμ€ νμΌκ³Ό κ°μ λμ©λ νμΌμ μ€νΈλ¦¬λ° λ°©μμΌλ‘ μ²λ¦¬νμ¬ μ 체 νμΌμ λ©λͺ¨λ¦¬μ λ‘λνλ κ²μ νΌν©λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μ¨μ μΈ λ°μ΄ν° λΆμ λ° λ³νμ΄ κ°λ₯ν©λλ€. μ μΈκ³μ μΌλ‘ λΆμ°λ μΈνλΌμμ λ°μνλ λ°©λν μλ² λ‘κ·Έλ₯Ό μ²λ¦¬νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νλ κ²μ μμν΄ λ³΄μΈμ.
- μ΄λ²€νΈ κΈ°λ° μν€ν μ²: λΉλκΈ° μ΄λ²€νΈκ° νΉμ μμ μ΄λ μν¬νλ‘μ°λ₯Ό νΈλ¦¬κ±°νλ μ΄λ²€νΈ κΈ°λ° μν€ν μ²λ₯Ό ꡬμΆν©λλ€. λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νμ¬ μ΄λ²€νΈλ₯Ό νν°λ§, λ³ννκ³ λ€λ₯Έ μλΉμμκ² λΌμ°ν ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μ νλ μ΄λ²€νΈλ₯Ό μ²λ¦¬νμ¬ μΆμ²μ κ°μΈννκ±°λ λ§μΌν μΊ νμΈμ νΈλ¦¬κ±°νλ κ²½μ°μ λλ€.
- λ¨Έμ λ¬λ νμ΄νλΌμΈ: λ°μ΄ν°κ° μ μ²λ¦¬, λ³νλμ΄ λ¨Έμ λ¬λ λͺ¨λΈμ 곡κΈλλ λ¨Έμ λ¬λ μ ν리μΌμ΄μ μ© λ°μ΄ν° νμ΄νλΌμΈμ μμ±ν©λλ€. λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νμ¬ λμ©λ λ°μ΄ν°μ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκ³ λ³΅μ‘ν λ°μ΄ν° λ³νμ μνν μ μμ΅λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ μ²λ¦¬νλ κ°λ ₯νκ³ μ°μν λ°©λ²μ μ 곡ν©λλ€. μ΄λ¬ν μ νΈλ¦¬ν°λ₯Ό νμ©ν¨μΌλ‘μ¨ μ½λλ₯Ό λ¨μννκ³ κ°λ μ±μ ν₯μμν€λ©° μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€. λΉλκΈ° νλ‘κ·Έλλ°μ νλ μλ°μ€ν¬λ¦½νΈ κ°λ°μμ μ μ λ 보νΈνλκ³ μμΌλ©°, λΉλκΈ° μ΄ν°λ μ΄ν° ν¬νΌλ 볡μ‘ν λ°μ΄ν° μ‘°μ μμ μ ν΄κ²°νκΈ° μν κ·μ€ν λꡬ λͺ¨μμ μ 곡ν©λλ€. μ΄ ν¬νΌλ€μ΄ μ±μνκ³ λ λ리 μ±νλ¨μ λ°λΌ, μμ¬ν μ¬μ§ μμ΄ λΉλκΈ° μλ°μ€ν¬λ¦½νΈ κ°λ°μ λ―Έλλ₯Ό νμ±νλ λ° μ€μν μν μ ν κ²μ΄λ©°, μ μΈκ³ κ°λ°μλ€μ΄ λ ν¨μ¨μ μ΄κ³ νμ₯ κ°λ₯νλ©° κ²¬κ³ ν μ ν리μΌμ΄μ μ ꡬμΆν μ μκ² ν΄μ€ κ²μ λλ€. μ΄λ¬ν λꡬλ€μ ν¨κ³Όμ μΌλ‘ μ΄ν΄νκ³ νμ©ν¨μΌλ‘μ¨ κ°λ°μλ€μ μ€νΈλ¦Ό μ²λ¦¬μμ μλ‘μ΄ κ°λ₯μ±μ μ΄κ³ κ΄λ²μν μ ν리μΌμ΄μ μ μν νμ μ μΈ μ루μ μ λ§λ€ μ μμ΅λλ€.