2023년 10월 17일 Node.js 21 버전이 release 되었다. 어떤 새로운 기능들이 있는지 간단히 살펴볼 겸 정리해 본다.
fetch
module 과 WebStreams
modules 최근 업데이트로 더 안정화되었다.
이는 WebStreams
,FormData
,Headers
,Request
,Response
,fetch
에 영향을 미친다.
이번 릴리즈로 브저우저 호환되는 WebSocket이 실험적으로 릴리즈되었다. 이 기능은 -experimental-websocket
flag를 통해 활성화할 수 있다. 이는 실험적인 기능이므로 변경될 가능성이 있다.
v8 엔진이 새롭게 업데이트됨에 따라 11.8 버전으로 업데이트되었다. 업데이트로 인해 향상된 성능과 다음과 같은 새로운 기능을 제공한다.
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] }
[ArrayBuffer.prototype.transfer](https://github.com/tc39/proposal-arraybuffer-transfer)
최신 Node.js 업데이트를 통해 테스트 러너에는 --test
매개변수를 지정해서 glob 표현식을 지원한다.
golb패턴을 사용하여 테스트를 보다 효율적이고 유연하게 실행할 수 있다.
예를들어 node --test **/*.test.ts
와 같은 명령을 사용해서 여러 디렉토리에 있는 모든 .test.ts
확장자 파일을 실행할 수 있다.
파일에 쓸 때 데이터가 즉시 영구 저장소로 플러시되지 않을 수도 있다.
이번 Node.js 21에 fs.writeFile
에 flush
기능이 추가되었고, 성공적으로 쓰기 작업이 끝나면 데이터를 강제로 flush 한다.
성능은 런타임의 중요한 속성이다.
이번 @nodejs/performance
팀은 URL, 가져오기, 스트림, node:fs 및 HTTP를 개선했다.
Node.js streams
팀은 계속해서 Writable 및 Readable 의 스트림을 최적화하고 있다.
이 버전에서 스트림 관리자인 Robert Nagy
는 중복 검사를 제거하고 비트맵을 활용하며 callback을 더 효율적인 방식으로 예약하여 스트림을 더 최적화하기 위한 작업을 주도했다.
이전에는, chunked 응답을 작성할 때, Node.js는 write(...)
를 호출할 때마다 응답이 corked인지 아닌지 여부와 관계없이 별도의 청크를 생성했다. 이로 인해 클라이언트 및 서버 측 양쪽에서 불필요한 오버헤드가 발생했다.
이 변경 사항은 응답을 해제할 때 write(...)
에 대한 모든 호출에 대해 단일 chunk를 생성하여 이 문제를 해결한다.
아래의 예제 코드를 참고할 수 있다.
res.cork();
res.write('Mozilla');
res.write(' Developer Network');
res.uncork();
NodeJS 는 짝수버전으로 LTS 가 나오고 일반적이로 짝수버전을 따라 버전 업데이트를 한다.
이번 Node.js 21 버전에서 특별히 업그레이드 해야할만큼 많은 기능을 담고있지는 않아서 한번 훓어본걸로 만족하자.