2020년 5월 13일, Deno 1.0이 릴리즈가 되었습니다.
니콜라스 씨도 유튜브에서 Deno에 대한 언급을 한 적 있는데, 도대체 Deno는 무엇일까요?
부족하지만 한번 정리를 해보았습니다.
A secure runtime for JavaScript and TypeScript.
Deno는 구글의 V8엔진과 Rust, Tokio로 개발된 JavaScript와 TypeScript 런타임입니다.
Node.js를 개발했던 Ryan Dahl이 Node.js를 개발하며 했던 후회들을 개선하기 위해 만들었다고 합니다.
한글 자료는 배영님의 노션을 참고해주세요!

We feel that the landscape of JavaScript and the surrounding software infrastructure has changed enough that it was worthwhile to simplify. We seek a fun and productive scripting environment that can be used for a wide range of tasks.
require() without the extension .js분명 발표 주제는 "10 Things I Regret About Node.js"인데, 발표자료에는 7가지만 명시되어 있네요.. (나머지 3개는 뭐지 🤔)
이러한 철학들은 Ryan Dahl의 후회들을 보면 나름대로 이해할 수 있습니다.

Deno의 목표는 다음과 같습니다.
Deno 글로벌 네임스페이스를 사용하지 않는 Deno 프로그램의 서브셋은 최신 웹 브라우저에서 아무런 변경 없이 실행된다.
Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.
공식 페이지에서 Deno는 간단하고 모던하고 안전한 런타임이라고 소개하고 있으며, Deno의 특징은 다음과 같습니다.
(생략)
Deno Runtime은 Web API와 Deno 글로벌 네임스페이스를 합친 개념이며, doc.deno.land에서 관련 레퍼런스를 열람할 수 있습니다.
Linux와 Deno를 비교한 표입니다.
위 표를 보시면 아시겠지만, Deno는 OS와 유사하게 설계되었음을 알 수 있습니다.
웹 워커를 이용해 멀티 프로세스를 구현하며, 내부(커널)과 통신은 ops를 이용해 디커플링했습니다.
더 자세한 내용은 Deno 공식 문서의 Internal Details를 참고해주세요.
OS와 상호작용하기 위해 개발된 모든 JavaScript API는 Deno 글로벌 네임스페이스에 들어 있습니다. 이 API들은 신중하게 검토되었고, 하위 호환성을 잘 지킬 것이라고 합니다.
안전하지 않은 모든 기능들은 --unstable 플래그를 이용해 사용할 수 있습니다.
Deno는 Ryan Dahl이 Node.js를 개발하면서 후회했던 것들을 개선하기 위해 개발한 런타임이기 때문에, Node.js와의 차이점을 빼놓을 수 없습니다.
package.json을 사용하지 않습니다.$DINODIR)에 저장하여 캐싱한다고 합니다.Promise객체를 반환합니다. 따라서 Node.js와는 다른 API를 제공합니다.require()를 사용하지 않습니다. 써드 파티 모듈은 다음과 같이 URL로 임포트 됩니다. import * as log from "<https://deno.land/std/log/mod.ts>";Deno는 Node.js에서 갈라져 나온 것이 아닙니다. 완전히 별개의 구현체입니다.
다음과 같은 여러가지 요구사항에 맞춰서 Deno를 도입할지 말지 결정하길 바랍니다.
Deno는 일반적으로 Node 패키지(npm을 이용해 설치 및 관리하는 패키지)와 호환되지 않습니다. 호환성 레이어를 https://deno.land/std/node/ 에 구축하긴 했지만, 완전하지는 않습니다.
Node와 Deno의 HTTP 서버 성능 분석표
| Deno HTTP Server | Node HTTP Server | |
|---|---|---|
| 초당 요청 처리 개수 | 25k | 34k |
| 최대 레이턴시 | 1.3ms | 2~300ms |
| 구현 방식 | native TCP socket 위에 TS를 얹음 | C로 작성 후 JavaScript에 대해 고차 바인딩으로 노출 |
초당 요청 처리 개수가 현저히 적지만, Deno 팀은 이 정도로도 충분하다고 생각하고 있습니다. 또한 일반적으로 레이턴시가 현저히 적다는 것을 기대하고 있습니다.
그렇지만 Deno 팀은 점진적으로 성능을 지속적으로 모니터링하고 개선시킬 것이라고 합니다. 더 많은 정보는 Deno Benchmark에 있습니다.
Deno는 내부적으로 MicroSoft사에서 제작한 TypeScript compiler를 타입 체킹에 사용하고 있습니다. 이는 V8 엔진과 비교하면 매우 느립니다. 그래서 V8 snapshot을 이용해 성능을 향상하긴 했지만, 아직 만족스럽지는 않다고 합니다.
Deno 팀은 기존의 TS compiler를 통해 개선할 수도 있지만, 궁극적으로는 타입 체킹을 Rust로 구현해서 성능을 개선하려고 합니다. 혹시라도 기여하고 싶다면 컨텍을 해달라고 하네요. ☺️
커스텀 오퍼레이션으로 Deno 런타임을 확장하기 위한 초기 플러그인 시스템이 있습니다. 하지만, 이러한 인터페이스는 아직 개발 중이며 안전하지 않습니다. 그래서 Deno에서 제공하는 인터페이스를 통해 native system에 접근하는 것은 어렵다고 합니다.
Deno — A secure runtime for JavaScript and TypeScript.
https://d2.naver.com/helloworld/7700312