댓글 검색 목록

[Nodejs] Node.js vs Deno : 알아야 할 사항

페이지 정보

작성자 운영자 작성일 20-07-24 10:53 조회 750 댓글 0

발표 이후 Deno는 JavaScript 커뮤니티 내에서 많은 관심을 불러 일으켰습니다. 

Node 제작자가 설계 한 JavaScript 런타임으로서 두 프로젝트간에 많은 유사점이 있을 것으로 예상 할 수 있습니다. 

그러나 중요한 차이점도 있습니다. 즉, 다른 것을 대신 할 수는 없습니다.


이 기사는 공통점이 무엇인지, 무엇이 차별화되는지 이해하기 위해 데노를 "오래된 사촌"과 관련하여 살펴볼 것입니다. (Deno에서 스키니를 먼저 얻으려면 최근 소개를 확인하십시오.)


https://www.sitepoint.com/node-vs-deno/ 


언어 지원 


두 프로젝트 모두 JavaScript 런타임이므로 웹 브라우저 외부의 컴퓨터에서 JavaScript 코드를 실행할 수 있습니다. 언어 지원 측면에서 어떻게 쌓이는 지 봅시다.


Node.js 


Node의 현재 LTS 릴리스 (작성 당시 v12.18.1)는 최신 JavaScript 구문 및 기능을 지원합니다. 또한 ES2020 사양의 약 75 %를 지원합니다. ECMAScript 모듈도 지원되지만 현재 실험용으로 만 분류됩니다. .mjs 파일 확장자를 사용하거나 "type": "module"속성을 프로젝트의 package.json 파일에 추가해야 합니다.


Node에서 TypeScript (또는 다른 언어)를 실행하려면 V8 엔진이 실행할 수 있는 코드를 JavaScript로 컴파일해야 합니다. 장단점이 다른 여러 가지 방법이 있으므로 시작 및 실행은 이들 중 하나를 선택하고 필요한 설정 프로세스를 따라야 한다는 것을 의미합니다.


Deno 


Deno가 지원하는 JavaScript 사양에 대한 언급을 찾을 수 없었지만 V8을 사용하기 때문에 Node와 비슷한 수준의 지원을 가정합니다. 내 테스트에 따르면 Deno는 Promise.allSettled() 및 globalThis 키워드와 같은 ES2020 기능을 지원합니다. ECMAScript 모듈이 기본값이며, 노드 호환성 라이브러리를 사용하지 않으면 CommonJS 모듈이 지원되지 않습니다 (자세한 내용은 나중에 참조).


TypeScript는 Deno에서 일류 언어로 지원되므로 기본적으로 작동합니다. 즉, JavaScript로 변환하기 위한 추가 도구를 설치하지 않아도 됩니다. 물론 V8 엔진은 기본적으로 TypeScript를 지원하지 않으므로 Deno는 여전히 코드를 코드로 변환하고 있지만 이는 개발자에게 완벽하고 투명합니다.


또한 어떤 버전의 TypeScript Deno v1.0.1 버전을 사용하는지 언급 할 수 없었지만, 옵션 체인 및 널 (null) 통합 (비공개 클래스 필드는 아님)을 지원하며 TS 3.7로 페그 할 수 있습니다.


APIs 


Deno와 Node는 자체 API를 개발자에게 공개하여 파일 읽기 및 쓰기와 같은 유용한 작업을 수행하고 네트워크 요청을 보내고 받는 등 실제로 유용한 프로그램을 작성할 수 있습니다.


Node.js 


Node가 처음 릴리스되었을 때 약속에 대한 기본 지원은 없었습니다. 결과적으로 비동기 작업을 위한 대부분의 API는 오류 우선 콜백을 수행하도록 작성되었습니다.


const fs = require('fs');
fs.readFile('readme.txt', (err, data) => {
  if (err) {
    // Handle the error
  }
  // Otherwise handle the data
});

노드 개발자는 이제 약속 및 async / await 구문에 액세스 할 수 있지만 API는 여전히 이전 버전과의 호환성을 유지하기 위해 콜백을 기대합니다.


Deno 


Deno의 API는 최신 JavaScript 기능을 활용하도록 설계되었습니다. 모든 비동기 메소드는 약속을 반환합니다. Deno는 또한 최상위 수준 대기를 지원하므로 비동기 함수로 래핑하지 않고도 기본 스크립트에서 대기를 사용할 수 있습니다.


try {
  const data = await Deno.readFile('readme.txt');
  // Handle the data
} catch (e) {
  // Handle the error
}

또한 개발 팀은 가능한 경우 웹 표준을 사용하기로 결정했습니다. 즉, 실제적인 브라우저 API를 구현했음을 의미합니다. Deno는 전역 창 객체와 addEventListener 및 fetch와 같은 API를 제공합니다. 가져 오기에 액세스하는 것은 Node를 사용하여 폴리필을 작성하거나 타사 라이브러리를 사용해야 하기 때문에 특히 좋습니다.


호환성 모듈 


Deno는 기존 노드 패키지를 재사용 할 수 있도록 호환성 계층을 제공합니다. 아직 완료되지는 않았지만 현재 require()를 통해 CommonJS 모듈로드를 지원합니다.


패키지 관리 


패키지 관리는 Deno가 Node의 작업 방식에서 급격히 벗어나는 영역 중 하나입니다. 데노에게는 아직 초기 단계이지만, 그 접근 방식이 유리한지 여부는 여전히 남아 있습니다.


Node.js 


아시다시피 Node에는 타사 패키지를 설치하고 관리하는 데 사용되는 npm이라는 자체 패키지 관리자가 제공됩니다. npm은 주로 사용 가능한 타사 패키지가 대부분 나열되어있는 온라인 npm 레지스트리와 함께 사용됩니다.


npm을 사용하여 프로젝트에 패키지를 설치할 때 package.json 파일을 사용하여 패키지 이름과 허용 가능한 버전 범위를 지정합니다. 그런 다음 패키지 자체 (및 패키지에 종속 된 모든 패키지)는 프로젝트 내의 node_modules 폴더로 다운로드 됩니다.


Deno 


Deno는 패키지 관리자가 필요하지 않습니다. 대신 패키지는 URL을 통해 직접 연결됩니다.


import { Response } from "https://deno.land/std@0.53.0/http/server.ts";

코드를 처음 실행할 때 Deno는 모든 종속성을 가져와 컴파일합니다. 그런 다음 프로젝트와 별도로 파일 시스템에 캐시되므로 후속 실행이 훨씬 빠릅니다.


npm의 package-lock.json 파일과 유사하게 Deno를 사용하면 원래 가져온 정확한 버전과 일치하는 종속성 만 사용되도록 하는 잠금 파일을 지정할 수 있습니다.


타사 패키지 


생산성은 바퀴를 재발 명할 필요가 없기 때문에 언어는 생태계의 활력으로 번창하거나 죽을 수 있습니다! 여기서 Node는 현재 우위에 있는 것으로 보입니다.


Node.js 


Node는 다양한 라이브러리 및 패키지 에코 시스템을 제공합니다. 출시 후 11 년 동안 npm 레지스트리에 백만 개가 넘는 패키지가 등록되었습니다. 물론 품질은 다양 할 수 있으며 더 이상 적극적으로 유지 관리되지 않지만 노드 개발자에게는 여전히 큰 이점입니다.


Deno 


이전 섹션에서 보았 듯이 Deno는 스크립트가 공개 URL에서 직접 모듈을 가져올 수 있도록 하여 패키지 관리자나 레지스트리가 필요하지 않도록 적극적으로 노력하고 있습니다. 물론, 패키지가 무엇인지 모르면 패키지를 가져 오기가 어렵기 때문에 Deno 웹 사이트는 호환 가능한 타사 모듈 목록을 유지 관리합니다. 현재로서는 목록에 707 개의 모듈이 있습니다.


데노의 표준 라이브러리 


Deno가 개발자 경험을 향상 시키려는 한 가지 방법은 일반적인 작업을 위한 표준 헬퍼 및 유틸리티 라이브러리를 제공하는 것입니다. 모든 모듈은 핵심 개발자가 감사하여 고품질의 신뢰할 수 있는 코드를 보장합니다. 명령 행 인수 처리 및 터미널 출력 채색과 같은 모듈이 있습니다. 두 가지 모두 노드 용 타사 패키지로만 사용할 수 있습니다.


Security 


아마도 Node에 비해 Deno의 가장 유명한 개선 사항 중 하나는 권한 시스템입니다. 이유를 봅시다.


Node.js 


Node 런타임은 매우 관 대하여 컴퓨터의 네트워크 및 파일 시스템에 대한 코드 전체 액세스를 허용합니다. 선택하지 않으면 타사 코드가 시스템에 혼란을 줄 수 있습니다.


Deno 


보안 모델을 개선하는 것은 Ryan Dahl이 Deno를 설계 할 때 구체적으로 시작한 것입니다. 기본적으로 모든 코드는 안전한 샌드 박스 환경에서 실행됩니다. 따라서 명령 줄 인수로 액세스 권한이 부여되지 않으면 코드가 파일 시스템, 네트워크 및 환경 변수와 같은 항목에 액세스 할 수 없습니다.


# Allow script to make network requests
deno run --allow-net server.ts

또한 파일 시스템에 대한 읽기 또는 쓰기 액세스 또는 네트워크에 대한 액세스를 허용 할 때 화이트리스트를 제공 할 수 있습니다. 즉, 프로젝트 데이터 폴더에 대한 Deno 프로그램의 읽기 / 쓰기 액세스를 제한하여 잠재적 인 악의적 손상을 제한 할 수 있습니다.


데노 : 배터리 포함 


마무리하기 전에 한 가지 더 이야기하고 싶었습니다. 매뉴얼의 도구 섹션을 살펴보면 Deno가 멋진 "보너스 기능"을 제공한다는 것을 알 수 있습니다! 다음은 개발자 경험을 조금 더 좋게 만들기 위한 기본 제공 도구입니다.


  • bundler: 지정된 스크립트와 그 의존성을 단일 파일로 묶습니다.
  • debugger: aChrome Devtools, VS Code 및 기타 도구를 사용하여 Deno 프로그램을 디버깅 할 수 있습니다 (참고 : 노드에는 디버거가 제공됩니다)
  • dependency inspector: ES 모듈에서 이것을 실행하면 트리의 모든 종속성이 나열됩니다.
  • documentation generator: 주어진 파일에서 JSDoc 주석을 분석하고 문서를 출력합니다
  • formatter: JavaScript 및 TypeScript 코드 모두 자동 서식
  • test runner: 표준 라이브러리의 어설 션 모듈과 함께 JS 및 TS 코드를 테스트하는 데 사용할 수 있습니다.
  • linter: 프로그램에서 잠재적 인 문제를 포착하는 데 도움이 되는 코드 린터 (현재 불안정)

평결 


이 기사의 목적은 Node 또는 Deno를 옹호하는 것이 아니라 둘을 비교하고 대조하는 것입니다. 이제 두 런타임 간의 유사점과 더 중요한 차이점을 이해해야 합니다.


Deno는 강력한 권한 시스템 및 일류 TypeScript 지원을 포함하여 개발자에게 몇 가지 특별한 이점을 제공합니다. 디자인 결정 및 추가 내장 툴링은 생산적인 환경과 우수한 개발자 경험을 제공하기 위한 것입니다.


반면에 노드는 그 주위에 방대하고 잘 확립 된 생태계를 가지고 있으며, 10 년이 넘는 시간이 지났습니다. 이것은 수많은 문서 및 튜토리얼과 함께 Node.js를 앞으로 내년에 안전한 내기로 만들 것입니다.


Deno Foundations 컬렉션에서 학습에 도움이 되도록 구성된 모든 Deno 자습서를 찾으십시오.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.