분류 Nodejs

Deno 란 무엇이며 Node.js와 어떻게 다릅니까?(1)

컨텐츠 정보

  • 조회 327 (작성일 )

본문

Node.js의 제작자 인 Ryan Dahl은 작년 반 동안 Node의 모든 고유 한 문제를 해결해야 하는 JavaScript의 새로운 런타임 인 ​​Deno에서 작업했습니다.


오해하지 마십시오. Node는 광대한 생태계와 JavaScript 사용으로 인해 자체적으로 훌륭한 서버 측 JavaScript 런타임입니다. 그러나 Dahl은 보안, 모듈 및 종속성과 같은 몇 가지 사항에 대해 생각해야 할 것이 몇 가지 있음을 인정합니다.


그의 방어에서, 단기간에 플랫폼이 얼마나 성장할 것인지 상상할 수는 없었습니다. 또한 2009 년에도 JavaScript는 여전히 모든 사람이 재미있게 만든 이 이상한 작은 언어였으며 많은 기능이 아직 없었습니다.


https://blog.logrocket.com/what-is-deno/ 


Deno 란 무엇이며 주요 기능은 무엇입니까? 


Deno는 JavaScript 용 Google 런타임 엔진인 V8을 기반으로 하는 안전한 Typescript 런타임입니다.


다음과 같이 만들어졌습니다.

  • Rust (데노의 핵심은 Rust로, 노드는 C ++로 작성 됨)
  • Tokio (Rust로 작성된 이벤트 루프)
  • TypeScript (Deno는 기본적으로 JavaScript와 TypeScript를 모두 지원합니다)
  • V8 (Chrome 및 Node에서 사용되는 Google JavaScript 런타임)

Deno가 제공하는 기능을 살펴 보겠습니다


보안 (권한) 


Deno의 가장 중요한 기능 중 하나는 보안에 중점을 둡니다.


Node와 달리 Deno는 기본적으로 샌드 박스에서 코드를 실행하므로 런타임에 다음에 액세스 할 수 없습니다.

  • 파일 시스템
  • 네트워크
  • 다른 스크립트의 실행
  • 환경 변수

권한 시스템의 작동 방식을 살펴 보겠습니다.


(async () => {
 const encoder = new TextEncoder();
 const data = encoder.encode('Hello world\n');

 await Deno.writeFile('hello.txt', data);
 await Deno.writeFile('hello2.txt', data);
})();

이 스크립트는 hello txt 메시지와 함께 hello.txt와 hello2.txt라는 두 개의 텍스트 파일을 만듭니다. 코드는 샌드 박스 내에서 실행되므로 파일 시스템에 액세스 할 수 없습니다.


또한 노드에서와 마찬가지로 fs 모듈 대신 Deno 네임 스페이스를 사용하고 있습니다. Deno 네임 스페이스는 많은 기본 도우미 기능을 제공합니다. 네임 스페이스를 사용함으로써 우리는 브라우저 호환성을 잃어 가고 있습니다.


다음을 실행하여 실행할 때 :


deno run write-hello.ts

다음과 같은 메시지가 나타납니다.


Deno requests write access to "/Users/user/folder/hello.txt". Grant? [a/y/n/d (a = allow always, y = allow once, n = deny once, d = deny always)]

샌드 박스에서 호출 할 때마다 권한을 요청해야 하므로 실제로 두 번 프롬프트 됩니다. 물론 항상 허용 옵션을 선택하면 한 번만 요청됩니다.


거부 옵션을 선택하면 PermissionDenied 오류가 발생하고 오류 처리 논리가 없으므로 프로세스가 종료됩니다.


다음 명령으로 스크립트를 실행하면 :


deno run --allow-write write-hello.ts

프롬프트가 없고 두 파일이 모두 작성됩니다.


파일 시스템에 대한 --allow-write 플래그 외에도 네트워크 요청을 활성화하고 환경에 액세스하며 하위 프로세스를 실행하기 위한 --allow-net, --allow-env 및 --allow-run 플래그도 있습니다.


모듈 


Deno는 브라우저와 마찬가지로 URL로 모듈을 로드합니다. 많은 사람들이 서버 측에 URL이 있는 import 문을 보았을 때 처음에는 혼란스러웠지만 실제로는 이해가 됩니다.


import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

URL로 패키지를 가져 오는 데 가장 큰 문제는 무엇입니까? 대답은 간단합니다. URL을 사용하면 최근 많은 문제가 발생한 npm과 같은 중앙 집중식 레지스트리없이 Deno 패키지를 배포 할 수 있습니다.


URL을 통해 코드를 가져 오면 패키지 작성자가 원하는 곳 어디에서나 코드를 호스팅 할 수 있습니다. 더 이상 package.json 및 node_modules가 없습니다.


응용 프로그램을 시작하면 Deno는 가져온 모든 모듈을 다운로드하고 캐시합니다. 일단 캐시되면 Deno는 --reload 플래그로 특별히 요청할 때까지 다시 다운로드하지 않습니다.


여기에 몇 가지 중요한 질문이 있습니다.