본문 바로가기
Language & Library/JS & TS

[Deno Study 1] Getting Started

by 미네마네모 2021. 1. 25.

Deno는?

Deno는 V8 엔진을 사용하는 Javascript / Typescript를 위한 런타임 입니다. (Rust로 제작됨!)

한마디로 node의 상위 버전이라고 할수있다

Deno의 4가지 특징

  • 안정성(Safety)을 가짐. 사용자가 명시하지 않는 이상 파일, 네트워크 또는 환경에 접근 불가능함.
  • 기본적으로 TypeScript 지원
  • 단일 실행 파일만 제공
  • 의존성 검사(deno info), 코드 포맷터(deno fmt)가 내장되어있음
  • Deno의 기본 모듈들 (deno.land/std@0.84.0)

설치

MAC만 취급하려고 했는데 윈도우도 설치 쉽더라

# Mac
brew install deno

# windows in powershell
iwr https://deno.land/x/install/install.ps1 -useb | iex

빠르게 Deno 실행해보기 (Quick Start)

hello world 마냥 누가 만들어놓은거 실행

$ deno run https://deno.land/std/examples/welcome.ts

직접 코드 작성 후 Deno 실행해보기

또는 아래처럼 명령어 실행 및 코드작성

$ touch welcome.ts

Deno는 신기하게 url로 import가 가능하다.
Deno를 사용하면 귀찮게 package.json을 작성할 필요가 없음.

import { serve } from "https://deno.land/std@0.84.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}

Deno의 특징에서 말한 안정성이 이걸 말하는 것 같다.
일반 실행 시 네트워크 접근이 발생하면 아래와 같이 에러가 발생한다.

$ deno run welcome.ts

에러발생

아래처럼 --allow-net이라는 네트워크 접근 허용 옵션을 주면 실행이 잘된다
$ deno run --allow-net welcome.ts

오호 아래처럼 deno run의 cli option을 확인해봤더니
ENV 변수, hrtime?, Network, plugin, Sub Process, File Write 등의 옵션을 줄수 있었다.
프로덕션 환경 아닌이상 귀찮을때는 전체를 허용해주는 -A 옵션을 주지않을까... 생각든다


느낀점.

 

사실 deno의 마이너라고 볼수있는 node를 딥하게 사용안해봤기떄문에...

(그냥 express 서버나 써봤지..)

차이를 크게 체감은 아직 못하나

package.json 안쓰고 url로 import 하는 것도 신박? 편리한거같고

기본이 typescript인 점은 javascript에서 typescript로 넘어가면서

얼마나 runtime error를 잡을 수 있는지 알고있는 나에게는 매우 긍정적이였다

 

뭐 얼마나 딥하게 투자할지는 미리 몸빵좀 해보고

회사에서 쓰고있는 express 서버가 node로 실행하니

괜찮으면 deno로 갈아타봐야겠다

 

ps..

요즘 인ㄱㅣ 급상승 중인 Rust로 만들어진게 또 흥미로움

node는 c++

 

deno는 Rust

 

댓글