디노 (소프트웨어)

디노 title=Contributors, denoland/deno, Github **Deno**는 V8 자바스크립트 엔진 및 러스트 프로그래밍 언어를 기반으로 하는 자바스크립트 및 타입스크립트용 런타임이다. Node.js의 원저자인 라이언 달이 만들었으며 생산성에 중점을 두고 있다.확인날짜=2021-05-26 공식적인 발음은 디노[Dēnō]확인날짜=2021-05-26다. 라이언 달은 2018년 "Node.js에 관해 후회하는 10가지" 강연확인날짜=2021-05-26에서 Deno를 발표했다. Deno는 별도의 패키지 관리 프로그램이 필요없는데 단일 실행 파일 내에서 런타임 및 패키지 관리자의 역할을 명시적으로 수행하기 때문이다.확인날짜=2019-05-17출판사=InfoWorld
# 역사
라이언 달이 JSConf EU 2018에서 "Node.js에 관해 후회하는 10가지"를 이야기할 때 Node.js의 초기 디자인 결정에 대해 다음과 같은 후회들을 했다.확인날짜=2021-05-27 * API 디자인에서 promise를 사용하지 않는 선택 * 레거시 빌드 시스템인 GYP 사용 * node_modules 및 package.json 사용 * 파일 확장자 비포함 * index.js를 사용한 매지컬 모듈 해석(magical module resolution) * V8의 샌드박스 환경 깨뜨림 이에 대한 해결 방안으로 프로토콜 버퍼와 같은 직렬화 도구로 메시지 전달을 통해 시스템 호출 바인딩을 달성하고 접근 제어를 위해 명령 줄 플래그를 제공하는 Deno의 프로토타입을 발표했다. Deno는 처음에 Go로 작성되었으며 권한있는 쪽 (Go, 시스템 호출 액세스 포함)과 권한없는 쪽 (V8) 간의 직렬화를 위해 프로토콜 버퍼를 사용했다.확인날짜=2021-05-27 하지만 Go는 이중 런타임과 쓰레기 수집 부담에 대한 우려 때문에 곧 Rust로 대체되었다.확인날짜=2021-05-27 또, 비동기 이벤트 기반 플랫폼으로 libuv 대신 Tokio (software)확인날짜=2021-05-27가 도입되었으며, 더 빠른 "제로-카피" 직렬화 및 역직렬화를 위해 FlatBuffers가 채택되었다.확인날짜=2021-05-27 하지만 2019년 4월, 벤치마크 게시 후 직렬화의 상당한 오버헤드가 측정되었다.확인날짜=2021-05-27 때문에, 2019년 8월 말 FlatBuffers는 제거되었다.확인날짜=2021-05-27 Deno의 표준 라이브러리확인날짜=2021-05-27는 Go의 표준 라이브러리 모델을 기반으로, 광범위한 도구와 유틸리티를 제공하기 위해 2018년 11월에 생성되었다. 이로써 Node.js의 의존성 트리 폭발 문제를 부분적으로 해결하였다. 공식 Deno 1.0은 2020년 5월 13일에 릴리즈하였다.확인날짜=2020-05-14 2021년 3월 29일, 개발을 촉진시키고 사용자에게 상업적 용도의 개발을 제공하기 위해 Deno 회사가 설립됐음을 발표했다. 이 회사는 Shasta Ventures, 모질라 코퍼레이션 등의 회사로부터 수 백만 달러를 지원 받았다.
# 개요
Deno는 모던 프로그래머를 위한 생산적인 스크립팅 환경을 목표로 한다.확인날짜=2021-05-27 또, Node.js와 마찬가지로 동기/비동기 코어 입출력 유틸리티 세트를 제공하는 이벤트 기반 아키텍처를 강조한다. Deno는 웹 서버를 만들고 과학적 계산을 수행하는데 사용할 수 있다. Deno는 MIT 라이선스에 따른 오픈 소스 소프트웨어다.확인날짜=2021-05-27
## Node.js와 비교
**공통점** Deno와 Node.js는 구글 크롬의 엔진인 V8 JavaScript 엔진 기반으로 구축된 런타임 환경이다. 둘 다 내부 이벤트 루프가 있고 스크립트와 광범위한 시스템 유틸리티를 실행하기위한 명령 줄 인터페이스를 제공한다. **차이점**확인날짜=2021-05-27 # ES 모듈 사용 (CommonJS 사용안함) #* `require` 사용 안함 # 브라우저처럼 URLs(원격) / 파일경로(로컬)로 모듈 의존성 불러오기 # npm 사용 안함 #* URLs / file paths 로 모듈 레퍼런스 함 # `package.json` 모듈 해석 알고리즘 사용안함 # 모든 비동기 액션이 `Promise`를 반환함 # 파일, 네트워크, 환경(변수) 접근에 대해 명시적으로 권한설정 필요 # 예상하지 못한 error 발생 시 무조건 죽음 # 내장 타입스크립트 지원
# 릴리즈
Deno 릴리즈 페이지
# 예시
파일 시스템 또는 네트워크 권한 없이 다음과 같이 기본 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` 네임 스페이스는 브라우저에서 사용할 수 없는 API를 노출한다. 유닉스 cat 프로그램을 다음과 같이 구현할 수 있다. /* cat.ts */ /* Deno APIs are exposed through the `Deno` namespace. */ const { stdout, open, copy, args } = Deno; // Top-level await is supported for (let i = 0; i < args.length; i++) { const filename = args[i]; // Obtains command-line arguments. const file = await open(filename); // Opens the corresponding file for reading. await copy(file, stdout); // Performs a zero-copy asynchronous copy from `file` to `stdout`. } `Deno.copy` 함수는 Go의 `io.Copy` 와 매우 유사하게 작동한다. `stdout` (표준 출력)은 목적 `Writer`이고 `file`은 소스 `Reader` 다. 이 프로그램을 실행 하려면 파일 시스템에 대한 읽기 권한을 활성화해야 한다 deno run --allow-read cat.ts myfile 기본 HTTP 서버를 구현하는 예제 // Imports `serve` from the remote Deno standard library, using URL. import { serve } from "https://deno.land/std@v0.21.0/http/server.ts"; // `serve` function returns an asynchronous iterator, yielding a stream of requests for await (const req of serve({ port: 8000 })) { req.respond({ body: "Hello, World!\n" }); } 이 프로그램을 실행할 때 Deno는 원격 표준 라이브러리 파일을 자동으로 다운로드 및 캐시한 뒤, 코드를 컴파일한다. URL을 입력 파일 이름으로 제공하여, 다운로드하지 않고 직접 표준 라이브러리 스크립트를 실행할 수 있다. 예를 들면, file_server ( `-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/ 더 많은 예시는 deno 메뉴얼 - 예시들에서 찾아볼 수 있다.