(2023) 이펙티브 데노 프레임워크

(2023) 이펙티브 데노 프레임워크

2023-07-27 Bibliography bib framework javascript zenn

한글로 변환은 했다. 이 책은 일본 데노 커뮤니티에서 정리한 책이다. 데노 홈페이지 및 여기를 활용하길 바란다.

TODO 공식 메뉴얼 관련

[2023-07-27 Thu 16:48]

여기에 메뉴얼 포크했다 Deno Manual 한글 번역하면 간단히 작업하면 devdocs 로 변환 할 수 있을 것 이다.

Node.js -> Deno cheatsheet

이게 답이다. 이렇게 간단해 지는데 더 이상 무엇이 필요한가

Node.jsDeno
node file.jsdeno run file.js
ts-node file.tsdeno run file.ts
node -edeno eval
npm i -gdeno install
npm i / npm installn/a ¹
npm rundeno task
eslintdeno lint
prettierdeno fmt
package.jsondeno.json / deno.jsonc / import_map.json
tscdeno check ²
typedocdeno doc
jestdeno test
tapdeno test
mochadeno test
avadeno test
nodemondeno run/lint/test --watch
nexe / pkgdeno compile
npm explaindeno info
nvm / n / fnmdeno upgrade
tsserverdeno lsp
nyc / c8 / istanbuldeno coverage
benchmarksdeno 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 최신 정보

최신 정보

각 릴리스에 대한 최신 정보는공식 블로그 게시물을찾아보는 것이 좋습니다.

최신의 개발 상황을 알고 싶은 경우는,denodeno_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 해당

주석 : JSDoc

코멘트에 대해서는, 이하의 이유로부터 JSDoc 형식으로 기술하면 됩니다.

  • Deno 와 함께 제공되는 =deno doc=명령은 JSDoc 주석의 내용을 기반으로 API 문서를 생성합니다.
  • TypeScript 는 일부 JSDoc 구문을 지원합니다.

TODO 06 deno_std 를 사용해 보자

07 어떤 버전의 deno_std 를 사용하면 좋을까?

08 서드파티 모듈을 사용해 보자

09 종속 모듈의 버전을 명시해 보자

10 종속 모듈을 중앙에서 관리해 보자

11 테스트 작성하기

12 CI 를 설정해 보자

13 Deno CLI 의 기능을 활용하여 생산성 향상시키기

14 필요한 권한만 부여하자

15 태스크 러너를 사용하여 효율적으로 작업 관리하기

16 npm 패키지 사용하기

17 부록: 관련 사이트

18 부록: 치트시트

19 변경 내역

Related-Notes

References

마지막 수정일자