Deno v2가 출시되었습니다! - Deno v1.0.0부터의 변화와 현재의 실무 관행
Deno v2가 정식으로 출시되었습니다
이번 글에서는 Deno v1.0.0 출시 시점부터 Deno v2.0.0까지의 주요 변화와 실무에서의 적용 사례를 정리해 보겠습니다.
Go 스타일 API의 변화 - 웹 표준 준수 강화
Deno v1.0.0 당시의 API 설계
Deno v1.0.0 시점의 API와 명령어들은 Go의 영향을 많이 받았습니다.
예를 들어:
- 다양한 리소스에 대한 IO 인터페이스 (Deno.Reader/Deno.Writer)
deno run
명령어 (스크립트 실행기)deno fmt
명령어 (포매터)deno doc
명령어 (API 문서화 도구)deno test
명령어 (테스트 실행기)
Deno는 초기부터 웹 표준 준수를 중요하게 생각했지만, 웹 표준으로 커버할 수 없는 부분은 Go를 참고한 경우가 많았습니다.
이는 초기 Deno가 Go로 구현된 것과도 관련이 있을 것입니다.
웹 표준 준수 강화
Deno v1.0.0 이후, 웹 표준 준수를 더욱 강화하려는 움직임이 있었습니다.
예를 들어, Deno에서 파일을 나타내는 객체인 Deno.FsFile은 현재 웹 스트림 API를 기반으로 설계되었습니다:
import { CsvParseStream } from "@std/csv/parse-stream";
{
using f = await Deno.open("test.csv");
const stream = f.readable
.pipeThrough(new TextDecoderStream())
.pipeThrough(
new CsvParseStream({
columns: ["id", "name", "age"],
skipFirstRow: true,
}),
);
for await (const row of stream) {
console.info(row);
}
}
Deno의 표준 라이브러리인 deno_std에서도 이러한 변화가 나타나며, 현재 다양한 기능이 웹 스트림 API를 기반으로 제공됩니다.
예를 들어:
- CsvParseStream (std/csv)
- JsonParseStream (std/json)
- UntarStream (std/tar)
Deno.Reader/Deno.Writer의 폐지
Deno v2에서는 Deno.Reader, Deno.Writer, Deno.Closer 등의 타입이 폐지되었습니다.
하지만 Deno.TcpConn이나 Deno.FsFile 같은 객체에서는 여전히 read()
나 write()
메서드를 구현하고 있습니다.
현재는 std/io/types.ts에서 Reader나 Writer 인터페이스를 제공합니다.
설정 파일 도입 (deno.json)
Deno는 초기부터 설정 파일 없이도 사용할 수 있는 특징이 있었지만, Deno v1.0.0 이후 deno.json 설정 파일이 도입되었습니다.
이 파일은 JSONC 형식을 지원하며, TypeScript의 compilerOptions 설정, deno fmt와 deno lint 명령어 조정 등을 포함할 수 있습니다.
// deno.json
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
// deno.jsonc
{
"lint": {
"rules": {
"include": [
"no-console"
]
}
}
}
의존성 관리
Deno v1.0.0에서는 다양한 방법으로 의존성을 관리했으나, Deno v2에서는 본체에 패키지 관리자가 통합되었습니다.
Import maps를 deno.json에 정의하여 의존성을 관리할 수 있습니다.
// deno.json
{
"imports": {
"@std/csv": "jsr:@std/csv@^1"
}
}
JSR 패키지와 npm 패키지 모두 관리할 수 있으며, deno add
, deno install
, deno remove
명령어를 통해 패키지를 추가, 설치, 제거할 수 있습니다.
Node.js 호환성
Deno v2에서는 Node.js와의 호환성이 강화되었습니다.
npm 패키지를 직접 사용할 수 있으며, node:
접두사를 통해 Node.js의 내장 모듈을 불러올 수 있습니다.
import { EventEmitter } from "node:events";
const emitter = new EventEmitter();
또한, package.json을 지원하여 npm 패키지를 설치하고 사용할 수 있습니다.
타입 체크
Deno v2에서는 deno run
명령어가 기본적으로 타입 체크를 수행하지 않습니다.
대신, deno check
명령어가 도입되어 타입 체크를 수행할 수 있습니다.
$ deno check mod.ts
테스트
Deno v2에서는 deno test --doc
명령어를 통해 JSDoc 주석이나 Markdown 파일의 코드 스니펫을 실행할 수 있습니다.
또한, BDD 형식의 테스트 작성이 가능합니다.
import { describe, it } from "jsr:@std/testing@1/bdd";
import { expect } from "jsr:@std/expect@1";
import { sum } from "./sum.js";
describe("sum", () => {
it("should return sum of given numbers", () => {
expect(sum(2, 3, 4)).toBe(9);
});
it("should return 0 if no arguments are given", () => {
expect(sum()).toBe(0);
});
});
기타 기능
Deno v2에서는 로컬 저장소, FFI, WebGPU API, Jupyter와의 통합 등 다양한 기능이 추가되었습니다.
특히, WebGPU API를 활용한 고성능 렌더링 기능이 주목받고 있습니다.
결론
Deno v1의 출시부터 Deno v2까지 약 4년 반이 지났으며, 많은 변화와 개선이 있었습니다.
특히 웹 표준 준수와 Node.js 호환성 강화, 의존성 관리 도구의 도입 등이 주요 변화로 꼽힙니다.
앞으로도 Deno의 발전을 기대해 봅니다.
'Javascript' 카테고리의 다른 글
Next.js 15의 혁신적인 캐시 기능 (0) | 2024.10.30 |
---|---|
잘 모르는 JavaScript와 파생 언어의 세계 (1) | 2024.10.18 |
최신 React 폴더 구조: 5단계로 쉽게 알아보는 리액트 프로젝트 구성법 (1) | 2024.10.18 |
Next.js에서 알아보는 서버 컴포넌트, 클라이언트 컴포넌트, 정적/동적 라우트 & 캐싱 (2) | 2024.10.18 |
모두가 기다리던 XState 완벽 가이드: 시작부터 실전까지 (0) | 2024.09.21 |