AggregateError

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.16
조회수
None
버전
v1

AggregateError

Error는 ECMAScript 201(ECMA-62 12 Edition)에서 도입된 JavaScript의 내장 오류 객체로, 여러 개의 오류를의 오류 객체 통합하여 표현할 수 있도록 설계되었습니다. 주로 비동기 작업에서 여러 개의 프로미스가 동시에 실패할 경우, 각각의 오류를 별도로 처리하지 않고 하나의 오류로 묶어 처리할 수 있어 코드의 가독성과 오류 처리의 효율성을 높여줍니다.


개요

JavaScript 오류 처리는 [try...catch](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%98%A4%EB%A5%98%EC%B2%98%EB%A6%AC/try...catch) 문과 Error 객체를 통해 이루어지며, 다양한 상황에 맞는 전용 오류 타입(예: [TypeError](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%98%A4%EB%A5%98%EC%B2%98%EB%A6%AC/TypeError), [SyntaxError](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%98%A4%EB%A5%98%EC%B2%98%EB%A6%AC/SyntaxError))이 존재합니다. AggregateError는 이러한 오류 처리 체계의 확장으로, 여러 오류가 동시에 발생하는 상황에서 유용하게 사용됩니다.

특히 Promise.any()와 같은 비동기 메서드에서 중요한 역할을 하는데, 이 메서드는 주어진 프로미스 중 하나라도 성공하면 결과를 반환하지만, 모든 프로미스가 실패할 경우 AggregateError를 발생시킵니다. 이는 개발자가 어떤 프로미스들이 어떤 이유로 실패했는지를 한 번에 파악할 수 있게 해줍니다.


주요 사용 사례

1. Promise.any()와 함께 사용

Promise.any()는 주어진 프로미스 배열 중 가장 먼저 성공하는 프로미스의 결과를 반환합니다. 그러나 모든 프로미스가 거부(rejected)될 경우, AggregateError를 던집니다.

const promises = [
  Promise.reject(new Error("첫 번째 실패")),
  Promise.reject(new Error("두 번째 실패")),
  Promise.reject(new Error("세 번째 실패"))
];

Promise.any(promises)
  .then(result => console.log(result))
  .catch(error => {
    if (error instanceof AggregateError) {
      console.log("모든 프로미스가 실패했습니다.");
      error.errors.forEach(err => console.error(err.message));
    }
  });

출력 결과:

모든 프로미스가 실패했습니다.
첫 번째 실패
두 번째 실패
세 번째 실패

이 예제에서 AggregateError 객체는 errors 속성을 통해 실패한 모든 오류를 배열 형태로 제공합니다.


2. 수동으로 AggregateError 생성

AggregateError는 직접 생성할 수도 있습니다. 이는 여러 비동기 작업을 병렬로 처리하고, 그 결과에서 여러 오류를 수집하여 통합할 때 유용합니다.

try {
  throw new AggregateError([
    new TypeError("잘못된 유형"),
    new RangeError("범위 초과")
  ], "여러 오류가 발생했습니다.");
} catch (error) {
  if (error instanceof AggregateError) {
    console.log(error.message); // "여러 오류가 발생했습니다."
    error.errors.forEach(err => console.log(err.name));
  }
}

출력 결과:

여러 오류가 발생했습니다.
TypeError
RangeError


AggregateError의 구조

AggregateError는 다음과 같은 속성을 가집니다:

속성 설명
message 오류 메시지 (생략 가능, 기본값은 "AggregateError").
errors 실패한 오류들의 배열. 이 배열은 Error 객체 또는 그 하위 타입을 포함합니다.
stack 스택 추적 정보. 개발 및 디버깅에 사용됩니다.

예시: 속성 접근

const aggError = new AggregateError(
  [new Error("A"), new Error("B")],
  "병합 오류 테스트"
);

console.log(aggError.message); // "병합 오류 테스트"
console.log(aggError.errors.length); // 2
console.log(aggError.stack); // 스택 정보 출력


브라우저 및 환경 지원

AggregateError는 비교적 최근에 도입된 기능이므로, 사용 전에 지원 여부를 확인하는 것이 중요합니다.

환경 지원 여부 최소 버전
Chrome 85+
Firefox 79+
Safari 14+
Node.js 15.0.0+
Edge 85+

💡 노트: 오래된 환경에서는 AggregateError가 정의되지 않을 수 있으므로, 폴리필이나 조건부 처리가 필요할 수 있습니다.


관련 개념

Promise.allSettled()와의 비교

  • Promise.all()은 하나라도 실패하면 즉시 거부되고, 실패한 이유는 첫 번째 오류만 전달합니다.
  • Promise.allSettled()는 모든 프로미스의 결과(성공/실패)를 반환하므로, 실패한 프로미스의 원인을 모두 확인할 수 있지만, 오류를 자동으로 통합하지는 않습니다.
  • Promise.any()는 모든 프로미스가 실패했을 때 AggregateError를 자동으로 생성하여 실패 원인을 통합합니다.

참고 자료


요약

AggregateError는 JavaScript에서 여러 오류를 하나의 오류 객체로 묶어 처리할 수 있도록 해주는 중요한 기능입니다. 특히 비동기 프로그래밍에서 여러 프로미스가 동시에 실패하는 상황을 효과적으로 다루는 데 필수적이며, Promise.any()와의 조합을 통해 코드의 안정성과 유지보수성을 높일 수 있습니다. 현대적인 JavaScript 환경에서는 널리 지원되므로, 비동기 오류 처리 전략에 적극적으로 활용할 것을 권장합니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?