Node.js v20의 새로운 기능(Test Runner, Permission Model, SEA, V8 JS Engine 11.3)

게시 됨: 2023-04-28

이제 Node.js v20을 사용할 수 있습니다! 2023년 4월 18일에 공개되었으며 이제 모든 사람이 사용할 수 있습니다. 이 릴리스에서 Node.js는 훨씬 더 안전하고 더 나은 성능을 발휘할 것입니다.

이 릴리스는 짝수 릴리스이므로 2023년 10월에 장기 지원(LTS) 버전이 될 예정이며 2026년 4월까지 지원될 예정입니다. 그러나 Node.js 팀은 커뮤니티를 적극적으로 찾고 있습니다. LTS로 승격되기 전에 문제를 식별하고 수정하기 위한 피드백.

이 새로운 Node.js 릴리스는 실험적인 권한 모델, 동기식 import.meta.resolve , 안정적인 테스트 러너, V8 JavaScript 엔진을 버전 11.3으로 업데이트하여 성능 개선 및 버그를 가져오는 등 개발자가 확실히 인정할 흥미로운 업데이트와 기능을 제공합니다. 수정, 그리고 더 많은 것.

이 기사에서는 Node.js v20에 도입된 변경 사항을 살펴보고 새로운 기능을 자세히 살펴봅니다.

Node.js v20 시작하기

Node.js v20 설치는 다른 버전의 Node.js와 매우 유사합니다. 다음 작업만 수행하면 됩니다.

  1. 공식 Node.js 웹 사이트에서 설치 프로그램 패키지를 다운로드합니다.
  2. 설치 프로그램을 다운로드했으면 실행하고 지침에 따라 설치 프로세스를 완료합니다. 이 과정은 매우 간단하며 라이센스 계약에 동의하고 "다음" 버튼을 클릭하기만 하면 됩니다.
  3. 모든 변경 사항이 적용되도록 설치 프로세스가 완료된 후 시스템/기계를 다시 시작하십시오.
  4. 다음 명령을 실행하여 Node.js 설치를 확인하십시오.
 node -v
Node.js v20 설치 확인
Node.js v20 설치

버전 번호(v20.0.0)가 표시되면 Node.js가 올바르게 설치되었으며 Node.js v20으로 작업할 준비가 된 것입니다.

Node.js v20이 도착했습니다! 권한 모델, 동기식 import.meta.resolve, 안정적인 테스트 러너, 더 흥미로운 기능 및 업데이트를 여기에서 확인하세요. ️ 트윗하려면 클릭하세요.

Node.js v20의 새로운 기능은 무엇인가요?

이 Node.js 릴리스에 도입된 5가지 주요 업데이트를 살펴보겠습니다. 이러한 기능에는 다음이 포함됩니다.

실험적 허가 모델

Node.js v20의 실험적 권한 모델 도입은 개발자가 실행 중에 특정 리소스에 대한 액세스를 더 많이 제어할 수 있도록 하는 중요한 추가 사항입니다.

이 새로운 기능은 프로덕션 환경과 같이 보안 및 리소스 사용이 중요한 경우에 유용합니다.

권한 모델에는 파일 시스템, child_process, worker_threads 및 기본 애드온에 대한 액세스 제한을 비롯한 여러 기능이 있습니다.

개발자는 --allow-fs-read , --allow-fs-write--allow-child-process 와 같은 플래그를 사용하여 액세스 가능한 리소스를 지정할 수 있습니다. 이러한 플래그를 활성화하려면 개발자는 필수 권한과 함께 --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

권한 모델의 중요한 이점 중 하나는 파일 시스템의 액세스를 보다 세밀하게 제어할 수 있다는 것입니다. 예를 들어 개발자는 경로와 와일드카드 패턴을 지정하여 특정 폴더나 파일에 대한 액세스를 허용할 수 있습니다.

 $ node --experimental-permission --allow-fs-read=/home/user/* index.js

위의 명령은 /home/user/ 디렉토리 내의 모든 폴더에 대한 읽기 액세스 권한을 부여합니다.

프로세스 개체의 권한 속성을 사용하여 런타임에 특정 권한이 부여되었는지 확인할 수도 있습니다. 예를 들어 Node.js 프로세스에 특정 폴더 /home/user/documents 에 대한 읽기 액세스 권한이 있는지 확인하려면 다음 코드를 사용할 수 있습니다.

 if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }

권한 모델을 사용하면 Node.js 프로세스의 파일 시스템 액세스를 보다 세밀하게 제어할 수 있으므로 보안이 향상되고 리소스를 보다 효율적으로 사용할 수 있습니다.

권한 모델은 아직 실험적이며 향후 Node.js 릴리스에서 변경될 수 있다는 점에 유의해야 합니다. 권한 모델 문서를 최신 상태로 유지하고 이러한 실험적 기능을 사용할 때 주의를 기울이는 것이 좋습니다.

안정적인 테스트 러너

Node.js v20에는 개발자가 추가 종속 항목을 설치하지 않고도 빠르고 쉽게 JavaScript 테스트 스위트를 빌드하고 실행할 수 있는 안정적인 버전의 test_runner 모듈이 포함되어 있습니다.

이제 안정적인 테스트 러너에는 테스트 파일을 작성하고 구조화하기 위한 describe , it / test 및 hooks와 같은 여러 구성 요소가 포함되어 있으며 모킹, 감시 모드 및 node --test 명령.

다음은 테스트 실행기를 사용하는 방법의 예입니다.

 import { test, mock } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; mock.method(fs, 'readFile', async () => "Hello World"); test('synchronous passing test', async (t) => { // This test passes because it does not throw an exception. assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); });

테스트 러너는 --test-reporter 플래그를 통해 구성 가능한 사용자 지정 테스트 리포터, --experimental-test-coverage 플래그를 통한 실험 테스트 범위 및 모의 기능을 제공합니다.

Jest 또는 Mocha와 같은 완전한 기능을 갖춘 테스트 프레임워크를 대체하기 위한 것은 아니지만 안정적인 테스트 러너는 테스트 스위트를 생성하는 간단하고 빠른 방법을 제공합니다. Node.js v19에 도입된 이후 크게 향상되었으며 최종 사용자 테스트 및 피드백 덕분에 이제 Node.js v20에서 안정적인 것으로 표시되었습니다.

자세한 내용은 이 병합된 풀 리퀘스트에서 확인할 수 있습니다.

V8 자바스크립트 엔진이 11.3으로 업데이트되었습니다.

Node.js를 구동하는 V8 JavaScript 엔진이 Node.js v20에서 버전 11.3으로 업데이트되었습니다. 이를 통해 성능이 향상되고 새로운 언어 기능이 도입됩니다. 이 업데이트에는 다음과 같은 새로운 기능이 포함되어 있습니다.

  • String.prototype.isWellFormedtoWellFormed : 이러한 메서드는 적절한 문자열 형식을 보장하는 데 특히 유용합니다. 이를 통해 사용자 문자열 입력이 올바른 UTF-16 형식인지 확인하여 이모지 사용 기간 오류를 줄일 수 있습니다.
  • 복사에 의해 Array 및 TypedArray를 변경하는 메서드: 원본 데이터에 영향을 주지 않고 수정된 배열 복사본을 만드는 데 유용할 수 있습니다. 이는 특히 비교 또는 기타 목적을 위해 원본 데이터를 보존해야 하는 경우에 적합합니다.
  • 크기 조정 가능한 ArrayBuffer 및 확장 가능한 SharedArrayBuffer : 더 큰 유연성을 제공하여 보다 효율적인 메모리 할당이 가능합니다.
  • 문자열의 표기법 및 속성이 설정된 RegExp v 플래그: 정규 표현식에 대한 기능을 추가합니다.
  • WebAssembly 꼬리 호출: 특정 유형의 함수 호출을 최적화하는 방법을 제공합니다.

이러한 업데이트는 성능과 기능을 개선하기 위한 Node.js 개발 커뮤니티의 지속적인 노력을 보여줍니다.

동기 import.meta.resolve()

Node.js v20에서는 import.meta.resolve() 도입되어 위치를 구분하지 않는 스크립트를 더 쉽게 작성할 수 있습니다. 이 함수는 브라우저 동작과 유사하게 동기식으로 반환되므로 보다 효율적인 실행이 가능합니다.

사용자 로더 확인 후크는 여전히 비동기 함수로 정의할 수 있지만 비동기 확인 후크가 로드되더라도 import.meta.resolve() 는 여전히 애플리케이션 코드에 대해 동기식으로 반환됩니다.

import.meta.resolve() 의 동기식 동작은 특히 많은 양의 데이터를 처리할 때 보다 효율적인 코드 실행을 허용합니다. 작성자는 기본 설정에 따라 해결 후크를 비동기 또는 동기화 함수로 정의할 수 있습니다. 애플리케이션 코드는 로드된 비동기 확인 후크가 있는지 여부에 관계없이 여전히 동기적으로 실행됩니다.

실험적 단일 실행 가능 애플리케이션(SEA)

SEA(Experimental Single Executable Applications)는 Node.js v20에 도입된 새로운 기능으로, 애플리케이션을 Node.js 바이너리와 번들링하여 최종 사용자가 단일 실행 파일로 배포하고 실행할 수 있도록 합니다.

이것은 커뮤니티의 오랜 요청이었으며 팀은 지난 1년 동안 접근 방식을 개선해 왔습니다.

Node.js v20에서 실행 가능한 단일 앱을 빌드하려면 원시 JS 파일을 주입하는 대신 JSON 구성에서 Node.js가 준비한 블롭을 주입해야 합니다.

Blob은 이진 데이터를 포함하는 파일이며 이 경우 Node.js에서 준비하며 이진 데이터에 주입됩니다. 이 변경은 공존하는 여러 리소스를 SEA에 내장할 수 있도록 하여 새로운 사용 사례를 열어줍니다.

다음은 sea-config.jso n 파일의 예입니다.

 { "main": "myscript.js", "output": "sea-prep.blob" }

node --experimental-sea-config sea-config.json 명령으로 실행하면 blob이 sea-prep.blob 파일에 기록되고 바이너리에 주입될 수 있습니다.

SEA 기능을 통해 개발자는 사용자가 Node.js를 설치하지 않고도 Node.js 애플리케이션을 배포할 수 있습니다. 이 기능은 OpenJS World에서 JavaScriptLandia Awards의 일환으로 New Arrival 상을 수상한 Darshan Sen이 만들었습니다.

OpenJS Foundation 회원인 Microsoft는 벡터 공격을 줄이고 더 나은 경험을 위해 Node.js 아키텍처를 강화하는 방법으로 이 기능을 조사하고 있습니다. SEA 기능은 아직 실험 단계이지만 Node.js 커뮤니티를 위한 흥미로운 새 개발을 나타냅니다.

성능

Node.js v20은 새로 구성된 Node.js 성능 팀이 성능에 새롭게 집중하면서 런타임이 크게 개선되었습니다. 개선 사항에는 URL, fetch()EventTarget 과 같은 런타임의 핵심 부분에 대한 최적화가 포함됩니다.

눈에 띄는 개선 사항 중 하나는 EventTarget 초기화 비용이 절반으로 줄어 이를 사용하는 모든 하위 시스템에 더 빠르게 액세스할 수 있다는 것입니다. 또한 V8 Fast API 호출은 URL.canParse() 및 타이머와 같은 API의 성능을 향상시키는 데 활용되었습니다.

또 다른 특정 변경 사항은 C++로 작성된 빠르고 사양을 준수하는 URL 파서인 Ada의 업데이트된 버전 2.0이 포함된 것입니다.

Node.js v20이 안정적인 기본 테스트 러너를 제공한다는 사실을 알고 계셨나요? 코드를 보다 효율적으로 테스트할 시간입니다! 확인해보세요 ️ 트윗하려면 클릭하세요

요약

이 기사에서는 Node.js v20이 제공하는 V8 JavaScript 엔진의 개선 사항, 성능, 테스트 실행기, 실험적 권한 모델의 도입, 단일 실행 애플리케이션과 같은 몇 가지 주요 기능(실험적 및 안정적)과 개선 사항에 대해 배웠습니다. .

Node.js v14는 2023년 4월에 수명이 종료되므로 Node.js v18(LTS) 또는 vNode.js 20(곧 LTS가 됨)으로 업그레이드 계획을 시작하는 것이 좋습니다.

최신 버전의 Node.js를 사용해 보시겠습니까? Kinsta에 Node.js 애플리케이션을 배포하고 첫 $20를 받을 수 있습니다. 우리는 이미 Node.js v20을 지원하므로 오늘부터 새로운 기능을 테스트할 수 있습니다.

이제 당신의 차례입니다! Node.js v20에서 가장 흥미로운 기능이나 개선 사항은 무엇입니까? 우리가 간과했을 수 있는 중요한 사항이 있습니까? 댓글로 알려주세요.