피드로 돌아가기
Dev.toBackend
원문 읽기
AbortSignal 기반 Ownership 모델 도입으로 Heap 메모리 330배 절감
Owned Async Work In TypeScript. Promise.race Does Not Cancel Your Work
AI 요약
Context
Promise.race 등 기존 Native Promise API는 값의 정산(Settlement)만 처리할 뿐 실행 중인 작업의 소유권을 관리하지 못하는 한계 존재. 이로 인해 Race 패배 작업이 계속 실행되어 불필요한 I/O 비용 발생 및 Token 과금 및 리소스 누수가 발생하는 구조적 문제 직면.
Technical Solution
- 모든 비동기 작업에 AbortSignal을 주입하여 I/O 경계에서 즉각적인 취소가 가능한 Ownership 계약 체결
- run.race 도입을 통해 첫 번째 Settlement 발생 시 나머지 모든 작업에 CancelReason을 전달하고 AbortSignal로 강제 종료하는 구조 설계
- LIFO(Last-In-First-Out) 방식의 ctx.defer 클린업 메커니즘을 통해 리소스 해제 완료 후 메인 Promise가 Resolve 되는 보장성 확보
- CPU Bound 루프의 한계를 극복하기 위해 Host Boundary 수준에서 Worker를 종료하는 Worker Boundary 전략 채택
- Token Budget을 원자적으로 관리하여 임계치 도달 시 Scope 내 모든 Worker를 즉시 중단시키는 전역 제어 레이어 구현
실천 포인트
- 외부 API 호출 시 반드시 AbortSignal을 전달하여 Timeout 및 Race 상황에서 I/O를 즉시 중단하는지 확인 - 비동기 작업의 Cleanup 로직이 Main Process의 Resolve 이전에 완전히 실행되는지 보장하는 LIFO 구조 검토 - CPU 집약적 작업의 경우 AbortController만으로 부족하므로 Worker Thread 종료 전략 도입 고려