[Node.js] Node.js 15 변경점 번역

주요 변경점

  • AbortController
  • N-API Version 7
  • npm 7
  • Throw on unhandled rejections
  • QUIC (experimental)
  • V8 8.6

AbortController

AbortController의 구현체를 실험적으로 포함합니다. AbortController는 하나 이상의 웹 요청을 필요할 때 중단시키는 인터페이스입니다. 자세한 설명은 아래의 링크를 참고하시면 됩니다.

AbortController

const ac = new AbortController();
ac.signal.addEventListener('abort', () => console.log('Aborted!'),{ once: true });
ac.abort();
console.log(ac.signal.aborted);  // Prints True

위의 예제에서, ac.abort()가 호출될 때, AbortController가 abort event를 trigger합니다.

AbortSignal에 달린 Eventlistener는 반드시 { once: true } 옵션을 주거나 EventEmitter의 once() 메서드를 호출해 abort 이벤트를 한번만 핸들링하고 사라지도록 해야합니다.

N-API 7

우리는 새로운 N-API 버전을 다른 LTS Node.js 버전에도 백포트하여 사용합니다. N-API 7은 가장 최신 메이저 릴리즈 이후 새 버전이고, ArrayBuffers를 다루는 추가 메서드들을 포함합니다.

백포트(backport) : 최신 버전의 소프트웨어 시스템 또는 소프트웨어 구성 요소에서 부품을 가져 와서 동일한 소프트웨어의 이전 버전으로 포팅하는 작업

npm 7

Node.js 15는 npm 7을 사용합니다. Npm 7에는 다양한 새로운 기능들이 추가되었습니다.

  • npm workspace
  • 새로운 package-lock.json 포맷
  • yarn.lock 지원
  • Peer dependency들이 기본적으로 설치됩니다!

Presenting v7.0.0 of the npm CLI - The GitHub Blog

Throw on unhandled rejections

Node.js 15에서는 unhandledRejection에 대한 기본 mode가 warn에서 throw로 바뀝니다. throw mode에서는, unhandledRejection hook이 설정되어 있지 않으면, unhandledRejection는 uncaught exception으로 잡힙니다. unhandledRejection hook을 설정한 사용자들은 그대로 사용하면 됩니다. -unhandled-rejections=mode 라는 process flag를 사용하여 mode를 변경하는 것이 여전히 가능합니다.

Node.js는 UnhandledPromiseRejectionWarning는 많은 버전에서 emit해왔는데, Node.js User Insights: Unhandled Promise Rejections 설문조사와, Node.js Technical Steering Committee vote 의 결과를 바탕으로 mode를 throw로 변경하는 결정을 내렸습니다.

QUIC(experimental)

QUIC는 새로운 UDP 기반 transport protocol이며, HTTP/3의 기반이 됩니다. QUIC는 TLS 3.1, 흐름 제어, 오류 수정, 연결 마이그레이션 및 멀티플렉싱을 통한 내장된 보안 기능을 제공합니다.

Node.js 15는 QUIC을 실험적으로 제공하고 있으며, --experimental-quic 라는 configuration flag를 통해 Node.js를 컴파일하면 사용할 수 있습니다. Node.js QUIC 구현체는 core net 모듈에서 expose 됩니다.

const { createQuicSocket } = require(‘net’);

QUIC에 대한 더 자세한 설명은 Node.js 문서를 참고하시면 됩니다.

V8 8.6

V8 자바스크립트 엔진이 V8 8.6으로 업데이트되었습니다. (V8 8.4가 Node.js 14에서 사용가능한 가장 최신버전이었습니다.) 성능 개선과 함께 V8 업데이트는 아래의 language feature를 포함합니다.

  • Promise.any() — MDN (from V8 8.5)
  • AggregateError — MDN (from V8 8.5)
  • String.prototype.replaceAll()MDN (from V8 8.5)
  • Logical assignment operators &&=, ||=, and ??= — MDN (from V8 8.5)

출처


Written by@Donghoon Song
사람들의 꿈을 이어주는 코멘토에서 일하고 있습니다.

InstagramGitHubTwitterLinkedIn