JavaScript์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ก ๋น๋๊ธฐ ์คํธ๋ฆผ ์กฐ์ ์ ๋ง์คํฐํ์ธ์. ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ, ๋ณํ, ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
JavaScript ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ ์ค์ผ์คํธ๋ ์ดํฐ: ๋น๋๊ธฐ ์คํธ๋ฆผ ์กฐ์
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ I/O ์์ , ๋คํธ์ํฌ ์์ฒญ ๋ฐ ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ ๋ ํนํ ํ๋ JavaScript ๊ฐ๋ฐ์ ํต์ฌ์ ๋๋ค. ECMAScript 2018์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๊ฐ ๋์ ๋๋ฉด์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์ํ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ต๋๋ค. ์ด ๊ธฐ๋ฐ ์์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ ์ด๋ฌํ ์คํธ๋ฆผ์ ์กฐ์ ํ๊ณ ๋ณํํ๋ ๊ฐ์ํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋์์๋ ์ด๋ฌํ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํจ๊ณผ์ ์ผ๋ก ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค.
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ๋ฐ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ์ดํดํ๊ธฐ
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ์ ๋ฐ์ด๋ค๊ธฐ ์ ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ ์ดํฐ๋ ์ดํฐ ํ๋กํ ์ฝ์ ๋ฐ๋ฅด์ง๋ง, next() ๋ฉ์๋๊ฐ Promise๋ฅผ ๋ฐํํ๋ ๊ฐ์ฒด์
๋๋ค. ์ด๋ฅผ ํตํด ์ํ์ค์์ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ๊ฒ์ํ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋คํธ์ํฌ ์คํธ๋ฆผ์์ ์ค๋ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋น๋๊ธฐ์ ์ผ๋ก ๋์ฐฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. Promise์ ํด๊ฒฐ๋ก ๋ค์ ํญ๋ชฉ์ด ์ค๋น๋ ๋๋ง ๋ค์ ํญ๋ชฉ์ ์ ๋ฌํ๋ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ๊ฐ๋ค๊ณ ์๊ฐํด๋ณด์ธ์.
์์:
ํ์ด์ง๋ก ๋๋ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์ธ์:
async function* fetchPaginatedData(url) {
let nextPageUrl = url;
while (nextPageUrl) {
const response = await fetch(nextPageUrl);
const data = await response.json();
for (const item of data.items) {
yield item;
}
nextPageUrl = data.next_page_url;
}
}
// Usage
const dataStream = fetchPaginatedData('https://api.example.com/data?page=1');
for await (const item of dataStream) {
console.log(item);
}
์ด ์์์์ fetchPaginatedData๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ํจ์์
๋๋ค. ํ์ด์ง๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๊ฐ ํญ๋ชฉ์ ๊ฐ๋ณ์ ์ผ๋ก yieldํฉ๋๋ค. for await...of ๋ฃจํ๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํญ๋ชฉ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๋ง๋ค ์ฒ๋ฆฌํฉ๋๋ค.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ async function* ๊ตฌ๋ฌธ์ผ๋ก ์ ์ธ๋ ํจ์์
๋๋ค. yield ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ์ํ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ฐ yield ๋ฌธ์ yield๋ ๊ฐ์ด ์ดํฐ๋ ์ดํฐ์ ์ํด ์๋น๋ ๋๊น์ง ํจ์์ ์คํ์ ์ผ์ ์ค์งํฉ๋๋ค. ์ด๋ ๋คํธ์ํฌ ์์ฒญ ๋๋ ๋ณต์กํ ๊ณ์ฐ๊ณผ ๊ฐ์ด ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์
์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค.
์์: (์์์ ๊ณ์)
fetchPaginatedData ํจ์๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์
๋๋ค. API์์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๊ณ ๊ฐ๋ณ ํญ๋ชฉ์ yieldํฉ๋๋ค. await ์ฌ์ฉ์ ๊ฐ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์์ ํ ๊ฐ์ ธ์์ง๋๋ก ๋ณด์ฅํฉ๋๋ค. ํต์ฌ์ ์ด ํจ์๋ฅผ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ก ๋ง๋๋ yield ํค์๋์
๋๋ค.
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ ์๊ฐ
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์ด๊ณ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๋ฉ์๋ ์ธํธ์
๋๋ค. ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํํฐ๋ง, ๋งคํ, ์ถ์ ๋ฐ ์๋นํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํฌํผ๋ ์ฒด์ธ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์ด ๋ณต์กํ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. map, filter, reduce์ ๊ฐ์ Array ๋ฉ์๋์ ์ ์ฌํ์ง๋ง ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ์๋ํฉ๋๋ค.
์ฃผ์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ:
map: ์คํธ๋ฆผ์ ๊ฐ ๊ฐ์ ๋ณํํฉ๋๋ค.filter: ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ์ ์ ํํฉ๋๋ค.take: ์คํธ๋ฆผ์์ ๊ฐ์ ธ์ฌ ๊ฐ์ ์๋ฅผ ์ ํํฉ๋๋ค.drop: ์ง์ ๋ ์์ ๊ฐ์ ๊ฑด๋๋๋๋ค.toArray: ๋ชจ๋ ๊ฐ์ ๋ฐฐ์ด๋ก ์์งํฉ๋๋ค.forEach: ๊ฐ ๊ฐ์ ๋ํด ํจ์๋ฅผ ์คํํฉ๋๋ค (๋ถ์์ฉ์ฉ).reduce: ์คํธ๋ฆผ์์ ๋จ์ผ ๊ฐ์ ๋์ ํฉ๋๋ค.some: ํ๋ ์ด์์ ๊ฐ์ด ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ํ์ธํฉ๋๋ค.every: ๋ชจ๋ ๊ฐ์ด ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ํ์ธํฉ๋๋ค.find: ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋ฐํํฉ๋๋ค.flatMap: ๊ฐ ๊ฐ์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ก ๋งคํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํํํํฉ๋๋ค.
์ด๋ฌํ ํฌํผ๋ ์์ง ๋ชจ๋ JavaScript ํ๊ฒฝ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ํ์ง๋ง ํด๋ฆฌํ์ด๋ core-js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
ํฌํผ๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ์คํธ๋ฆผ ์ค์ผ์คํธ๋ ์ด์
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ์ ์ง์ ํ ํ์ ๋ณต์กํ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๋ฅ๋ ฅ์ ์์ต๋๋ค. ์ด๋ฌํ ํฌํผ๋ฅผ ํจ๊ป ์ฐ๊ฒฐํจ์ผ๋ก์จ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ฐ์ด๋ ์ ๊ตํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์์ฑํ ์ ์์ต๋๋ค.
์์: ๋ฐ์ดํฐ ๋ณํ ๋ฐ ํํฐ๋ง
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์ธ์. ๋นํ์ฑ ์ฌ์ฉ์๋ฅผ ํํฐ๋งํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ๋ ํ์์ผ๋ก ๋ณํํ๋ ค๊ณ ํฉ๋๋ค.
async function* fetchUsers() {
// Simulate fetching users from a database
const users = [
{ id: 1, name: 'Alice', isActive: true, country: 'USA' },
{ id: 2, name: 'Bob', isActive: false, country: 'Canada' },
{ id: 3, name: 'Charlie', isActive: true, country: 'UK' },
{ id: 4, name: 'David', isActive: true, country: 'Germany' }
];
for (const user of users) {
yield user;
}
}
async function processUsers() {
const userStream = fetchUsers();
const processedUsers = userStream
.filter(async user => user.isActive)
.map(async user => ({
id: user.id,
name: user.name,
location: user.country
}));
for await (const user of processedUsers) {
console.log(user);
}
}
processUsers();
์ด ์์์์๋ ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค (์ฌ๊ธฐ์๋ ์๋ฎฌ๋ ์ด์
). ๊ทธ๋ฐ ๋ค์ filter๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑ ์ฌ์ฉ์๋ง ์ ํํ๊ณ map์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ ๊ฐ๋จํ ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ๊ฒฐ๊ณผ ์คํธ๋ฆผ์ธ processedUsers๋ ํ์ฑ ์ฌ์ฉ์์ ๋ํด ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ง ํฌํจํฉ๋๋ค.
์์: ๋ฐ์ดํฐ ์ง๊ณ
ํธ๋์ญ์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์๊ณ ์ด ํธ๋์ญ์ ๊ธ์ก์ ๊ณ์ฐํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
async function* fetchTransactions() {
// Simulate fetching transactions
const transactions = [
{ id: 1, amount: 100, currency: 'USD' },
{ id: 2, amount: 200, currency: 'EUR' },
{ id: 3, amount: 50, currency: 'USD' },
{ id: 4, amount: 150, currency: 'GBP' }
];
for (const transaction of transactions) {
yield transaction;
}
}
async function calculateTotalAmount() {
const transactionStream = fetchTransactions();
const totalAmount = await transactionStream.reduce(async (acc, transaction) => {
// Simulate currency conversion to USD
const convertedAmount = await convertToUSD(transaction.amount, transaction.currency);
return acc + convertedAmount;
}, 0);
console.log('Total Amount (USD):', totalAmount);
}
async function convertToUSD(amount, currency) {
// Simulate currency conversion (replace with a real API call)
const exchangeRates = {
'USD': 1,
'EUR': 1.1,
'GBP': 1.3
};
return amount * exchangeRates[currency];
}
calculateTotalAmount();
์ด ์์์์๋ reduce๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํธ๋์ญ์
๊ธ์ก์ ๋์ ํฉ๋๋ค. convertToUSD ํจ์๋ ํตํ ๋ณํ์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค (ํ๋ก๋์
ํ๊ฒฝ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ํตํ ๋ณํ API๋ฅผ ์ฌ์ฉํฉ๋๋ค). ์ด๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๊ฐ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์์ ๋ณต์กํ ์ง๊ณ๋ฅผ ์ํํ๋ ๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์์: ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ฌ์๋
๋น๋๊ธฐ ์์ ์ ํ ๋๋ ์ค๋ฅ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ ๊ธฐ์ ๊ณผ ํจ๊ป ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฌ๊ณ ํ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
async function* fetchDataWithRetries(url, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
yield data;
return; // Success, exit the loop
} catch (error) {
console.error(`Attempt ${attempt} failed: ${error.message}`);
if (attempt === maxRetries) {
throw error; // Re-throw the error if all retries failed
}
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait before retrying
}
}
}
async function processData() {
const dataStream = fetchDataWithRetries('https://api.example.com/unreliable_data');
try {
for await (const data of dataStream) {
console.log('Data:', data);
}
} catch (error) {
console.error('Failed to fetch data after multiple retries:', error.message);
}
}
processData();
์ด ์์์์ fetchDataWithRetries๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ maxRetries ํ์๊น์ง ์ฌ์๋ํ๋ฉด์ URL์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ณต์๋ ฅ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ ๋ ๋ค์ ๊ณ ๋ ค ์ฌํญ์ ์ผ๋์ ๋์ธ์:
- ์ค๋ฅ ์ฒ๋ฆฌ: ์ ํ๋ฆฌ์ผ์ด์
์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ํญ์ ์ค๋ฅ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ์ญ์์ค.
try...catch๋ธ๋ก์ ์ฌ์ฉํ๊ณ ์ค๋ฅ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋ฏธ๋ค์จ์ด ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. - ์์ ๊ด๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ๋คํธ์ํฌ ์คํธ๋ฆผ์ ๋ํ ์ฐ๊ฒฐ ๋ซ๊ธฐ์ ๊ฐ์ ์์์ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์๋์ง ํ์ธํ์ญ์์ค.
- ๋์์ฑ: ์ฝ๋์ ๋์์ฑ ์๋ฏธ๋ฅผ ์ธ์งํ์ญ์์ค. ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ๋ง๊ณ ๋น๋๊ธฐ ์์ ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ ์ ์งํ์ญ์์ค.
- ๋ฐฑํ๋ ์ : ๋ฐ์ดํฐ ์์ฐ์๊ฐ ์๋น์๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐฑํ๋ ์ ์ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ์ญ์์ค. ๋ฒํผ๋ง ๋๋ ์ค๋กํ๋ง๊ณผ ๊ฐ์ ๋ฐฑํ๋ ์ ์ฒ๋ฆฌ ์ ๋ต์ ๊ตฌํํ์ญ์์ค.
- ํด๋ฆฌํ: ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ ์์ง ์ ์ธ๊ณ์ ์ผ๋ก ์ง์๋์ง ์์ผ๋ฏ๋ก, ๋ค์ํ ํ๊ฒฝ์์ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํด๋ฆฌํ ๋๋
core-js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค. - ์ฑ๋ฅ: ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๊ฐ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํธ๋ฆฌํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ์ฑ๋ฅ์ ์ ์ํ์ญ์์ค. ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ ๋๋ ์ฑ๋ฅ์ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์คํธ๋ฆผ์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋์ฒด ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ์ญ์์ค.
- ๊ฐ๋ ์ฑ: ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ์ ๋ณต์กํ ์ฒด์ธ์ด ๊ฐ๋ ฅํ ์ ์์ง๋ง, ๊ฐ๋ ์ฑ์ ์ฐ์ ์ํ์ญ์์ค. ๋ณต์กํ ์์ ์ ๋ ์๊ณ ์ด๋ฆ์ด ์ ์ง์ด์ง ํจ์๋ก ๋๋๊ฑฐ๋ ๊ฐ ๋จ๊ณ์ ๋ชฉ์ ์ ์ค๋ช ํ๊ธฐ ์ํด ์ฃผ์์ ์ฌ์ฉํ์ญ์์ค.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ค์ ์์
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ ๊ด๋ฒ์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค:
- ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์์ ๋ฏธ๋์ด ํผ๋ ๋๋ ๊ธ์ต ์์ฅ๊ณผ ๊ฐ์ ์์ค์์ ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ํํฐ๋ง, ๋ณํ ๋ฐ ์ง๊ณํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ: ETL (Extract, Transform, Load) ํ๋ก์ธ์ค๋ฅผ ์ํ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ผ๊ด๋ ํ์์ผ๋ก ๋ณํํ ๋ค์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋ก๋ํ ์ ์์ต๋๋ค.
- ๋ง์ดํฌ๋ก์๋น์ค ํต์ : ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ๋น๋๊ธฐ ํต์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง ํ ๋๋ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- IoT ์ ํ๋ฆฌ์ผ์ด์ : IoT ์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง, ์ง๊ณ ๋ฐ ๋ถ์ํ ์ ์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ๋น๋๊ธฐ ๊ฒ์ ์ด๋ฒคํธ ๋ฐ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ํ ๋ฐ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์์: ์ฃผ์ ํฐ์ปค ๋ฐ์ดํฐ ์ฒ๋ฆฌ
๊ธ์ต API์์ ์ฃผ์ ํฐ์ปค ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฐ๋๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ฃผ์์ ํํฐ๋งํ๊ณ , ์ด๋ ํ๊ท ์ ๊ณ์ฐํ๊ณ , ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒฝ๊ณ ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
async function* fetchStockTickerData() {
// Simulate fetching stock ticker data
const stockData = [
{ symbol: 'AAPL', price: 150.25 },
{ symbol: 'GOOG', price: 2700.50 },
{ symbol: 'MSFT', price: 300.75 },
{ symbol: 'AAPL', price: 150.50 },
{ symbol: 'GOOG', price: 2701.00 },
{ symbol: 'MSFT', price: 301.00 }
];
for (const data of stockData) {
yield data;
}
}
async function processStockData() {
const stockStream = fetchStockTickerData();
const appleData = stockStream
.filter(async data => data.symbol === 'AAPL')
.map(async data => ({
symbol: data.symbol,
price: data.price,
timestamp: new Date()
}));
for await (const data of appleData) {
console.log('Apple Data:', data);
}
}
processStockData();
๊ฒฐ๋ก
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ JavaScript์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๊ฐ๋ ฅํ๊ณ ์ฐ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ํฌํผ๋ฅผ ํ์ฉํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ฐ์ด๋ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์์ฑํ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ JavaScript ๊ฐ๋ฐ์์ ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ผ๋ฉฐ, ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๊ท์คํ ๋๊ตฌ์ ๋๋ค. ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ๊ฒฌ๊ณ ํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
JavaScript ์ํ๊ณ๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ์ ์ถ๊ฐ ๊ฐ์ ๊ณผ ๊ด๋ฒ์ํ ์ฑํ์ด ์์๋๋ฉฐ, ์ด๋ ๋ชจ๋ JavaScript ๊ฐ๋ฐ์์ ๋๊ตฌ ํคํธ์์ ํ์์ ์ธ ๋ถ๋ถ์ด ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋๊ตฌ์ ๊ธฐ์ ์ ํ์ฉํ์ฌ ์ค๋๋ ์ ๋น๋๊ธฐ ์ธ๊ณ์์ ๋ ํจ์จ์ ์ด๊ณ ๋ฐ์์ฑ์ด ์ข์ผ๋ฉฐ ์ ๋ขฐํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ธ์.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ:
- ๋น๋๊ธฐ ์ฝ๋์์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ๋ฐ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ์ฌ์ฉ์ ์์ํ์ธ์.
- ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ณํํ๊ณ ์ฒ๋ฆฌํ๋ ์คํ์ ํด๋ณด์ธ์.
- ๋ ๋์ ํธํ์ฑ์ ์ํด ํด๋ฆฌํ ๋๋
core-js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์. - ๋น๋๊ธฐ ์์ ์ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์์ ๊ด๋ฆฌ์ ์ง์คํ์ธ์.
- ๋ณต์กํ ์์ ์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋จ๊ณ๋ก ๋๋์ธ์.
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ๋ฅผ ๋ง์คํฐํ๋ฉด ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๊ณ ๋ ์ ๊ตํ๊ณ ํ์ฅ ๊ฐ๋ฅํ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฅ๋ ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ค๊ณํ ๋ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ์ฑ๋ฅ์ ์ฐ์ ์ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.