ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js 14 버전 릴리즈 소식
    SERVER DEVELOPMENT/NodeJS 2020. 4. 25. 16:44

     

    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
Designed by Tistory.