NodeJS 21버전에 대해 알아보자
새로 Release한 Node.js version 21
  • NodeJS

시작하기에 앞서

2023년 10월 17일 Node.js 21 버전이 release 되었다. 어떤 새로운 기능들이 있는지 간단히 살펴볼 겸 정리해 본다.

안정적인 fatch/WebStreams

fetch module 과 WebStreams modules 최근 업데이트로 더 안정화되었다.
이는 WebStreams,FormData,Headers,Request,Response,fetch 에 영향을 미친다.

WebSocket client 의 빌트인

이번 릴리즈로 브저우저 호환되는 WebSocket이 실험적으로 릴리즈되었다. 이 기능은 -experimental-websocket flag를 통해 활성화할 수 있다. 이는 실험적인 기능이므로 변경될 가능성이 있다.

V8 11.8 버전으로 업데이트

v8 엔진이 새롭게 업데이트됨에 따라 11.8 버전으로 업데이트되었다. 업데이트로 인해 향상된 성능과 다음과 같은 새로운 기능을 제공한다.

  1. Array grouping
const array = [1, 2, 3, 4, 5];

// `Object.groupBy` groups items by arbitrary key.
// In this case, we're grouping by even/odd keys
Object.groupBy(array, (num, index) => {
  return num % 2 === 0 ? 'even': 'odd';
});
// =>  { odd: [1, 3, 5], even: [2, 4] }

// `Map.groupBy` returns items in a Map, and is useful for grouping
// using an object key.
const odd  = { odd: true };
const even = { even: true };
Map.groupBy(array, (num, index) => {
  return num % 2 === 0 ? even: odd;
});
// =>  Map { {odd: true}: [1, 3, 5], {even: true}: [2, 4] }
  1. [ArrayBuffer.prototype.transfer](https://github.com/tc39/proposal-arraybuffer-transfer)
  2. WebAssembly extended-const expressions

Node.js Test runner에서 globs를 지원

최신 Node.js 업데이트를 통해 테스트 러너에는 --test 매개변수를 지정해서 glob 표현식을 지원한다.
golb패턴을 사용하여 테스트를 보다 효율적이고 유연하게 실행할 수 있다.

예를들어 node --test **/*.test.ts 와 같은 명령을 사용해서 여러 디렉토리에 있는 모든 .test.ts 확장자 파일을 실행할 수 있다.

fs.writeFile 함수에 플러시 옵션 추가

파일에 쓸 때 데이터가 즉시 영구 저장소로 플러시되지 않을 수도 있다.
이번 Node.js 21에 fs.writeFileflush 기능이 추가되었고, 성공적으로 쓰기 작업이 끝나면 데이터를 강제로 flush 한다.

Performance

성능은 런타임의 중요한 속성이다.
이번 @nodejs/performance 팀은 URL, 가져오기, 스트림, node:fs 및 HTTP를 개선했다.

Streams

Node.js streams 팀은 계속해서 Writable 및 Readable 의 스트림을 최적화하고 있다.
이 버전에서 스트림 관리자인 Robert Nagy는 중복 검사를 제거하고 비트맵을 활용하며 callback을 더 효율적인 방식으로 예약하여 스트림을 더 최적화하기 위한 작업을 주도했다.

HTTP

이전에는, chunked 응답을 작성할 때, Node.js는 write(...) 를 호출할 때마다 응답이 corked인지 아닌지 여부와 관계없이 별도의 청크를 생성했다. 이로 인해 클라이언트 및 서버 측 양쪽에서 불필요한 오버헤드가 발생했다.
이 변경 사항은 응답을 해제할 때 write(...)에 대한 모든 호출에 대해 단일 chunk를 생성하여 이 문제를 해결한다.
아래의 예제 코드를 참고할 수 있다.

res.cork();
res.write('Mozilla');
res.write(' Developer Network');
res.uncork();

결론

NodeJS 는 짝수버전으로 LTS 가 나오고 일반적이로 짝수버전을 따라 버전 업데이트를 한다.
이번 Node.js 21 버전에서 특별히 업그레이드 해야할만큼 많은 기능을 담고있지는 않아서 한번 훓어본걸로 만족하자.

참고