Node.js 20 버전 업데이트 내역

Tony·2023년 11월 24일
0

node.js

목록 보기
12/13

지난번 18버전 포스팅을 올렸지만 이미 LTS버전이 20까지 올라왔기 때문에 20버전 업데이트 내역도 정리하고 싶어졌다

주요 업데이트 내역

  • Permission Model
  • Custom ESM loader hooks nearing stable
  • V8 11.3
  • Stable Test Runner
  • Performance
  • Preparing single executable apps now requires injecting a Blob
  • Web Crypto API
  • Official support for ARM64 Windows
  • Progress on Web Assembly System Interface (WASI)
  • Call to action!

이 중에서 몇 개만 정리해보자

Permission Model

Node.js 권한 모델은 실행 중에 특정 리소스에 대한 액세스를 제한하기 위한 실험적인 메커니즘입니다.

  • 파일 시스템에 대한 액세스 제한(읽기 및 쓰기)
    • --allow-fs-read
    • --allow-fs-write
  • child_process에 대한 액세스 제한
    • --allow-child-process
  • worker_threads에 대한 액세스 제한\
    • --allow-worker
  • 기본 애드온에 대한 액세스 제한(--no-addons 플래그와 동일)

이러한 플래그를 활성화하기 위해 개발자는 원하는 권한과 함께 --experimental-permission 플래그를 사용할 수 있습니다.

예를 들어, 다음 명령을 실행하면 전체 파일 시스템에 대한 읽기 및 쓰기 액세스가 모두 허용됩니다.

node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js

개발자는 쉼표로 구분된 값을 플래그에 전달하여 파일 시스템 액세스를 위한 특정 경로를 지정할 수도 있습니다. 예를 들어, 다음 명령은 /tmp/ 폴더에 대한 쓰기 액세스를 허용합니다.

node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

권한 모델이 활성화되면 프로세스 개체의 새로운 권한 속성을 사용하여 런타임 시 특정 권한이 부여되었는지 확인할 수 있습니다.

process.permission.has('fs.write'); // true
process.permission.has('fs.write', '/home/nodejs/protected-folder'); // true

이러한 기능은 아직 실험적이며 향후 Node.js 릴리스에서 변경될 수 있습니다.

관련 문서 : https://nodejs.org/api/permissions.html#process-based-permissions

Custom ESM loader hooks nearing stable

  • Custom ESM 로더 후크가 거의 안정됨

로더(--experimental-loader=./foo.mjs)를 통해 제공되는 사용자 정의 ES 모듈 수명 주기 후크는 이제 기본 스레드와 격리된 전용 스레드에서 실행됩니다.

  • 이는 로더에 대한 별도의 범위를 제공하고 로더와 애플리케이션 코드 간의 교차 오염을 방지합니다.

브라우저 동작에 맞춰 import.meta.resolve()는 이제 동기식으로 반환됩니다. 로더 작성자가 원하는 경우 사용자 로더의 해결 후크는 비동기 상태로 유지될 수 있으며 import.meta.resolve는 여전히 애플리케이션 코드에서 동기적으로 반환됩니다.

V8 11.3

평소와 같이 V8 엔진의 새 버전이 Node.js(Chromium 113의 일부인 버전 11.3으로 업데이트됨)에 포함되어 향상된 성능과 다음을 포함한 새로운 언어 기능을 제공합니다.

  • String.prototype.isWellFormed and toWellFormed
  • Methods that change Array and TypedArray by copy
  • Resizable ArrayBuffer and growable SharedArrayBuffer
  • RegExp v flag with set notation + properties of strings
  • WebAssembly Tail Call

Stable Test Runner

안정적인 테스트 실행기에는 다음을 포함하여 테스트 작성 및 실행을 위한 구성 요소가 포함되어 있습니다.

  • describe, it/test and hooks to structure test files
  • mocking
  • watch mode
  • node --test for running multiple test files in parallel

The test runner also includes some parts that are not yet stable, including reporters and code coverage.

Performance

새로 구성된 Node.js 성능 팀과 함께 마지막 주요 릴리스 이후 성능에 대한 초점이 새롭게 바뀌었습니다. Node.js 20에는 URL, fetch() 및 EventTarget을 포함하여 런타임의 기본 부분에 대한 많은 개선 사항이 포함되어 있습니다.

Preparing single executable apps now requires injecting a Blob

{
  "main": "hello.js",
  "output": "sea-prep.blob"
}
  • 위와 같이 작성한 경우 Blob이 sea-prep.blob 파일에 기록됩니다.
node --experimental-sea-config sea-config.json
  • 위 명령어로 이 blob을 바이너리에 주입할 수 있습니다.

이러한 변경은 새로운 사용 사례를 여는 SEA(Single Executable Apps)에 여러 공존 리소스를 내장할 수 있는 가능성을 허용하기 위해 이루어졌습니다.

Official support for ARM64 Windows

  • ARM64 Windows 공식 지원

Progress on Web Assembly System Interface (WASI)

  • Web Assembly System Interface(WASI)의 진행 상황

이 프로젝트는 Node.js 내의 WASI 구현에 대해 계속해서 작업하고 있습니다.
주목할만한 진전은 실험적이지만 WASI를 활성화하는 데 더 이상 명령줄 옵션이 필요하지 않다는 것입니다.

Call to action!

  • 행동을 요구하다

Node.js 20으로 애플리케이션과 모듈을 테스트하면 최신 Node.js 변경 사항 및 기능과 프로젝트의 향후 호환성을 보장하는 데 도움이 됩니다.

또한 Node.js 14가 2023년 4월에 지원 종료될 예정이므로 Node.js 18 또는 Node.js 20(LTS)으로 업그레이드할 계획을 세우는 것이 좋습니다.

Node.js 16(LTS)은 OpenSSL 1.1.1 지원 종료와 동시에 2024년 4월부터 예정된 2023년 9월에 지원 종료될 예정입니다.

비고

  • Test Runner가 18버전 업데이트 이후 안정화가 되면서 사용해보고 싶다는 생각이 든다
    • 조만간 node 20버전으로 테스트코드를 작성해봐야겠다
  • 사용 중인 노드 버전을 20으로 올려야겠다

참고

profile
움직이는 만큼 행복해진다

0개의 댓글