📌 핵심 요약
- Promise.all: 모든 프로미스가 성공해야 하며, 하나라도 실패하면 즉시 거부(Reject)됩니다. (전부 아니면 전무)
- Promise.allSettled: 성공/실패 여부와 관계없이 모든 프로미스의 처리 결과를 배열로 반환합니다.
- Promise.race: 가장 먼저 처리된(Settled) 프로미스의 결과를 반환합니다.
- Promise.any: 가장 먼저 성공(Fulfilled)한 프로미스의 결과를 반환합니다.
💬 실제 면접 답변 예시 "비동기 작업의 병렬 처리 시 목적에 따라 적절한 메서드를 선택하는 것이 성능과 예외 처리에 매우 중요합니다.
예를 들어, 페이지 렌더링에 필수적인 여러 API를 호출할 때는 하나라도 실패하면 의미가 없으므로 **Promise.all**을 사용합니다. 반면, 대시보드처럼 독립적인 여러 위젯의 데이터를 가져올 때는 특정 API가 실패해도 나머지는 보여줘야 하므로 **Promise.allSettled**를 사용하여 개별 결과값에 따른 분기 처리를 합니다.
또한, 타임아웃 처리가 필요할 때는 실제 요청과 setTimeout을 **Promise.race**로 묶어 가장 먼저 끝나는 쪽을 취하고, 여러 서버 중 가장 응답이 빠른 곳의 데이터를 쓰고 싶을 때는 **Promise.any**를 활용하여 네트워크 최적화를 시도한 경험이 있습니다."
💡 실무 팁 & 주의점
- Tip: Promise.all 사용 시 주의할 점은 'Fail Fast' 특성입니다. 여러 요청 중 하나가 1초 만에 실패하고 나머지가 10초 걸리는 상황이라면 1초 만에 전체가 에러로 빠집니다. 에러가 나더라도 다른 요청의 응답을 기다려야 한다면 반드시 allSettled를 고려하세요.
- 주의점: Promise.any는 모든 프로미스가 실패했을 때 AggregateError라는 특수한 에러 객체를 던집니다. 이를 처리하기 위한 별도의 에러 핸들링 로직이 필요하다는 점을 명심해야 합니다.