피드로 돌아가기
Two tiny functions that make your async code production-ready: `retry` and `timeout`
Dev.toDev.to
Backend

Higher-Order Functions 기반 Async 복원력 강화 설계

Two tiny functions that make your async code production-ready: `retry` and `timeout`

Daniel Keya2026년 5월 24일5intermediate

Context

네트워크 불안정성과 서버 지연으로 인한 Async 함수 호출의 런타임 실패 위험 존재. 개별 함수 내부에 중복된 Retry 및 Timeout 로직을 구현함에 따른 코드 응집도 저하와 유지보수 효율 감소 문제 발생.

Technical Solution

  • Decorator Pattern 적용을 통한 원본 비즈니스 로직과 인프라 제어 로직의 완전한 분리
  • Higher-Order Function 구조를 채택하여 기존 함수 시그니처를 유지한 채 Resilience 기능 주입
  • try-catch 블록 내 await 명시적 사용을 통한 Promise Rejection의 정확한 포착 및 에러 핸들링
  • Promise.race 활용으로 실제 작업과 Timeout Timer 간의 경쟁 상태를 구현하여 실행 시간 상한선 강제
  • 함수 합성(Composition)을 통한 Retry와 Timeout의 계층적 적용으로 복합적인 실패 대응 전략 수립

1. Async 함수 래핑 시 Promise 반환 값에 await를 누락하여 catch 블록을 우회하는지 확인

2. Retry 횟수 설정 시 '초기 시도 1회 + 재시도 n회'의 총 실행 횟수 정의 명확화

3. Timeout 발생 시 원본 에러와 구분 가능한 명확한 Error Message 정의

4. 비즈니스 로직 수정 없이 기능 확장이 필요한 경우 Higher-Order Function 도입 검토

원문 읽기