E3 — Promise 풀·대기열(비동기 동시성)
작은 동시성 제한으로 많은 비동기 작업을 실행합니다. 대기열을 유지하고 한 번에 몇 개씩 시작하며 결과를 모읍니다.
E3 — Promise 풀·대기열(비동기 동시성)은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
무엇을, 왜 하는가
목표: 시스템에 부하를 주지 않으면서 많은 비동기 작업을 실행합니다.
- 동시성 제한하기(예: 한 번에 2개)
- 간단한 대기열 인덱스 유지하기
- 결과를 배열에 저장하기
- 초보자에게 친숙한 코드와 작은 도우미 사용하기

비동기 작업 도우미
작은 도우미가 지연 후 완료되는 Promise를 반환하며, 테스트를 위해 선택적으로 실패할 수도 있습니다.
// Simulate async work with setTimeout
function fakeJob(name, ms, fail) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
if (fail) {
reject(new Error("fail:" + name));
} else {
resolve("done:" + name);
}
}, ms);
});
}
console.log("demo job:", typeof fakeJob === "function");
풀 구현
runPool은 몇 개의 작업자를 시작합니다. 각 작업자는 다음 작업 인덱스를 가져와 기다립니다. 결과는 입력 순서를 유지합니다.
// Run tasks with a fixed concurrency limit
async function runPool(tasks, limit) {
// tasks: array of functions () => Promise<any>
const results = new Array(tasks.length);
let next = 0;
// worker runs tasks until none left
async function worker() {
while (true) {
const i = next;
if (i >= tasks.length) return;
next = next + 1;
try {
const value = await tasks[i]();
results[i] = { ok: true, value: value };
} catch (e) {
results[i] = { ok: false, error: String(e) };
}
}
}
// start up to limit workers
const workers = [];
for (let k = 0; k < limit; k = k + 1) {
workers.push(worker());
}
await Promise.all(workers);
return results;
}
console.log("pool ready:", typeof runPool === "function");
풀 실행하기
동시에 진행 중인 작업을 2개로 제한하십시오. 배열은 순서를 유지하므로 인덱스 i에는 작업 i의 결과가 저장됩니다.
// Prepare simple tasks
const jobs = [
function () { return fakeJob("A", 300, false); },
function () { return fakeJob("B", 200, false); },
function () { return fakeJob("C", 150, true ); },
function () { return fakeJob("D", 100, false); }
];
// Run with concurrency = 2
(async function () {
const out = await runPool(jobs, 2);
console.log("results:", out);
})();
선택적 재시도 래퍼
작은 withRetry 도우미로 작업을 감싸십시오. 횟수와 로직은 간단하게 유지하십시오.
// Optional: add retry to a task wrapper (beginner-friendly)
function withRetry(task, attempts) {
return async function () {
let lastErr = null;
for (let i = 0; i < attempts; i = i + 1) {
try {
return await task();
} catch (e) {
lastErr = e;
}
}
throw lastErr;
};
}
const jobsWithRetry = [
withRetry(function () { return fakeJob("R1", 80, true); }, 2),
withRetry(function () { return fakeJob("R2", 60, false); }, 2)
];
(async function () {
const out = await runPool(jobsWithRetry, 1);
console.log("retry results:", out);
})();
초보자 안내
팁:
- 작업을 () => 프로미스 함수로 저장합니다.
- 큐에서 사용할 공유 다음 인덱스를 유지합니다.
- 각 작업마다 예외 처리를 사용하고 결과를 저장합니다.
- 초보자에게는 작은 제한(2–4)을 선택합니다.

동시성 제한 기초 퀴즈
빠른 확인: 풀을 사용하는 이유는 무엇일까요?

복습
복습: 작은 프로미스 풀은 고정된 제한으로 작업을 실행하고, 결과 배열에서 순서를 유지하며, 각 작업에 간단한 예외 처리를 사용합니다. 초보자에게 아주 좋은 패턴입니다.

자주 묻는 질문
“E3 — Promise 풀·대기열(비동기 동시성)” 강의는 무료인가요?
네 — “E3 — Promise 풀·대기열(비동기 동시성)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“E3 — Promise 풀·대기열(비동기 동시성)”에서 뭘 배우나요?
작은 동시성 제한으로 많은 비동기 작업을 실행합니다. 대기열을 유지하고 한 번에 몇 개씩 시작하며 결과를 모읍니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“E3 — Promise 풀·대기열(비동기 동시성)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- E1 — 수식 계산기(1부: +와 - LTR)
- E2 — 로그 분석기(간단한 필터와 카운터)
- E3 — Promise 풀·대기열(비동기 동시성)