0Pricing
JavaScript Academy · 강의

E3 — Promise 풀·대기열(비동기 동시성)

작은 동시성 제한으로 많은 비동기 작업을 실행합니다. 대기열을 유지하고 한 번에 몇 개씩 시작하며 결과를 모읍니다.

E3 — Promise 풀·대기열(비동기 동시성)은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

무엇을, 왜 하는가

목표: 시스템에 부하를 주지 않으면서 많은 비동기 작업을 실행합니다.

  • 동시성 제한하기(예: 한 번에 2개)
  • 간단한 대기열 인덱스 유지하기
  • 결과를 배열에 저장하기
  • 초보자에게 친숙한 코드와 작은 도우미 사용하기
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 1

비동기 작업 도우미

작은 도우미가 지연 후 완료되는 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");
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 2

풀 구현

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");
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 3

풀 실행하기

동시에 진행 중인 작업을 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);
})();
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 4

선택적 재시도 래퍼

작은 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);
})();
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 5

초보자 안내

팁:

  • 작업을 () => 프로미스 함수로 저장합니다.
  • 큐에서 사용할 공유 다음 인덱스를 유지합니다.
  • 각 작업마다 예외 처리를 사용하고 결과를 저장합니다.
  • 초보자에게는 작은 제한(2–4)을 선택합니다.
E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 6

동시성 제한 기초 퀴즈

빠른 확인: 풀을 사용하는 이유는 무엇일까요?

E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 7

복습

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

E3 — Promise 풀·대기열(비동기 동시성) — 일러스트레이션 8

자주 묻는 질문

“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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. E1 — 수식 계산기(1부: +와 - LTR)
  2. E2 — 로그 분석기(간단한 필터와 카운터)
  3. E3 — Promise 풀·대기열(비동기 동시성)
← JavaScript Academy(으)로 돌아가기