이번 시간에는 deno를 직접 설치하고
환경변수를 설정하는 방법을 알아보겠습니다.
Deno 설치법
Deno는 macOS, 리눅스, 윈도우에서
작동합니다.Deno는 단인 이전 실행 파일이라
외부 종속성이 없기 때문에 maOS에서는
M1(arm64)과 인텔(x64) 실행 파일을
모두 제공합니다.
리눅스 및 윈도우즈에서는
x64만 지원하고 있습니다.
- macOS 설치법
curl -fsSL https://deno.land/x/install/install.sh | sh
- Windows PowerShell 설치법
irm https://deno.land/install.ps1 | iex
- cargo를 사용한 설치법
cargo install deno --locked
설치 후 버전확인
deno를 설치했다면 아래 명령어로
deno의 버전을 확인해 줍니다.
deno --version
deno의 최신 버전을 가져오려면
위 사이트에서 최신 버전을
확인후 아래 명령어로 최신버전을
직접 불러와서 설치하면 됩니다.
deno upgrade --version 1.30.1
Deno 환경 변수 설정
Deno CLI에는 선택한 IDE를 지원하는
전체 언어 서버를 포함한 응용프로그램
개발에 일반적으로 필요한 많은 도구가
포함되어 있습니다. 이러한 도구를
사용할 수 있도록 하기 위해서는
설치만 하시면 됩니다.
이 섹션에서는 즐겨찾는 IDE와 함께
Deno를 사용하는 것 외에도
셀 완료 및 환경 변수에 대해서도
설명하고 있습니다.
편집기 editor/IDE 사용법
편집자/IDE에서 Deno에 대한
광범위한 지원이 있습니다.
다음 절에서는 편집기에서 Deno를
사용하는 방법을 제공하고
대부분의 편집기는 언어 서버 프로토콜과
Deno CLI에 통합된 언어 서버를
사용하여 Deno에 직접 통합됩니다.
deno 환경설정은 여러가지
편집기에서도 설정이 가능한데
저는 VSCode를 기준으로 설정하겠습니다.
Visual Studio Code
vscode의 공식 확장명은 vecode_deno입니다.
설치가 완료 되면 Deno CLI에 내장된
언어 서버에 연결됩니다.
대부분의 사용자가 혼합된 환경에서
작업 하기 때문에 확장에서는 기본적으로
Deno를 사용하도록 설정된 작업 공간을
사용할 수 는 없으며 "deno.enable"플래그를
직접 설정해야 합니다.
직접 설정을 변경하거나 Deno(거부)를
선택할 수 있습니다.
프로젝트를 활성화 하려면 명령 팔레트에서
작업 공간 구성을 초기화 해야 합니다.
쉘 설정하기
Deno CLI에는 CLI 자체에 대한 셸 완료 정보를
생성하는 기능이 내장되어 있습니다.
Deno CLI는 deno completions <shell>을
사용하여 완료를 stdout 하도록 출력합니다.
아래는 현재 지원하는 Shell 목록입니다.
- bash
- elvish
- fish
- powershell
- zsh
bash example
해당 코드를 입력해 환경을 추가해 줍니다.
> deno completions bash > /usr/local/etc/bash_completion.d/deno.bash
> source /usr/local/etc/bash_completion.d/deno.bash
PowerShell
> deno completions powershell >> $profile
> .$profile
zsh
먼저 deno 환경 변수 설정을 저장할
디렉토리가 필요합니다.
> mkdir ~/.zsh
그 다음 아래 코드를 입력해줍니다.
> deno completions zsh > ~/.zsh/_deno
그 다음 zsh가 로드되었는지 확인합니다.
fpath=(~/.zsh $fpath)
autoload -Uz compinit
compinit -u
Deno 출력하기
이제 deno 설치가 본격적으로 마무리
되었으니 deno를 직접 출력해
보겠습니다.
Deno는 Javascript/Typescript 기반
런타임으로 웹 호환성이 있고 가능한
최신 기능을 사용합니다.
브라우저 호환성은 Deno의
Hello World 프로그램이 브라우저에서
실행할 수 있는 프로그램과
동일함을 의미합니다.
first_steps.ts라는 로컬 파일을 만들고
아래 코드 줄을 입력해줍니다.
console.log("Welcom to Deno");
그 다음 아래 명령어를 통해 Deno를
출력해 줄 수 있습니다.
deno run first_steps.ts
Deno는 또한 URL에서 스크립트를
실행할 수 있는 기능을 가지고 있습니다.
Deno는 예제 코드 라이브러리를 호스팅하며
그 중 하나는 Hello World 프로그램입니다.
호스팅된 코드를 실행하려면
다음을 수행해야 합니다.
deno run https://deno.land/std@0.103.0/examples/welcome.ts
Deno HTTP 요청
많은 프로그램이 HTTP 요청을 사용하여
웹 서버에서 데이터를 가져옵니다.
파일을 가져와 단말기에 출력하는
작은 프로그램을 작성해 봅시다.
브라우저에서와 마찬가지로
웹 표준 fetch API를 사용하여
HTTP 호출을 수행할 수 있습니다.
위에서 만든 first_steps.ts 파일에서
아래 코드를 입력해 줍니다.
const url = Deno.args[0];
const res = await fetch(url);
const body = new Uint8Array(await.res.arrayBuffer());
await Deno.stdout.write(body);
이 어플리케이션이 수행하는
작업을 살펴보자면
- 어플리케이션을 전달된 첫 뻔째 인수를
가져와 url 상수에 저장 - 지정된 URL에 요청하고 응답을 기다린 후
res 상수에 저장 - 응답 본문을 ArrayBuffer로 구문 분석하고
응답을 대기한 다음 이를 Uint8Array로 변환해
본문 상수에 저장한다. - 본문의 내용을 일정하게 stdout으로 사용
deno run first_steps.ts https://yirenlu.com/
URL을 통해서도 가능합니다.
deno run https://deno.land/std@0.176.0/examples/curl.ts https://example.com
deno run --allow-net=example.com https://deno.land/std@0.176.0/examples/curl.ts https://example.com
파일 읽기
Deno는 또한 웹에서 제공되지 않는 API를
제공합니다. 이것들은 모두 데노 글로벌에
포함되어 있고, 이러한 기본 제공 API에
대한 설명서는 /api에서 찾을 수 있습니다.
예를 들어 파일 시스템 API에는 웹 표준 양식이
없으므로 Deno는 자체 API를 제공합니다.
이 프로그램에서 각 명령줄 인수는
파일 이름으로 가정하고 파일을 열고
stdout으로 인쇄합니다.
const filenames = Deno.args;
for (const filename of filenames) {
const file = await Deno.open(filename);
await file.readTable.pipeTo(Deno.stdout.writable);
}
여기서 ReadableStream.pipeTo(writable)한 방법은
실제로 필요한 커널 -> 사용자 공간 -> 커널 복사본
이상을 만들지 않습니다. 즉, 파일에서
데이터를 읽는 동일한 메모리가 stdout에 기록되고
이는 Deno의 I/O 스트림에 대한 일반적인
설계 목표를 보여줍니다.
여기서 다시 프로그램에 --allow-read
엑세스 권한을 부여해야 합니다.
# macOS / Linux
deno run --allow-read https://deno.land/std@0.176.0/examples/cat.ts /etc/hosts
# Windows
deno run --allow-read https://deno.land/std@0.176.0/examples/cat.ts "C:\Windows\System32\Drivers\etc\hosts"
HTTP 서버에 모든 것을 통합하기
Deno의 가장 일반적인 사용 사례 중 하나로 HTTP
서버를 구축하는 것 입니다.
http_server.ts
import { serve } from "https://deno.land/std@0.157.0/http/server.ts";
const handler = async (request: Request): Promise<Response> => {
const resp = await fetch("https://api.github.com/users/denoland", {
headers: {
accept: "application/json",
},
});
return new Response(resp.body, {
status: resp.status,
headers: {
"content-type": "application/json",
},
});
};
serve(handler);
이 프로그램이 수행하는 작업은
- std/http(표준 라이브러리) 에서 http 서버 가져옴
- HTTP 서버에는 핸들러 기능 필요. 이 함수는 들어오는
모든 요청에 대해 호출됨 Response.. 핸들러 함수는
비동기적일 수 있음 (Pomise를 반환할 수 있음) - fetch URL을 가져오는 데 사용
- 핸들러에 대한 응답으로 GitHub 응답을 반환
- 마지막으로 기본 포트에서 서버를 시작하려면 server 핸들러 호출
이제 서버를 실행합니다. 네트워크 권한을
먼저 부여 해줍니다.
deno run --allow-net http_server.ts
아래 명령을 실행하면 포트 8000에서
수신 대기 중인 서버를 사용해 해당 끝점에
GET 요청을 보냅니다.
curl http://localhost:8000
참고 자료
'백엔드 > deno' 카테고리의 다른 글
[deno] deno란 무엇인가? (0) | 2023.01.31 |
---|