(2023) 이펙티브 데노 프레임워크
2023-07-27 Bibliography bib framework javascript zenn한글로 변환은 했다. 이 책은 일본 데노 커뮤니티에서 정리한 책이다. 데노 홈페이지 및 여기를 활용하길 바란다.
TODO 공식 메뉴얼 관련
여기에 메뉴얼 포크했다 Deno Manual 한글 번역하면 간단히 작업하면 devdocs 로 변환 할 수 있을 것 이다.
Node.js -> Deno cheatsheet
이게 답이다. 이렇게 간단해 지는데 더 이상 무엇이 필요한가
Node.js | Deno |
---|---|
node file.js | deno run file.js |
ts-node file.ts | deno run file.ts |
node -e | deno eval |
npm i -g | deno install |
npm i / npm install | n/a ¹ |
npm run | deno task |
eslint | deno lint |
prettier | deno fmt |
package.json | deno.json / deno.jsonc / import_map.json |
tsc | deno check ² |
typedoc | deno doc |
jest | deno test |
tap | deno test |
mocha | deno test |
ava | deno test |
nodemon | deno run/lint/test --watch |
nexe / pkg | deno compile |
npm explain | deno info |
nvm / n / fnm | deno upgrade |
tsserver | deno lsp |
nyc / c8 / istanbul | deno coverage |
benchmarks | deno bench |
01 소개
2020 년 5 월에 Deno 의 v1.0 이 출시되었습니다.이후 Deno 는 일본 내에서도 서서히 주목을 받는 느낌을 받고 있습니다. 그러나 Deno 에 관한 노하우는 Web 상의 여러곳에 분산된 포괄적으로 정보를 제공하고 있는 문서 등은 잘 보이지 않도록 느끼고 있었습니다.
그 문제를 해결하기 때문에 이 책에서는 Deno 를 보다 효율적으로 다루기 위한 “의존 관계 관리"와 “퍼미션의 취급"등에 관한 다양한 노하우를 정리하고 있습니다.
이 책을 읽으면,Deno 를 유효하게 활용하기 위한 노하우를 한가지 얻을 수 있는다는 것을 목표로 하고 썼습니다.
입문 편 스타일 모듈 테스트 스크립팅 기타 부록
02 목록
03 Deno 란?
Deno 는 V8 JavaScript 엔진을 기반으로 구현된 JavaScript/TypeScript 런타임입니다.
Node.js에 관한 10개의 반성점을수정하기 위해 Node.js 의 개발자인Ryan Dahl씨를 중심 으로개발이 진행되고 있습니다.
Deno 의 특징 {#deno 의-특징}
Deno 의 특징을 요약하면 다음과 같은 점이 있습니다.
- TypeScript 를 표준으로 지원
- 권한 시스템
- 생산성
- 웹 표준 준수
- ES 모듈 기반 모듈 시스템
- npm 패키지 지원
- 최신 JavaScript 사양 준수
이것에 대해 자세히 설명하겠습니다.
TypeScript 를 표준으로 지원 {#typescript 를-표준으로-지원}
Deno 의 큰 장점은 TypeScript 를 지원한다는 것입니다.
Node.js 에서 TypeScript 를 사용하고 싶을 때는 기본적으로=typescript=패키지=ts-node=를 npm 으로 설치하고=tsconfig.json=준비해야 할까 생각합니다.
Deno 는 표준으로 TypeScript 를 지원하므로 이러한 설정 작업이 필요하지 않습니다.
예를 들어, 다음과 같은 TypeScript 파일이 있다고 가정합니다.
sample.ts
interface User {
id: number;
name: string;
}
const user: User = {
id: 1,
name: "foo",
};
console.log(user);
Deno 에서는TypeScript 파일을 스크립트로 실행할 수 있습니다.
$ deno run sample.ts
이런 식으로=deno run=명령을 사용하여 TypeScript 파일을 컴파일하고 실행할 수 있습니다.
또, 트랜스파일 후의 JavaScript 코드는 로컬의 파일 시스템에 캐쉬 되기 (위해)때문에, 2 회째 이후에 같은 파일을 실행할 때는 트랜스 파일등이 스킵 됩니다.
타입 체크 정보
Deno v1.23 이상 버전에서는=deno run=명령이 기본적으로 TypeScript 유형 검사를 수행하지 않습니다.
유형 검사를 수행하려면=deno check=명령이나=–check=옵션을 사용해야합니다.
$ deno check main.ts
$ deno run --check main.ts
권한 시스템
Deno 는 권한 시스템을 제공합니다.
어떻게 하면 예를 들어 다음과 같은 처리를 기본적으로실행할 수 없습니다.
- 파일 읽기/쓰기
- 네트워크 액세스
- 환경 변수 참조
- 서브 프로세스 실행
이러한 작업을 수행하려면 Deno 를 실행할 때 명시적으로 권한을 부여해야 합니다.
예를 들어, 파일을 읽고 싶을 때는--allow-read
, 네트워크 액세스를 실시하고 싶을 때는=–allow-net=옵션을 지정하는 등의 상태입니다.
$ deno run --allow-read --allow-net ./sample.ts
이 메커니즘을 통해 Deno 는 높은 보안을 기대할 수 있습니다.
생산성
Deno 는 개발 장면에서 필요한 많은 기능을 처음부터 제공합니다.
- 포맷터 (=deno fmt=명령)
- 린타 (=deno lint=명령)
- 테스트 러너 (=deno test=명령)
- API 문서 생성 (=deno doc=명령)
- 번들러 (=deno bundle=명령)
- LSP 서버 (=deno lsp=명령)
대부분의 작업은=deno=명령만으로 완결되므로 툴의 선정이나 셋업, 학습 등에 드는 비용이 경감됩니다.
브라우저(웹 표준)와의 호환성
Deno 는 웹 표준과의 호환성이 강하게 의식되어 있으며 많은 기능이 웹 표준을 기반으로 구현됩니다.
예)
- HTTP 요청을 보내려는 경우fetch API를사용합니다.
- WebSocket 서버와 통신할 때는WebSocket객체를 사용합니다.
- 바이너리 데이터를 다루고 싶을 때는 Typed Array 를 사용합니다.
- 스트리밍 처리를 하고 싶을 때는Streams API를사용합니다.
- 멀티스레드로 처리하고 싶을 때는Worker객체를 사용합니다.
ES 모듈 기반 모듈 시스템
Deno 는 Node.js 에서 제공하는 CommonJS 형식의 모듈을 지원하지 않습니다.
Deno 는ES Modules를 전제로 하고 라이브러리를 이용하고 싶을 때는 아래와 같이 문장의 URL 로 다운로드처를 지정합니다import
.
import { bold, red } from "https://deno.land/std@0.93.0/fmt/colors.ts";
console.log(bold(red("Hello, Deno!")));
스크립트를 실행할 때 Deno 는 import 문에 지정된 라이브러리가 로컬 파일 시스템으로 다운로드되었는지 확인합니다.다운로드되지 않으면 Deno 는 자동으로 다운로드하여 로컬 파일 시스템에 캐시합니다.
한 번 다운로드된 라이브러리는 삭제하지 않는 한 로컬로 계속 캐시되므로, 두 번째 이후의 로드 시에는 다운로드 자체가 건너뜁니다.
이와 같이, Deno 자신이 모듈 매니저와 같은 기능을 갖추고 있는 것도 있어,Node.js 에 있어서의=package.json=등등=npm=의 구조는 존재하지 않습니다.
npm 패키지 지원
자세한 내용은 [npm 패키지 사용]]페이지에서도 설명하지만 Deno 는 npm 패키지 지원도 제공합니다.
큰 특징으로, Deno 는 npm 패키지의 이용을 위해 사용자에게의=npm install=실행이나=package.json=등을 요구하지 않습니다.
npm 패키지에 대해서도deno.land/x에서 공개된 타사 패키지 등과 마찬가지로 Deno 실행 시 자동으로 다운로드되어 로컬로 캐시됩니다.
만약 Deno 의 공식 패키지 레지스트리인deno.land/x에 목적을 만족하는 패키지를 찾을 수 없다면, npm 패키지의 사용도 고려해 보면 좋을지도 모릅니다.
최신 JavaScript 사양 준수
Deno 의 임베디드 API 와 표준 라이브러리인deno_std는=Promise=자바=Async Iterator=스크립트의 최신 기능을 염두에 두고 설계되었습니다.
Node.js 에서 중요한 역할을 수행했던 Stream 및 EventEmitter 와 같은 API 는 Deno 본문에 포함되지 않습니다.(이 API 는Node.js 호환 레이어에서 제공됩니다)
Deno 사용 사례
Deno 는 Node.js 와 마찬가지로 다양한 용도로 사용할 수 있습니다.
예)
- 스크립팅
- CLI 도구 개발 (=deno compile=명령으로 단일 이진화 가능)
- 백엔드 API( 예:Oak)
- 프런트 엔드 개발 (Aleph.js,Fresh,packup등)
- Discord 봇 (Discordeno)
04 Deno 입문
이 장에서는 앞으로 Deno 를 시작하고 싶은 방향으로 Deno 의 입문 방법 등에 대해 설명합니다.
따라서 이미 Deno 에 대해 알고 계신 분은 이 장을 건너뛰어도 괜찮습니다.
설치
Deno의 톱 페이지에 설치 방법이 기재되어 있으므로, 자세한 것은 그쪽을 참조해 주세요.
Mac 이나 Linux 의 경우 다음 스크립트를 실행하여 설치할 수 있습니다.
$ curl -fsSL https://deno.land/x/install/install.sh | sh
데노 입문
Deno 는 업데이트가 빠르기 때문에공식 매뉴얼을참조하는 것이 확실합니다.
Getting Started페이지의 각 장을 한꺼번에 시험해 보면, Deno 의 사용법에 대해 대략적으로 파악할 수 있다고 생각합니다.
또,tokiedokie씨에 의한공식 매뉴얼의 일본어 번역도 존재합니다.
그 이외의 정보원으로서는, 이하의 페이지에 Deno 를 사용해 할 수 있는 일등이 정리되어 있습니다.
또, 이 책에는 [치트 시트]]도 부속되어 있으므로, 좋으면 그쪽도 활용해 주세요.
IDE/에디터 설정하기 {#ide 에디터-설정하기}
Deno 에서 개발할 때는 자동 완성이나 정의원으로의 점프 등을 지원하는 IDE 나 에디터가 있으면 편리합니다.
특별한 조건이 없으면 Visual StudioCode 및vscode-deno확장을 사용하는 것이 좋습니다.
vscode-deno 설정
vscode-deno는 Deno 의 핵심 팀이 개발 및 유지 관리하는 Visual Studio Code 의 확장입니다.
이 섹션에서는 vscode-deno 를 설정하는 방법에 대해 설명합니다.
Visual Studio Code 의 Extensions 메뉴에서 를 =denoland.vscode-deno=설치합니다.
https://storage.googleapis.com/zenn-user-upload/7z592ns2iq4xfk3xuo3n3vl6nhup
vscode-deno 를 설치한 후 명령 팔레트를 열고=Deno: Initialize Workspace Configuration=명령을 실행합니다.(명령 팔레트는 =Ctrl+Shift+P=열어야합니다)
https://storage.googleapis.com/zenn-user-upload/kveubsrsj1i49qmp4nia8ethtk79
그러면 몇 가지 질문이 들립니다.기본적으로는 모두 「Yes」라고 대답해 문제 없습니다.
답변이 끝나면 .vscode 디렉터리에 settings.json 만들어집니다.
이 파일이 만들어지면 설치가 성공적으로 완료됩니다.
만약, 자동 완성이나 정의로 점프등이 동작하지 않는 경우는, 데노가 실행되고 있는지 확인해 보세요 Deno: Initialize Workspace Configuration
.
기타 편집기 정보
Visual Studio Code 에 한하지 않고, LSP 를 지원하는 에디터라면, 자동 완성이나 정의원에의 점프등을 활용할 수 있습니다.
Vim/Neovim
Vim 또는 Neovim 을 사용하는 경우 다음 조합 중 하나를 권장합니다.
Emacs
Emacs 의 경우lsp-mode문서에 설정 방법이 설명되어 있습니다.
자세한 내용은이 페이지를참조하십시오.
TypeScript 배우기
Deno 는 TypeScript 뿐만 아니라 일반 JavaScript 도 지원합니다.
그러나 TypeScript 를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
- IDE 나 에디터 등의 지원으로 생산성 향상
- 정적 타입에 의한 메인터넌스성의 향상
따라서 Deno 를 효과적으로 사용하려면 TypeScript 에 익숙해지면 좋습니다.
어떻게 TypeScript 를 배울 수 있습니까? {#어떻게-typescript 를-배울-수-있습니까}
교재로서는, 이하의 근처를 추천합니다.
또, Deno 는 셋업이 비교적 간단하기 때문에, Deno 로 커맨드 라인 앱이나 Web 앱등을 만드는 것으로, TypeScript 에 입문해 보는 것도 좋을지도 모릅니다.
Deno 최신 정보
최신 정보
각 릴리스에 대한 최신 정보는공식 블로그 게시물을찾아보는 것이 좋습니다.
최신의 개발 상황을 알고 싶은 경우는,deno나deno_std, 및deno_lint등의 리포지토리를 워치하면 좋다고 생각합니다.
또한Deno의 공식 Discord 서버의DEV 관련 채널에서도 매일 활발히 논의가 진행되고 있습니다.
일본어 출처
아마도 일본어의 출처로는deno-ja의 Slack이 가장 활발하다고 생각됩니다.
또, 전미 된장이지만,Deno Weekly라고 하는 사이트에서 매주 일요일에 전주에 있어서의 Deno 의 최신 정보를 발신하고 있으므로, 흥미가 있으면 참조해 주세요.
05 Deno 스타일
코드를 작성할 때 특정 스타일을 따르면 소스 코드의 일관성이 높아져 가독성 향상 등으로 이어집니다. 이 장에서는 Deno 에서 코드를 작성할 때의 스타일에 대해 설명합니다.
Deno 의 스타일이란?
이 책에서는 다음 기준을 충족하는 스타일을 “Deno 스타일"로 정의합니다.
deno lint
그리고deno fmt
부과하는 스타일- Deno Style Guide 에 제시된 명명 등에 관한 스타일
deno lint=에 =deno fmt
대해
Deno 에는 린터(deno lint
)와 포매터(deno fmt
)가 표준 탑재되어 있습니다. 이러한 도구는 Rust 로 구현되며 매우 빠르게 작동합니다. Deno 본체에 짜넣어지고 있는 툴이라고 하는 일도 있어, Deno 로 어플리케이션이나 모듈등을 개발할 때는, 이러한 툴이 부과하는 스타일에 따르는 것이 좋을 것입니다. -> 치트시트 확인
또한 CI 를 설정하고 이러한 실행을 자동화하는 것이 좋습니다. 자세한 내용은 12 장 CI 설정을 참고.
Deno Style Guide
Deno Style Guide Deno 의 표준 라이브러리인 deno_std 와 많은 타사 모듈이 따르는 스타일입니다. 파일이나 함수 등의 명명에 대해서는, 이 스타일을 따르는 것이 좋을 것입니다.
파일 형식과 엔트리 포인트
- 파일은 Snake 케이스 형식으로 명명한다. (
api-client.ts
->api_client.ts
) - 모듈의 엔트리 포인트 :
mod.ts
- Node.js 에
index.js
해당
- Node.js 에
주석 : JSDoc
코멘트에 대해서는, 이하의 이유로부터 JSDoc 형식으로 기술하면 됩니다.
- Deno 와 함께 제공되는 =deno doc=명령은 JSDoc 주석의 내용을 기반으로 API 문서를 생성합니다.
- TypeScript 는 일부 JSDoc 구문을 지원합니다.