맨위로가기

디노 (소프트웨어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

디노(Deno)는 라이언 달이 Node.js의 문제점을 해결하기 위해 개발한 JavaScript/TypeScript 런타임 환경이다. 2018년 처음 공개되었으며, 웹 브라우저와 유사하게 ES 모듈을 기본으로 지원하고, URL을 통한 종속성 로드, 샌드박스 환경에서의 보안 강화, TypeScript 기본 지원 등의 특징을 가진다. Deno는 Rust로 작성되었으며, 2020년 5월 13일에 공식 버전 1.0이 출시되었고, Deno 개발을 가속화하기 위해 2021년 Deno 회사가 설립되었다. Deno는 Node.js와 달리, NPM과 같은 패키지 관리자를 사용하지 않고, 내장된 표준 라이브러리를 제공하며, Deno Deploy, Deno Fresh, Deno SaaSKit 등의 구성 요소를 포함한다.

더 읽어볼만한 페이지

  • 런타임 시스템 - 런타임 라이브러리
    런타임 라이브러리는 프로그래밍 언어의 기능을 지원하고 컴파일러에 의해 자동으로 링크되며, 예외 처리, 메모리 할당 등의 기능을 제공하고 디버깅 및 릴리스 용도에 따라 여러 버전이 존재한다.
  • 런타임 시스템 - 메모리 오더링
    메모리 오더링은 컴파일러와 CPU가 메모리 접근 순서를 최적화하는 과정에서 멀티 스레드 환경의 데이터 일관성을 해칠 수 있는 문제로, 메모리 배리어를 통해 제어하고 메모리 모델을 이해해야 한다.
  • 2018년 소프트웨어 - IGTV
    IGTV는 인스타그램 계정으로 로그인하여 사용할 수 있는 동영상 플랫폼 서비스로, 모바일과 데스크톱에서 각기 다른 사양의 동영상 업로드, 자동 재생, 프로필 탭, 페이스북 페이지 연동, 가로형 동영상 지원 등의 기능을 제공했다.
  • 2018년 소프트웨어 - 안드로이드 파이
    안드로이드 파이는 구글이 개발한 안드로이드 운영체제의 9번째 버전으로, Material Design 2를 활용한 인터페이스 개선, 노치 디자인 지원, 제스처 기반 탐색 막대, 강화된 전력 관리 기능, 보안 강화 및 플랫폼 개선 등을 특징으로 한다.
  • 패키지 관리 시스템 - 패키지 관리자
    컴퓨터 프로그램의 설치, 업데이트, 제거를 자동화하는 패키지 관리자는 소프트웨어 패키지 관리, 의존성 관리, 설정 관리 기능을 제공하여 다양한 운영 체제와 프로그래밍 언어에서 활용된다.
  • 패키지 관리 시스템 - 제거 프로그램
    제거 프로그램은 컴퓨터에 설치된 소프트웨어를 완전히 제거하기 위해 로거, 제거 프로그램, 분석기, 감시자 등의 도구를 활용하며, 설치 기록을 바탕으로 프로그램 및 관련 파일을 삭제하고 레지스트리를 정리하는 기능을 제공한다.
디노 (소프트웨어) - [IT 관련 정보]에 관한 문서
기본 정보
2024년부터 사용된 데노 로고
로고
저자라이언 달
개발자데노 랜드 주식회사와 기여자들
출시일2018년 5월 13일
저장소데노 GitHub 저장소
프로그래밍 언어타입스크립트
자바스크립트
러스트
C++ (V8 바인딩)
운영체제리눅스
macOS
윈도우
장르런타임 환경
라이선스MIT 라이선스
최신 버전 출시일}}
공식 웹사이트데노 공식 웹사이트

2. 역사

Deno는 2018년 JSConf EU에서 Node.js의 창시자인 라이언 달Node.js의 설계상 한계를 극복하기 위해 발표하며 시작되었다.[7][37][58] 초기 개발 과정에서 Go에서 Rust로 핵심 언어를 변경하고,[10][42][60] 비동기 처리 방식으로 Tokio를 채택하는 등[11][61] 기술적인 변화를 거쳤으며, Node.js의존성 문제 해결을 목표로 자체 표준 라이브러리도 구축했다.[15][46][65]

2020년 5월 13일 공식 1.0 버전이 출시되었고,[16][66] 이듬해인 2021년에는 Deno 개발 및 상업적 지원을 위한 Deno 회사가 설립되었다. 이후 서버리스 플랫폼 Deno Deploy,[17][18] 풀 스택 웹 프레임워크 Deno Fresh[20] 등이 주요 서비스로 출시되었으며, 2024년 10월에는 Node.js 호환성을 개선한 Deno 2.0이 발표되었다.[23]

2. 1. 개발 배경

Deno는 2018년 JSConf EU에서 라이언 달의 "Node.js에 대해 내가 후회하는 10가지"라는 발표를 통해 처음 공개되었다.[7][37][58] 달은 이 발표에서 Node.js의 초기 설계 결정에 대한 몇 가지 후회를 언급했는데, 주요 내용은 다음과 같다.[8][40][58]

  • API 설계 시 프로미스를 사용하지 않은 점
  • 레거시 빌드 시스템인 GYP의 사용
  • 'node_modules' 및 'package.json' 사용
  • 파일 확장자를 명시하지 않는 방식
  • 'index.js'를 통한 암묵적인 모듈 해석(magical module resolution)
  • V8의 샌드박스 환경을 벗어나는 구조


달은 이러한 문제점들의 해결책으로 Deno의 프로토타입을 선보였다. 이 프로토타입은 프로토콜 버퍼와 같은 직렬화 도구를 이용한 메시지 전달 방식으로 시스템 호출 바인딩을 구현하고, 접근 제어를 위해 명령줄 플래그를 사용하는 것을 목표로 했다.

Deno는 초기에 Go로 작성되었으며, 권한이 필요한 부분(Go, 시스템 호출 접근)과 권한이 없는 부분(V8) 사이의 통신을 위해 프로토콜 버퍼를 사용한 직렬화 방식을 채택했다.[9][41][59] 그러나 Go를 사용함으로써 발생하는 이중 런타임 환경과 가비지 컬렉션 부담에 대한 우려로 인해, 곧 Rust로 핵심 코드를 재작성하게 되었다.[10][42][60]

비동기 이벤트 처리 방식으로는 기존 Node.js에서 사용되던 libuv 대신 Tokio가 도입되었다.[11][61] 또한, 더 빠른 "제로 카피" 직렬화 및 역직렬화를 위해 FlatBuffers가 채택되었으나,[12][43][62] 2019년 4월 발표된 벤치마크 결과에서 직렬화 과정의 상당한 오버헤드가 확인되어[13][44][63] 같은 해 8월 말 FlatBuffers는 제거되었다.[14][45][64]

Go의 표준 라이브러리를 모델로 삼아, Deno 자체 표준 라이브러리가 2018년 11월에 만들어졌다. 이는 다양한 도구와 유틸리티를 기본적으로 제공함으로써 Node.js의 고질적인 문제 중 하나였던 의존성 트리 폭발 문제를 일부 해결하려는 목적을 가졌다.[15][46][65]

공식 Deno 1.0 버전은 2020년 5월 13일에 출시되었다.[16][66]

2021년 3월 29일에는 Deno 개발을 가속화하고 상업적 지원을 제공하기 위해 Deno 회사가 설립되었음이 발표되었다. 이 회사는 Shasta Ventures, 모질라 코퍼레이션 등으로부터 투자를 유치했다.

2. 2. 초기 개발 과정

라이언 달은 JSConf EU 2018에서 "Node.js에 관해 후회하는 10가지"라는 발표를 통해 디노(Deno)를 처음 소개했다.[58][7][37] 그는 이 발표에서 Node.js의 초기 설계 결정에 대한 여러 후회되는 점을 언급했는데, 주요 내용은 다음과 같다.[58][8][40]

  • API 디자인에서 promise를 사용하지 않은 점
  • 레거시 빌드 시스템인 GYP 사용
  • node_modules 및 package.json 사용 방식
  • 파일 확장자를 명시적으로 사용하지 않는 점
  • index.js를 이용한 모호한 모듈 해석(magical module resolution)
  • V8의 샌드박스 환경을 의도치 않게 약화시킨 점


이러한 문제점들에 대한 해결책으로, 달은 프로토콜 버퍼와 같은 직렬화 도구를 이용해 메시지 전달 방식으로 시스템 호출 바인딩을 구현하고, 명령 줄 플래그를 통해 접근 제어를 강화하는 디노의 초기 프로토타입을 선보였다.[58][8][40]

디노는 처음에 Go 언어로 작성되었다. 이 초기 버전은 권한이 필요한 부분(Go 언어, 시스템 호출 접근)과 권한이 없는 부분(V8) 사이의 통신을 위해 프로토콜 버퍼직렬화 방식으로 사용했다.[59][9][41] 하지만 Go 언어를 사용하면서 발생하는 이중 런타임 환경과 쓰레기 수집의 부담 문제 때문에, 곧 Rust 언어로 핵심 코드를 재작성하게 되었다.[60][10][42]

또한, 비동기 이벤트 처리 방식도 Node.js가 사용하는 libuv 대신 Tokio를 기반으로 구현되었다.[61][11][43] 초기에는 더 빠른 "제로-카피" 직렬화 및 역직렬화를 목표로 FlatBuffers를 도입하기도 했다.[62][12][43] 그러나 2019년 4월에 진행된 벤치마크 결과, FlatBuffers 방식이 상당한 오버헤드를 유발하는 것으로 나타나면서[63][13][44], 결국 2019년 8월 말에 FlatBuffers는 제거되었다.[64][14][45]

한편, Go의 표준 라이브러리를 모델로 삼아, 광범위한 기본 도구와 유틸리티를 제공하는 디노 자체 표준 라이브러리가 2018년 11월에 만들어졌다.[65][15][46] 이는 Node.js에서 종종 문제가 되는 복잡한 의존성 트리 문제를 일부 해소하기 위한 시도였다.[65][15][46]

2. 3. Deno 회사 설립 및 투자 유치

2021년 3월 29일, Deno의 개발을 더욱 발전시키고 사용자에게 상업적 서비스를 제공하기 위해 Deno Land Inc가 설립되었다.[1] 이 회사는 샤스타 벤처스(Shasta Ventures), 모질라 재단(Mozilla Corporation) 등으로부터 수백만 달러의 자금을 지원받았다.[1]

1년 후, Deno는 세쿼이아 캐피탈(Sequoia Capital)이 주도한 2100만달러 규모의 시리즈 A 투자를 추가로 유치했다고 발표했다.[31]

2. 4. 주요 릴리즈

공식 디노 1.0은 2020년 5월 13일에 출시되었다.[16]

Cloudflare Workers에서 영감을 얻은 Deno Deploy는 2021년 6월 23일에 출시되었다.[17][18] 2022년 5월 4일에 발표된 Beta 4는 대시보드를 개선하고 청구 기능을 추가했다.[19]

Deno Fresh 1.0은 2022년 6월 28일에 발표되었다.[20] 이는 기본적으로 클라이언트에 자바스크립트를 전송하지 않는 디노를 위한 새로운 풀 스택 웹 프레임워크이다. 이 프레임워크는 빌드 단계가 없어 배포 시간을 획기적으로 개선할 수 있다. 버전 1.1은 2022년 9월 8일에 출시되었다.[21]

Deno SaaSKit 베타는 2023년 4월 4일에 발표되었다.[22] 이는 Fresh와 Deno로 구축된 오픈 소스, 최신 SaaS 템플릿이다.

디노 2는 2024년 10월 9일에 출시되었다.[23] 이는 주로 Node.js 호환성 개선을 가져오고 더 이상 사용되지 않는 기능을 제거하는 데 중점을 두었다.

3. 특징

Deno는 현대 프로그래머를 위한 생산적이고 안전한 스크립팅 환경을 목표로 한다.[67][4][38] Node.js와 마찬가지로 이벤트 기반 아키텍처를 강조하며, 비동기 또는 논블로킹(non-blocking) 핵심 입출력(I/O) 유틸리티와 해당 블로킹(blocking) 버전을 함께 제공한다.

Deno는 웹 서버를 만들거나 과학적 계산을 수행하는 데 사용될 수 있다. 발음은 원래 '데노'였으나, '디노'[47][48]가 되었다.

Deno는 MIT 라이선스에 따라 배포되는 오픈 소스 소프트웨어이다.[68][24]

3. 1. Node.js와의 비교

'''공통점'''

Deno와 Node.js는 모두 구글 크롬V8 JavaScript 엔진을 기반으로 구축된 런타임 환경이다. 둘 다 내부 이벤트 루프를 가지고 있으며, 스크립트 실행 및 광범위한 시스템 유틸리티를 위한 명령 줄 인터페이스를 제공한다.

'''차이점'''[69][4][38]

Deno는 다음과 같은 주요 측면에서 Node.js와 다르다.

  • 모듈 시스템: Node.js는 CommonJS와 ES 모듈을 모두 지원하지만, Deno는 기본적으로 브라우저와 같이 ES 모듈만 사용한다. Node.js와 달리 `require` 구문은 사용하지 않는다. Deno에서 CommonJS 모듈을 사용하려면 호환성 계층이 필요하다.[25][26]
  • 의존성 로드: Deno는 브라우저처럼 URL을 사용하여 로컬 또는 원격 의존성을 불러온다. 또한 `npm:` 및 `node:` 지정자를 사용하여 NPM 또는 Node.js 모듈을 가져올 수 있다. Node.js는 주로 npm을 통해 모듈을 관리하며, ''package.json'' 파일을 사용하지만, URL 로드[27]도 지원한다.
  • 패키지 관리자: Deno는 리소스를 가져오기 위한 내장 메커니즘이 있어 npm과 같은 별도의 패키지 관리자가 필요하지 않다.[28]
  • 타입스크립트 지원: Deno는 타입스크립트를 기본적으로 지원하며, 캐싱 메커니즘을 갖춘 컴파일러[30](TypeScript 컴파일러 또는 swc)를 통해 별도의 컴파일 과정 없이 실행할 수 있다.[29]
  • 브라우저 호환성: Deno는 다양한 웹 표준 API(Web API)를 내장하여 브라우저 환경과의 호환성을 높이는 것을 목표로 한다.
  • 보안: Deno는 기본적으로 샌드박스 환경에서 코드를 실행한다. 파일 시스템 접근, 네트워크 통신, 환경 변수 접근 등에는 명시적인 권한 부여가 필요하다.
  • 비동기 처리: Deno의 모든 비동기 작업은 Promise 객체를 반환한다. Node.js는 Promise와 전통적인 콜백(Callback) 방식을 모두 지원한다.
  • 오류 처리: Deno는 예기치 못한 오류(uncaught error)가 발생하면 기본적으로 프로세스를 종료시킨다.
  • 표준 라이브러리: Deno는 외부 의존성 없이 사용할 수 있는 포괄적인 표준 라이브러리를 제공하여 핵심 API의 크기를 최소화한다.
  • API 호출 방식: Deno는 권한이 필요한 시스템 API를 호출할 때 메시지 전달 채널(message passing channel)을 사용한다.

3. 2. 주요 차이점

Deno는 Node.js와 여러 주요한 차이점을 가진다.[69][4][38]

  • 모듈 시스템: Node.js는 ES 모듈과 CommonJS를 모두 지원하지만, Deno는 기본적으로 ES 모듈만을 사용한다. 이는 웹 브라우저와 유사한 방식이며, CommonJS 모듈을 사용하기 위해서는 별도의 호환성 계층이 필요하다.[25][26] 이에 따라 `require` 구문은 사용하지 않는다.
  • 의존성 관리: 웹 브라우저처럼 URL을 통해 로컬 또는 원격 모듈 의존성을 직접 불러온다. npm과 같은 별도의 패키지 관리자가 필요 없으며, `package.json` 파일도 사용하지 않는다.[28] Node.js 모듈이나 npm 패키지를 가져오기 위해 `node:` 또는 `npm:`과 같은 지정자를 사용할 수 있다.
  • 타입스크립트 지원: 타입스크립트를 기본적으로 내장하여 지원한다. 별도의 설정 없이 타입스크립트 코드를 바로 실행할 수 있으며, 내부적으로 캐싱 메커니즘을 갖춘 타입스크립트 컴파일러 또는 swc를 사용한다.[29][30]
  • 웹 표준 API 호환성: 웹 브라우저 환경과의 호환성을 높이기 위해 Fetch API 등 다양한 웹 API를 표준 라이브러리로 제공한다.
  • 보안: 기본적으로 샌드박스 환경에서 코드를 실행한다. 파일 시스템 접근, 네트워크 통신, 환경 변수 접근 등 민감한 작업에는 사용자의 명시적인 권한 부여가 필요하다.
  • 비동기 처리: 모든 비동기 작업은 Promise 객체를 반환하도록 API가 설계되었다. Node.js가 콜백 함수와 Promise를 모두 지원하는 것과 차이가 있다.
  • 에러 처리: 처리되지 않은 예외(Uncaught Exception)가 발생하면 Node.js와 달리 프로세스가 즉시 종료된다.
  • 표준 라이브러리: Node.js에 비해 외부 의존성이 없는 더 큰 규모의 표준 라이브러리를 제공하며, 핵심 API의 크기는 최소화하는 것을 목표로 한다.
  • 시스템 호출: 권한이 필요한 시스템 API를 호출하거나 네이티브 바인딩을 사용할 때 메시지 전달 채널을 이용한다.

3. 3. 기타 특징

Deno는 현대 프로그래머를 위한 생산적이고 안전한 스크립팅 환경을 목표로 한다.[67][4][38] Node.js와 마찬가지로 이벤트 기반 아키텍처를 강조하며, 비동기 또는 논블로킹(non-blocking) 핵심 입출력(I/O) 유틸리티와 해당 블로킹(blocking) 버전을 함께 제공한다.

Deno는 웹 서버를 만들거나 과학적 계산을 수행하는 데 사용될 수 있다. 발음은 원래 '데노'였으나, '디노'[47][48]가 되었다.

Deno는 MIT 라이선스에 따라 배포되는 오픈 소스 소프트웨어이다.[68][24]

4. 구성 요소

(내용 없음)

4. 1. 표준 라이브러리

Go의 표준 라이브러리를 모델로 삼아, 2018년 11월에 디노 자체 표준 라이브러리가 만들어졌다. 이는 광범위한 도구와 유틸리티를 제공하며, Node.js에서 문제가 되었던 의존성 트리 폭발 현상을 일부 해소하는 데 기여했다.[15]

5. 사용 예시

Deno를 활용한 기본적인 프로그래밍 예시들은 다음과 같다.


  • Hello, World! 프로그램: 가장 기본적인 콘솔 출력 예제이다.
  • 유닉스 cat 프로그램 구현: 파일 내용을 읽어 표준 출력으로 보여주는 예제이다. 파일 시스템 접근 권한이 필요하다.
  • 간단한 웹 서버: 기본적인 HTTP 요청을 처리하는 서버 예제이다. 네트워크 권한이 필요하다.


Deno 스크립트는 기본적으로 샌드박스 환경에서 실행되어 파일 시스템 접근이나 네트워크 통신 등이 제한된다. 이러한 기능이 필요한 경우, 스크립트 실행 시 명시적으로 권한 플래그(예: --allow-read, --allow-net)를 사용하여 허용해야 한다.

또한, Deno는 URL을 통해 원격 표준 라이브러리 스크립트를 별도의 다운로드 과정 없이 직접 실행할 수 있다. 이때 필요한 파일은 자동으로 다운로드되어 캐시되고 코드가 컴파일된다. 예를 들어, 다음 명령어는 표준 라이브러리에 포함된 파일 서버를 모든 권한(-A 플래그 사용)을 활성화하여 실행한다.



$ deno run -A https://deno.land/std/http/file_server.ts

Download https://deno.land/std/http/file_server.ts

Compile https://deno.land/std/http/file_server.ts

...

HTTP server listening on http://0.0.0.0:4500/


5. 1. 기본 스크립트 실행

파일 시스템이나 네트워크 권한 없이 기본적인 Deno 스크립트를 실행할 수 있다. 이는 샌드박스 모드에서 실행되는 것을 의미한다.



deno run main.ts



스크립트 실행에 특정 권한이 필요할 경우, 명시적으로 플래그를 사용하여 활성화해야 한다. 예를 들어, 파일 읽기 권한과 네트워크 권한을 허용하려면 다음과 같이 실행한다.



deno run --allow-read --allow-net main.ts



스크립트의 의존성 트리는 info 하위 명령어를 사용하여 검사할 수 있다.



deno info main.ts



Deno에서의 기본적인 "Hello, World!" 프로그램Node.js와 동일하다.



console.log("Hello, World!");



전역 Deno 네임스페이스는 웹 브라우저 환경에서는 사용할 수 없는 Deno 고유의 API를 제공한다. 예를 들어, 유닉스cat 프로그램을 Deno로 구현하면 다음과 같다.



/**

  • cat.ts
  • /

for (const filename of Deno.args) {

const file = await Deno.open(filename);

await file.readable.pipeTo(Deno.stdout.writable, { preventClose: true });

}



cat.ts 스크립트를 실행하기 위해서는 파일 시스템 읽기 권한(--allow-read)이 필요하다.



deno run --allow-read cat.ts myfile



다음은 Deno를 사용하여 간단한 HTTP 서버를 구현하는 예제이다.



Deno.serve((req) => new Response("hello world"));



Deno는 스크립트를 실행할 때 원격 표준 라이브러리 파일을 자동으로 다운로드하여 캐시하고 코드를 컴파일한다. 따라서 URL을 입력 파일 이름으로 제공하여, 별도의 다운로드 과정 없이 표준 라이브러리 스크립트(예: 파일 서버)를 직접 실행할 수 있다. 아래 예제에서 -A 플래그는 모든 권한을 활성화한다.



$ deno run -A https://deno.land/std/http/file_server.ts

Download https://deno.land/std/http/file_server.ts

Compile https://deno.land/std/http/file_server.ts

...

HTTP server listening on http://0.0.0.0:4500/


5. 2. Hello, World! 프로그램

Deno 스크립트는 기본적으로 파일 시스템 접근이나 네트워크 권한 없이 샌드박스 모드에서 실행된다.



deno run main.ts



특정 권한이 필요한 경우, 실행 시 명시적으로 플래그를 사용하여 활성화해야 한다. 예를 들어 파일 읽기(--allow-read) 및 네트워크(--allow-net) 권한을 부여하려면 다음과 같이 실행한다.



deno run --allow-read --allow-net main.ts



스크립트의 의존성 트리는 info 하위 명령어를 통해 확인할 수 있다.



deno info main.ts



Deno에서의 기본적인 "Hello, World!" 프로그램은 Node.js와 유사하다.



console.log("Hello, World!");



전역 Deno 네임스페이스는 웹 브라우저 환경에서는 사용할 수 없는 Deno 고유의 API를 제공한다. 이를 이용하여 유닉스cat 명령어와 유사한 기능을 다음과 같이 구현할 수 있다.



/**

  • cat.ts
  • /

// Deno.args는 명령어 줄 인수를 배열로 포함한다.

for (const filename of Deno.args) {

// 주어진 이름의 파일을 비동기적으로 연다.

const file = await Deno.open(filename);

// 파일의 내용을 표준 출력(stdout)으로 파이프한다.

// preventClose: true는 stdout이 닫히는 것을 방지한다.

await file.readable.pipeTo(Deno.stdout.writable, { preventClose: true });

}



cat.ts 스크립트를 실행하기 위해서는 파일 시스템 읽기 권한(--allow-read)이 필요하다.



deno run --allow-read cat.ts myfile



다음은 Deno를 사용하여 간단한 HTTP 서버를 구현하는 예제이다. 이 서버는 들어오는 모든 요청에 "hello world"라는 응답을 보낸다.



Deno.serve((req) => new Response("hello world"));



Deno는 스크립트 실행 시 필요한 원격 모듈(예: 표준 라이브러리)을 자동으로 다운로드하여 로컬에 캐시하고 코드를 컴파일한다. 따라서 URL을 직접 실행 파일로 지정하여 별도의 다운로드 과정 없이 스크립트를 실행할 수 있다. 예를 들어, Deno 표준 라이브러리에 포함된 파일 서버를 모든 권한(-A 플래그 사용)을 활성화하여 실행하는 명령어는 다음과 같다.



$ deno run -A https://deno.land/std/http/file_server.ts

Download https://deno.land/std/http/file_server.ts

Compile https://deno.land/std/http/file_server.ts

...

HTTP server listening on http://0.0.0.0:4500/


5. 3. 유닉스 cat 프로그램 구현

`Deno` 객체는 웹 브라우저에서는 사용할 수 없는 Deno 고유의 API에 대한 전역 네임스페이스를 제공한다. 유닉스의 `cat` 명령은 다음과 같이 구현할 수 있다.



/**

  • cat.ts
  • /

for (const filename of Deno.args) {

const file = await Deno.open(filename);

await file.readable.pipeTo(Deno.stdout.writable, { preventClose: true });

}



이 프로그램을 실행하려면 파일 시스템 읽기 권한이 필요하다.



deno run --allow-read cat.ts myfile


5. 4. 간단한 HTTP 서버

다음은 Deno를 사용하여 기본적인 HTTP 서버를 구현하는 예제이다.



Deno.serve((req) => new Response("hello world"));


6. 릴리스

Deno 프로젝트의 릴리스 정보는 Deno 공식 릴리스 페이지에서 자세히 확인할 수 있다.

Deno의 첫 프로덕션 버전인 1.0은 2020년 5월 13일에 출시되었으며[16], Node.js 호환성 개선 등에 중점을 둔 2.0 버전은 2024년 10월 9일에 출시되었다.[23]

Deno, Deno Fresh, Deno SaaSKit의 상세한 버전별 릴리스 내역은 아래 하위 섹션에서 확인할 수 있다.

6. 1. Deno 버전

Deno의 주요 버전 및 출시일은 다음과 같다. 공식 릴리스 페이지에서 더 자세한 내용을 확인할 수 있다.

초기 프로덕션 버전인 Deno 1.0은 2020년 5월 13일에 출시되었다.[16] 이후 지속적인 개선을 거쳐, Node.js 호환성 개선 및 오래된 기능 제거에 중점을 둔 Deno 2.0이 2024년 10월 9일에 출시되었다.[23]

버전최신 패치 릴리스릴리스 날짜최신 패치 릴리스 날짜설명
0.1.00.1.122018-08-232018-11-12Rust 재작성 및 V8 스냅샷
0.2.00.2.112018-11-272019-02-08약간 사용 가능
0.3.00.3.102019-02-182019-04-25deno 모듈을 가져오는 대신, 이제 Deno라는 전역 변수가 있음.
1.0.01.0.52020-05-132020-06-03CLI, 1급 TypeScript 지원, Rust API 및 HTTP 서버 성능 개선을 포함한 초기 프로덕션 릴리스
1.1.01.1.32020-06-122020-07-03CLI에 대한 다양한 추가 및 수정 사항, Rust 1.44.0
1.2.01.2.32020-07-132020-08-08CLI에 대한 다양한 추가 및 수정 사항
1.3.01.3.32020-08-132020-09-04CLI에 대한 다양한 추가 및 수정 사항, Deno 언어에 대한 다양한 개선 사항, TypeScript 3.9.7
1.4.01.4.62020-09-132020-10-10새로운 웹 표준 WebSocket API, 파일 변경 시 자동 재시작, 통합 테스트 커버리지
1.5.01.5.42020-10-272020-11-23더 빠른 트리 쉐이킹 및 번들링, 리팩토링된 REPL
1.6.01.6.32020-12-082020-12-30deno compile을 통해 독립형 바이너리 컴파일, TypeScript 4.1 지원, Mac ARM64에 대한 실험적 지원
1.7.01.7.52021-02-052021-02-19deno compile의 교차 컴파일 지원 및 바이너리 크기 60% 축소, DNS 해결자 API, import 문 및 웹 워커에서 데이터 URL 지원
1.8.01.8.32021-03-022021-04-02WebGPU API에 대한 실험적 지원, 내장 국제화(i18n) API 활성화, 개인 모듈 가져오기 지원, 개편된 커버리지 도구, TypeScript 4.2 지원
1.9.01.9.22021-04-132021-04-23기본 HTTP/2 웹 서버, serde_v8을 사용하여 Rust 코드 호출 성능 향상, Blob URL 지원 및 fetch API 개선, LSP의 가져오기 자동 완성, 대화형 권한 프롬프트
1.10.01.10.22021-05-112021-05-17내장 테스트 실행기 개선, structuredClone() 웹 워커 지원, Web Storage API, 원격 가져오기 맵 지원
1.11.01.11.32021-06-082021-06-29공식 Docker 이미지, 웹 암호화 API 추가 지원, BroadcastChannel, abortable fetch, deno lint 안정화
1.12.01.12.22021-07-132021-07-26generateKey 지원, 웹 암호화 API 서명 및 확인, 네이티브 WebSocket 서버 지원, REPL의 TypeScript 지원, MessagePortMessageChannel 지원
1.13.01.13.22021-08-102021-08-23기본 HTTP 웹 서버 안정화, self.structuredClone() 지원, AbortSignal 지원, navigator.hardwareConcurrency API 지원, 실험적 WebSocketStream API, FFI(Foreign Function Interface)가 네이티브 플러그인 시스템 대체
1.14.01.14.32021-09-142021-10-04URLPattern, 파일 잠금 API, fetch에서 상호 TLS 지원, TypeScript 4.4, URL 구문 분석 및 std/http 성능 개선
1.15.01.15.32021-10-122021-10-25새로운 암호화 API, deno uninstall 하위 명령, 중첩 테스트 API, FFI 개선, Node.js 호환성 향상을 위한 --compat 플래그 추가
1.16.01.16.42021-11-092021-12-03파일 URL에 대한 Fetch 지원, 새로운 불안정한 신호 리스너 API, AbortSignal을 중단할 때 이유 지정 지원, Web Streams API 개선, findLast 및 findLastIndex 배열 메서드, Deno 코드를 npm 패키지로 빌드하는 도구
1.17.01.17.32021-12-162022-01-12가져오기 어설션 및 JSON 모듈, Web Cryptography API 개선, unref 타이머, ALPN 협상에 대한 불안정한 지원, TypeScript 4.5
1.18.01.18.02022-01-202022-01-20구성 자동 검색, Web Cryptography API 지원 완료, 테스트 단계 API 안정화, FFI 개선, LSP 개선
1.19.01.19.32022-02-172022-03-10새로운 deno vendor 종속성 관리 기능, 기본 권한 프롬프트, 파일, 네트워크 소켓 및 stdio에 대한 새로운 웹 스트림, CompressionStream 및 DecompressionStream 지원, Op 및 리소스 새니타이저 오류 개선, 개선된 콘솔 로그
1.20.11.20.62022-04-142022-03-16Rust 코드 호출 성능 향상, HTTP 응답 본문에 대한 자동 압축, 새로운 하위 명령(deno bench, deno task), 보안 개선, 프로그래밍 방식 권한 요청 시 기본값 강화, TypeScript 4.6, V8 10.0
1.21.01.21.32022-04-202022-05-12Deno 언어, VSCode 확장 및 REPL에 대한 다양한 개선 사항. Deno Test 개선
1.22.01.22.32022-05-182022-06-09업데이트된 기본 타입 검사 동작, Deno 언어에 대한 다양한 개선 사항, 테스트 실행기 업데이트
1.23.01.23.42022-06-152022-07-12기본적으로 타입 검사 비활성화, Deno 언어에 대한 다양한 개선 사항, REPL에서 강제 줄 바꿈 기능, TypeScript 4.7
1.24.01.24.32022-07-202022-08-11타입 검사 및 내보내기 성능 개선, Deno 언어에 대한 다양한 개선 사항, Deno Test 개선, 새로운 하위 프로세스 API 업데이트, LSP 개선, semver 모듈 추가
1.25.01.25.42022-08-242022-09-22deno init 하위 명령, 실험적인 npm 지원, 새로운 HTTP 서버 API, 시작 시간 개선, FFI API 개선
1.26.01.26.22022-09-292022-10-17캐시 Web API, WebCrypto Secure Curves, --allow-sys 권한 플래그, npm 및 Node.js 지원 개선, Deno.serve() API 개선, 개선된 모듈 다운로드 사용자 인터페이스, 개발자 경험 개선, TypeScript 4.8
1.27.01.27.22022-10-272022-11-08주요 IDE 연동 개선, npm 호환성 개선, navigator.language Web API, Deno task 개선, 업데이트 확인 기능, Deno API 변경, deno lint 업데이트, V8 10.8, Node.js 호환성 개선, 표준 라이브러리 API 변경
1.28.01.28.32022-11-132022-12-01다양한 버그 수정 및 기능 안정화, npm 패키지 가져오기 지원, 잠금 파일 자동 감지, V8 10.9
1.29.01.29.42022-12-142023-01-16npm 호환성 개선, REPL 변경, 품질 향상, Deno API 변경, TypeScript 4.9, 표준 라이브러리 업데이트
1.30.01.30.32023-01-262023-02-07내장 Node.js 모듈 지원 (예: import "node:fs"), deno.json 파일을 가져오기 맵으로 사용 가능, deno fmt의 세미콜론 사용 여부 설정 지원
1.31.01.31.12023-02-242023-02-25package.json 지원, Node-API 안정화, Node.js 호환성 계층을 Deno 런타임 자체로 통합, Deno API의 안정화, FFI API의 포인터 타입 변경
1.32.01.32.52023-03-232023-04-18향상된 Node.js 호환성, 웹 워커 및 동적 가져오기를 위한 deno compile 지원, Deno API 변경, Web API 변경, 표준 라이브러리 변경, TypeScript 5.0, V8 11.2
1.33.01.33.42023-04-282023-05-18내장 키-값 데이터베이스 (Deno KV), 구성 파일 구조 단순화, 동적 가져오기 시 권한 확인 제거, 더욱 향상된 Node.js/npm 호환성, 성능 개선, CLI 개선, Deno API 변경, V8 11.4
1.34.01.34.32023-05-232023-6-15deno compile 시 npm 패키지 포함 지원, deno.json 및 CLI 플래그에서 glob 패턴 지원, TLS 인증서에 IP 주소 사용 지원, 구성 파일 개선, API 변경, Node.js 호환성 개선, TypeScript 5.0.4, V8 11.5
1.35.01.35.32023-07-052023-07-26새로운 안정적인 웹 서버 API, Node.js 호환성 개선, Deno API 변경, Web API 변경, LSP 개선, 표준 라이브러리 업데이트, TypeScript 5.1.6, V8 11.6
1.36.01.36.22023-08-032023-08-21보안 모델 유연성 향상 및 테스트 API 확장
1.37.01.37.22023-09-192023-10-12Jupyter 지원, TypeScript 5.2, 버그 수정
1.38.01.38.52023-11-012023-12-05Deno.Server API가 Deno.HttpServer로 이름 변경, Jupyter 지원 및 수정, WebSocket 기능
1.39.01.39.42023-12-132024-01-13WebGPU 지원 복원
1.40.01.40.52024-01-252024-02-15Temporal API (날짜/시간 관련), import.meta 속성 추가 지원, Stage 3 데코레이터 지원, Deno 2 버전을 위한 사전 중단(deprecation) 알림, 가져오기 맵 기능 개선, WebGPU 윈도잉 지원 및 불안정 기능 플래그 업데이트
1.41.01.41.32024-02-222024-03-14컴파일된 바이너리 크기 축소, 공식 리눅스 ARM64 빌드 제공
1.42.01.42.32024-02-222024-03-14JSR (JavaScript Registry) 지원
1.43.01.43.62024-05-012024-05-21모노레포 환경에서 언어 서버 성능 개선, 새로운 deno serve 하위 명령, URL.parse() API 추가, Deno 2 기능 플래그 도입, V8 12.4
1.44.01.44.42024-05-302024-06-19초기 Next.js 프레임워크 지원, 개인 npm 레지스트리 지원, gRPC
1.45.01.45.52024-07-102024-07-31워크스페이스 기능을 통한 모노레포 지원, deno install 하위 명령 업데이트, JSR 프로젝트 초기화 명령 추가, deno vendor 하위 명령 중단 예정, 표준 라이브러리 안정화 작업 진행, V8 12.7 및 TypeScript 5.5.2
1.46.01.46.32024-08-222024-09-04CLI 사용법 단순화, deno serve 멀티스레딩 지원, 지원 파일 형식 확장, 가져오기 어설션(import assertions) 중단 예정, 코드 서명 기능, 플레이라이트 테스트 프레임워크 지원, HMR(Hot Module Replacement) 기능 안정화, 표준 라이브러리 안정화, CLI 추가 기능, V8 12.9
2.0.02.0.32024-10-092024-10-25Node.js 호환성 개선, LTS(Long-Term Support) 릴리스 채널 발표, 성능 개선


6. 2. Deno Fresh 버전

[https://github.com/denoland/deno/blob/main/Releases.md Deno 릴리즈 페이지]

버전 번호는 깃허브(Github)의 릴리스를 기준으로 한다.[33]

버전최신 패치 릴리스릴리스 날짜최신 패치 릴리스 날짜설명
1.0.01.0.02022-06-282022-06-28초기 릴리스
1.1.01.1.62022-08-092023-05-23자동 JSX, 새로운 트윈드(twind) 플러그인, Preact Signals 지원, Preact DevTools 지원, 404 페이지의 명시적 렌더링, 스택 미들웨어, 실험적인 Deno.serve 지원, 쇼케이스 및 "Made with Fresh" 배지
1.2.01.2.02023-06-152023-06-15섬 props에서 더 많은 데이터 유형 지원, JSX를 섬으로 전달하고 섬을 중첩하는 기능 지원, npm에서 패키지 가져오기 지원, 사용자 지정 HEAD 요청 핸들러, ctx.render에서 헤더 및 상태 재정의, 비동기 플러그인 렌더링, 간소화된 테스팅
1.3.01.3.12023-07-182023-07-21비동기 라우트 컴포넌트. 플러그인에서 라우트 및/또는 미들웨어 추가. 500 오류 템플릿 폴백, 오류 경계, 동일한 파일에서 여러 섬 내보내기, Fresh 린팅 규칙, Deno.serve 지원
1.4.01.4.32023-08-162023-09-06사전 컴파일로 더 빠른 페이지 로드, 사용자 지정 html, head 및 body 태그, 레이아웃 (비동기 레이아웃 및 비동기 앱 래퍼), define 함수로 더 빠른 타이핑
1.5.01.5.42023-10-102023-09-06부분 및 CSR 지원, 활성 링크 스타일링, 노출된 esbuild 타겟 구성 및 metafile.json
1.6.01.6.82023-12-012024-03-22Tailwind CSS 지원, 부분 개선, 번들링 개선, 개선된 플러그인 API, 개선된 라우트 매칭 성능, 하위 경로 지원, 더 나은 타이핑, 오류 오버레이 닫기 가능
1.7.01.7.32024-08-152024-10-14유닉스 도메인 소켓 지원 추가


6. 3. Deno SaaSKit 버전

Deno SaaSKit의 버전 정보는 Deno 릴리즈 페이지에서 확인할 수 있다. 버전 번호는 Github 저장소의 릴리스 번호를 기반으로 한다.[34]

버전최신 패치 릴리스릴리스 날짜최신 패치 릴리스 날짜설명
베타베타2023-04-042022-04-04초기 릴리스
0.1.02023-04-19
0.2.02023-05-08
0.3.02023-06-06
0.4.02023-06-20Deno KV OAuth
0.5.02023-06-27
0.6.00.6.12023-08-062023-09-12
0.7.02023-12-19


참조

[1] 웹사이트 Announcing the Deno Company https://deno.com/blo[...] 2021-03-29
[2] 웹사이트 Contributors, denoland/deno, Github https://github.com/d[...] 2019-07-05
[3] 웹사이트 deno/LICENSE at main https://github.com/d[...] 2019-07-05
[4] 웹사이트 Deno Manual https://docs.deno.co[...] 2019-05-17
[5] 웹사이트 Deno: Secure V8 TypeScript Runtime from Original Node.js Creator https://www.infoq.co[...] 2018-12-26
[6] 웹사이트 Ryan Dahl's Node.js regrets lead to Deno https://www.infoworl[...] InfoWorld 2018-06-21
[7] AV media 10 things I regret about Node.js https://www.youtube.[...] JSConf EU 2019-05-17
[8] 웹사이트 Design mistakes in Node https://github.com/d[...] 2018-06-06
[9] 웹사이트 denoland/deno, branch "golang" https://github.com/d[...]
[10] 웹사이트 Suggestion: Look into porting to Rust and using Tokio https://github.com/d[...]
[11] 웹사이트 Tokio - The asynchronous run-time for the Rust programming language. https://tokio.rs/
[12] 웹사이트 Protobuf seems like a lot of overhead for this use case? https://github.com/d[...]
[13] 웹사이트 Remove flatbuffers https://github.com/d[...]
[14] 웹사이트 Replace flatbuffers https://github.com/d[...] 2019-07-11
[15] 웹사이트 denoland/deno_std: deno standard modules https://github.com/d[...] 2022-03-03
[16] 웹사이트 Deno 1.0 https://deno.com/blo[...] 2020-05-14
[17] 웹사이트 JavaScript Containers https://tinyclouds.o[...] 2022-05-04
[18] 웹사이트 Deno Company unveils server-side JavaScript hosting service https://www.infoworl[...] 2022-04-14
[19] 웹사이트 Deno Deploy moves toward GA, adds paid plan https://www.infoworl[...] 2022-07-24
[20] 웹사이트 Introduction Fresh 1.0 as new full stack web framework for Deno https://deno.com/blo[...] 2022-07-24
[21] 웹사이트 Fresh 1.1 - automatic JSX, plugins, DevTools, and more https://deno.com/blo[...] 2022-09-10
[22] 웹사이트 Announcing Deno SaaSKit: an open-source SaaS template built with Fresh https://deno.com/blo[...] 2022-04-04
[23] 웹사이트 Announcing Deno 2 https://deno.com/blo[...] 2024-10-27
[24] 웹사이트 Deno Is Ready for Production https://www.infoq.co[...] 2020-07-01
[25] 웹사이트 Modules: ECMAScript modules | Node.js v17.6.0 Documentation https://nodejs.org/a[...]
[26] 웹사이트 Deno - A modern runtime for JavaScript and TypeScript https://docs.deno.co[...]
[27] 웹사이트 Modules: ECMAScript modules | Node.js v17.6.0 Documentation https://nodejs.org/a[...]
[28] 웹사이트 Deno - A modern runtime for JavaScript and TypeScript https://docs.deno.co[...]
[29] 웹사이트 Deno.js in Production. Key Takeaways. https://medium.com/@[...] 2022-05-16
[30] 웹사이트 Documentation https://github.com/s[...] 2022-03-03
[31] 웹사이트 Deno raises $21M https://deno.com/blo[...] 2022-06-21
[32] 웹사이트 Releases https://github.com/d[...] 2021-01-14
[33] 웹사이트 Releases https://github.com/d[...]
[34] 웹사이트 Releases https://github.com/d[...]
[35] 웹사이트 Contributors to denoland/deno https://github.com/d[...] GitHub 2020-05-15
[36] 웹사이트 Deno: Secure V8 TypeScript Runtime from Original Node.js Creator https://www.infoq.co[...] InfoQ 2019-11-18
[37] 웹사이트 Node.jsに関する10の反省点 https://www.youtube.[...] YouTube 2019-11-18
[38] 웹사이트 Deno Manual https://deno.land/ma[...] deno.land 2019-11-18
[39] 웹사이트 Ryan Dahl’s Node.js regrets lead to Deno https://www.infoworl[...] InfoWorld 2019-11-18
[40] 웹사이트 Design Mistakes in Node https://tinyclouds.o[...] 2019-11-18
[41] 웹사이트 denoland/deno at golang https://github.com/d[...] GitHub 2019-11-18
[42] 웹사이트 Suggestion: Look into porting to Rust and using Tokio https://github.com/d[...] GitHub 2019-11-18
[43] 웹사이트 Protobuf seems like a lot of overhead for this use case? https://github.com/d[...] GitHub 2019-11-18
[44] 웹사이트 Replace flatbuffers https://github.com/d[...] GitHub 2019-11-18
[45] 웹사이트 Remove flatbuffers https://github.com/d[...] GitHub 2019-11-18
[46] 웹사이트 deno_std https://github.com/d[...] GitHub 2019-11-18
[47] 웹사이트 Pronunciation #5707 https://github.com/d[...] GitHub 2022-08-22
[48] 웹사이트 マニュアル冒頭に発音が記載 https://docs.deno.co[...] deno.com 2024-01-12
[49] 웹인용 Announcing the Deno Company https://deno.com/blo[...] 2021-03-29
[50] 웹인용 deno/LICENSE at main https://github.com/d[...] 2019-07-05
[51] 웹인용 The MIT License https://opensource.o[...] 2018-09-17
[52] 웹인용 Contributors, denoland/deno, Github https://github.com/d[...] 2019-07-05
[53] 웹인용 Deno: Secure V8 TypeScript Runtime from Original Node.js Creator https://www.infoq.co[...] 2021-05-26
[54] 웹인용 A visit to Deno Land with Kit Kelly (JS Party #127) https://changelog.co[...] 2021-05-26
[55] 웹인용 Node.js에 관해 후회하는 10가지 - Ryan Dahl - JSConf EU https://www.youtube.[...] 2021-05-26
[56] 웹인용 Deno Manual https://deno.land/ma[...] 2019-05-17
[57] 웹인용 Ryan Dahl’s Node.js regrets lead to Deno https://www.infoworl[...] InfoWorld 2018-06-21
[58] 웹인용 denolib/awesome-deno https://github.com/d[...] 2021-05-27
[59] 웹인용 denoland/deno - golang tree https://github.com/d[...] 2021-05-27
[60] 웹인용 Suggestion: Look into porting to Rust and using Tokio · Issue #205 · denoland/deno https://github.com/d[...] 2021-05-27
[61] 웹인용 Tokio https://tokio.rs/ 2021-05-27
[62] 웹인용 Protobuf seems like a lot of overhead for this use case? · Issue #269 · denoland/deno https://github.com/d[...] 2021-05-27
[63] 웹인용 Replace flatbuffers · Issue #2121 · denoland/deno https://github.com/d[...] 2021-05-27
[64] 웹인용 Remove flatbuffers by ry · Pull Request #2818 · denoland/deno https://github.com/d[...] 2021-05-27
[65] 웹인용 denoland/deno_std github repository https://github.com/d[...] 2021-05-27
[66] 웹인용 Deno 1.0 https://deno.land/v1 2020-05-14
[67] 웹인용 Deno manual - philosophy https://deno.land/ma[...] 2021-05-27
[68] 웹인용 Deno Is Ready for Production https://www.infoq.co[...] 2021-05-27
[69] 웹인용 Deno manual - comparison to nodejs https://deno.land/ma[...] 2021-05-27



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com