본문 바로가기
SERVER DEVELOPMENT/NodeJS

Node.js 14 버전 릴리즈 소식

by F.E.D 2020. 4. 25.

 

Node.js 14가 release 됨에 따라 몇가지 기능이 추가되었습니다. 4/21을 기점으로 한 업데이트입니다.

이제 12.16.2 버전은 LTS가 되었습니다.

 

14버전은 아마도 10월경에 LTS가 될 것이라고 합니다.

 

퍼포먼스도 상향되었습니다.

안정적인 기능으로 진단 보고서 추가, 프로세스 및 로컬 리소스의 여러 단계를 통해 트랜잭션을 추적할 수 있는 실험적인 비동기 로컬 스토리지 API, 국제화 지원 등 다양한 기능들이 생겼습니다.

 

안정적인 진단기능

진단 보고서는 이제 Node.js 14에서 안정적인 기능입니다.

이 기능은 초기 진단 및 생산 문제 심사에 유용한 정보가 포함 된 쉽게 사용할 수있는 보고서를 제공합니다. 

Node.js, Java 및 Swift를 포함한 다양한 언어로 고객을 지원하는 데 이 기능이 중요한 것으로 나타났습니다.

Node.js에 안정적인 기능으로 내장 된 진단 보고서를 사용하면 프로덕션 환경에서이를 사용하는 것에 대해 확신을 갖고 문제를 신속하게 해결할 수 있습니다.

 

진단 보고서는 기계 및 사람이 읽을 수있는 JSON 기반 보고서를 제공합니다. 

문제를 신속하게 진단하는 데 도움이되는 유용한 정보를 제공합니다.

예를 들어, 애플리케이션이 간헐적으로 중단되고 코어 파일이 생성되지 않는다고 가정하십시오.

진단 보고서를 생성하고 사용자 제한을 검사하여 코어 파일 생성을 허용하도록 구성 할 수 있습니다.

이 예에서는 코어 파일을 얻지 못하도록 unlimit가 설정되어 있음을 알 수 있습니다 (limit는 0으로 설정 됨).

    "userLimits": {
    "core_file_size_blocks": {
      "soft": 0,
      "hard": "unlimited"
    },

 

마찬가지로 응용 프로그램에 메모리가 부족한 경우 max-old-space-size를 통해 최대 힙 크기가 제한되었는지 확인할 수 있습니다.

 "commandLine": [
      "node",
      "--max-old-space-size=128",
      "testd

실험적인 비동기 로컬 스토리지 API (AsyncLocalStorage API)

LTS로 적용될지는 모르겠습니다만 실험적인 로컬 스토리지 API도 출시되었습니다.

프로세스와 외부 리소스 (예 : 데이터베이스 호출) 모두에서 서로 다른 단계를 통해 트랜잭션을 추적 할 수있는 것은 중요한 엔터프라이즈 요구 사항입니다. 

이 기능은 종종 응용 프로그램에서 문제가 발생한 위치를 식별하거나 성능 버틀넥을 식별하는 데 필요한 정보를 제공합니다.

 

Node.js의 비동기 특성은 다른 언어 (예 : 스레드 로컬 스토리지)의 솔루션이 Node.js에서 작동하지 않음을 의미합니다. 

커뮤니티는 여러 릴리스에서 비동기 호출을 통해 컨텍스트를 추적하고 관리 할 수 ​​있도록 API를 개발하고 있습니다. 

이 문제를 해결하기 위해 실험적인 Async Hooks API가 추가되었지만 여전히 안정적으로 작동하고 있습니다.

 

Node.js 14는 AsyncLocalStorage라는 새로운 실험용 API를 추가합니다. 

더 높은 수준의 API는 더 적은 내부를 노출하고 더 간단한 API를 제공하기 때문에 더 안정된 시간을 가질 수 있기를 희망합니다. 

많은 npm 모듈이 유사한 기능을 제공했지만 패키지를 포괄적으로 사용하기 위해 패키지를 유지 관리하는 데 어려움이있어 API가 Node.js 자체의 일부로 제공되어야한다는 데 합의했습니다. 

 

const AsyncLocalStorage = require('async_hooks').AsyncLocalStorage;
const asyncLocal1 = new AsyncLocalStorage();

function logData() {
  console.log(asyncLocal1.getStore(['url']));
}

function accept(request, response) {
  asyncLocal1.getStore()['url'] = request.url;
  setTimeout(logData, 100);
};

asyncLocal1.run(new Object(), accept.bind(null, { url: 'url1'}, {}));
setTimeout(() => { asyncLocal1.run(new Object(), accept.bind(null, { url: 'url2'}, {})) },
  500);

이 예제는 동시에 여러 개의 활성 비동기 플로우를 가질 수있는 웹 서버의 경우 (연결마다 하나씩)를 에뮬레이션하려고합니다. 

API 작동 방식을 설명하는 데 필요한 줄 수로 코드를 제한하려고하므로 완전한 예는 아닙니다.

 

우리는 API에 대한 참조를 얻고 AsyncLocalStorage의 인스턴스를 만드는 것으로 시작합니다. 

Async Local Storage API는 최상위 async_hooks 네임 스페이스의 일부입니다. 

한 가지 중요한 측면은 JavaScript 범위 지정 규칙에 따라 비동기 흐름의 컨텍스트에 액세스해야하는 모든 코드에 대해이 객체를 사용할 수 있어야한다는 것입니다.

 

수락 기능은 서버가 각 연결 요청을 호출하는 기능입니다. 

예제의 목적 상, asyncLocal1.getStore ()에 의해 리턴 된 상점에 값을 설정 한 후 SetTimeout을 사용하여 비동기 호출을 작성합니다.

logData 함수가 호출되면 accept 함수에 의해 AsyncLocalStorage에 저장된 값을 가져 와서 표준 출력에 로그합니다.

마지막 몇 줄은 asyncLocal1.run()을 사용하여 수락 호출을 실행하는 것을 보여줍니다. 

비동기식 흐름을위한 스토리지는 해당 실행 방법의 범위 내에서 해당 기능으로만 전파됩니다.

API는 필요한 경우 플로우 내에서 스토리지 전파를 중지하는 데 사용할 수있는 추가 메소드를 제공합니다.

 

이제 첫 번째 질문은 다음과 같습니다. "let url과 같은 전역 객체를 사용하여 동일한 작업을 수행 할 수 없습니다. 

대신 쓰기/읽기를 하시겠습니까?” 주어진 시간에 하나의 흐름 만 활성화하면 작동하지만 여러 흐름이 있으면 서로의 값을 덮어 씁니다.

깨달아야 할 핵심은 바로 그 것입니다.

모든 플로우가 동일한 글로벌 asyncLocal1 오브젝트를 사용하더라도 비동기 플로우 내에서 getStore()가 호출되면 해당 플로우에 고유 한 오브젝트를 가져옵니다.

 

asyncLocal1.run(new Object(), accept.bind(null, { url: 'url1'}, {}));
  --> asyncLocal1.getStore()
    --> store1
setTimeout(() => { asyncLocal1.run(new Object(), accept.bind(null, { url: 'url2'}, {})) }, 500);
  --> asyncLocal1.getStore()
    --> store2

이것이 API의 풍미를 제공하고 관심을 끌기를 희망하므로 시험해 보시기 바랍니다. 

이전 npm 패키지에서 배운 내용을 사용하여 구축되었지만 필요한 모든 사용 사례를 포괄하고 올바르게 사용하기 쉬운 지 확인하는 데 도움이 필요합니다.

 

국제화 지원

예를 들어 weather.com을 지원하는 대규모 Node.js 배포 중 하나는 230 개 이상의 로캘을 지원하며 약 60 개 언어로 현지화되어 있습니다.

 

마케팅 모듈의 쉬운 사용

Node.js 14를 사용하면 네이티브 모듈 (애드온이라고도 함)을보다 쉽게 ​​생성, 빌드 및 지원할 수 있습니다. 

IBM은 N-API의 지속적인 기여자 중 하나이며 노드 14에는 N-API 버전 6이 포함되어 있으며 여기에는 BigInt 지원 및 기타 개선 사항이 포함됩니다. 

N-API에 대한 자세한 내용은 API 문서 및 node-addon-api를 확인하십시오.

 

 

 

 

출처 : https://developer.ibm.com/technologies/node-js/blogs/nodejs-14-ibm-release-blog/

'SERVER DEVELOPMENT > NodeJS' 카테고리의 다른 글

Node.js로 간단한 Push 만들기  (2) 2021.05.02

댓글