피드로 돌아가기
Node.js 13.4.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 13.4.0이 captureRejection 옵션을 events, http, http2, net, stream, tls 모듈에 추가해 비동기 작업 중 발생한 거부된 Promise를 이벤트 리스너로 처리 가능하게 함

Node.js 13.4.0 (Current)

2019년 12월 17일5intermediate

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 거부를 명시적으로 처리할 수 있어 프로세스 종료로 인한 다운타임을 방지할 수 있다.

원문 읽기