피드로 돌아가기
Node.js BlogBackend
원문 읽기
Node.js 13.4.0이 captureRejection 옵션을 events, http, http2, net, stream, tls 모듈에 추가해 비동기 작업 중 발생한 거부된 Promise를 이벤트 리스너로 처리 가능하게 함
Node.js 13.4.0 (Current)
AI 요약
Context
Node.js 애플리케이션에서 이벤트 리스너 내 비동기 작업 중 발생하는 Promise 거부(rejection)가 처리되지 않아 unhandledRejection 에러로 프로세스가 종료될 수 있는 문제가 있었다.
Technical Solution
- events 모듈에 captureRejection 옵션 추가: 이벤트 리스너 내 Promise 거부를 별도의 'rejectionHandled' 이벤트로 변환해 처리 가능하게 함
- http 모듈에 captureRejection 적용: HTTP 요청 처리 중 발생하는 Promise 거부를 캡처
- http2 모듈에 captureRejection 적용: 'request'와 'stream' 이벤트에서 Promise 거부 캡처
- net 모듈에 captureRejection 적용: 'connection' 이벤트에서 Promise 거부 캡처
- stream 모듈에 captureRejection 옵션 추가: 스트림 이벤트 리스너의 Promise 거부 처리
- tls 모듈에 captureRejection 적용: TLS 관련 이벤트에서 Promise 거부 캡처
- repl 모듈 개선: 사용자 입력을 먼저 평가해 결과를 미리 표시하는 preview 기능 추가
- worker 모듈 확장: Worker 생성자에 argv 옵션 추가로 워커 스크립트에 인자 전달 가능하게 함
Key Takeaway
Node.js 코어 모듈에서 이벤트 기반 API의 Promise 거부 처리를 통합함으로써 비동기 코드의 안정성을 향상시킬 수 있으며, 개발자는 명시적인 try-catch 없이도 이벤트 리스너 내 Promise 거부를 일관되게 처리할 수 있게 된다.
실천 포인트
Node.js
1
3.
4.0 이상을 사용하는 애플리케이션에서 HTTP 서버나 스트림 처리 시 captureRejection 옵션을 true로 설정하면, 이벤트 리스너 내 비동기 작업의 Promise 거부를 명시적으로 처리할 수 있어 프로세스 종료로 인한 다운타임을 방지할 수 있다.