개요

Deno 2.0은 Node.js 창시자 **라이언 달(Ryan Dahl)**이 Node.js의 구조적 한계를 인정하고 처음부터 다시 설계한 현대 웹 JavaScript/TypeScript 런타임. “Node”의 철자를 재배열한 이름(Anagram). Deno 2.0에서 Node.js/npm 호환성을 대폭 강화하면서도 보안·TypeScript·ESM 기본 지원 등 초기 철학 유지. “Node.js의 대체가 아닌, 미해결 문제를 개선한 현대적 런타임”.

  • 공식: https://deno.land
  • 출시: Deno 1.0 (2020), Deno 2.0 (2024.10)
  • 개발: Deno Land Inc.
  • 언어: Rust
  • 출처 영감: yozm.wishket.com (김승빈, 2025-02)

Node.js의 7가지 태생적 한계 (라이언 달 자가 비판)

Node.js 창시자 본인이 “10 Things I Regret About Node.js” 발표에서 지적한 문제들:

1. Promise 미지원

Node.js 초기: Promise를 제거 → 콜백 지옥 발생

// 콜백 지옥
fs.readFile('a.txt', (err, data) => {
  fs.readFile('b.txt', (err, data2) => {
    fs.readFile('c.txt', (err, data3) => {
      // ...
    });
  });
});

Deno: 모든 API가 Promise 기반
const data = await Deno.readTextFile('example.txt');

2. 보안 부족

Node.js:
  V8의 강력한 샌드박스 미활용
  모든 스크립트가 파일·네트워크 무제한 접근
  → npm 의존성도 전체 시스템 접근 가능 ⚠️

Deno:
  기본 모든 접근 차단 (Secure-by-Default)
  명시적 권한 부여 필수:
  deno run --allow-read --allow-net script.ts

3. 빌드 시스템 (GYP)

Chrome: GYP → GN 전환
Node.js: GYP 유지 (Python 기반, 직관적이지 않은 문법)
Deno: Rust 크레이트 기반 (rusty_v8)

4. package.json 비대화

license, repository 등 불필요 메타데이터 누적
중앙화된 npm 저장소 의존 → 생태계 독립성 훼손

5. node_modules 복잡성

계층적 탐색 → 모듈 해석 알고리즘 복잡
프로젝트 규모 ↑ → 관리 난이도 ↑
node_modules 폴더 크기: 수백 MB 흔함

6. 확장자 생략

require("module")  // .js 생략 허용 → 모호성
브라우저 방식과 불일치

7. index.js 자동 진입점

불필요한 파일시스템 탐색 증가
package.json main과 중복

Deno의 해결책

Node.js 문제Deno 해결
콜백 지옥모든 API Promise 기반
보안 부재Secure-by-Default (명시적 권한)
GYP 빌드Rust 크레이트 (rusty_v8)
package.jsonURL 기반 모듈 + deno.json
node_modulesURL 직접 로딩 (캐시)
확장자 생략확장자 필수
index.js명시적 진입점
JS만TypeScript 기본 지원

Deno 2.0 핵심 업데이트

1. Node.js/npm 호환성 강화 ⭐

Deno 1.x: "npm은 필요 없다" → 생태계 격리
Deno 2.0: "npm도 지원한다" → 현실적 전환

지원:
  ✅ package.json 인식
  ✅ node_modules 지원
  ✅ npm 워크스페이스
  ✅ 기존 Node.js 라이브러리 대부분 호환

2. 의존성 관리

deno install          # 의존성 자동 설치
deno add @std/http    # 의존성 추가
deno remove @std/http # 의존성 제거

3. 워크스페이스 & 모노레포

// deno.json
{
  "workspace": ["./packages/api", "./packages/web"]
}

4. 내장 도구 (올인원)

도구Node.js (별도 설치)Deno (내장)
포매터Prettierdeno fmt
린터ESLintdeno lint
테스트Jest/Vitestdeno test
타입체크tscdeno check
번들러webpack/esbuilddeno compile
태스크npm scriptsdeno task

하나의 바이너리로 전체 도구 체인

5. JSR (JavaScript Registry)

npm의 대안: 현대적 패키지 레지스트리
  - TypeScript 네이티브 지원
  - ESM 전용
  - 크로스 런타임 (Deno + Node.js + Bun)
  - https://jsr.io

6. 안정화된 표준 라이브러리

import { serve } from "https://deno.land/std/http/server.ts";
import { parse } from "https://deno.land/std/flags/mod.ts";

Node.js vs Deno 2.0 비교

항목Node.jsDeno 2.0
창시자Ryan DahlRyan Dahl (같은 사람)
출시20092020 (1.0), 2024 (2.0)
언어C++Rust
보안모든 접근 허용Secure-by-Default
TypeScript설정 필요기본 지원
모듈CommonJS + ESMESM 기본
패키지npm (node_modules)URL + npm 호환
도구각각 설치 (6+)올인원 내장
생태계최대 (2M+ 패키지)npm 호환 + JSR
속도빠름비슷~빠름
성숙도최고성장 중

개발자 우려

"Deno의 초기 철학이 희석될 수 있다"

우려:
  - Node.js 호환 강화 → 보안·간결함 저해?
  - package.json·node_modules 지원 = 원래 거부한 것 수용
  - "Node.js와 뭐가 다른 거지?" 정체성 혼란

Deno 팀 반론:
  - 호환성 = 실용적 전환 경로
  - 보안·TypeScript·내장 도구 등 핵심 철학은 유지
  - npm 지원은 선택사항이지 강제 아님

3대 JS 런타임 비교

항목Node.jsDenoBun
출시200920202022
언어C++RustZig
TS 지원설정 필요기본기본
보안없음Secure-by-Default없음
속도기준비슷가장 빠름
생태계최대npm 호환npm 호환
내장 도구없음올인원부분
사용자가장 많음성장 중급성장

→ 관련: JavaScript 런타임 비교


Deno 사용 예시

HTTP 서버

Deno.serve({ port: 8000 }, (req: Request) => {
  return new Response("Hello from Deno 2.0!");
});

파일 읽기 (Promise 기반)

const text = await Deno.readTextFile("./data.json");
const data = JSON.parse(text);
console.log(data);

권한 제어 실행

# 읽기 + 네트워크만 허용
deno run --allow-read --allow-net server.ts
 
# 환경변수 접근 허용
deno run --allow-env app.ts
 
# 모든 권한 (개발용)
deno run -A app.ts

누구에게 적합한가?

적합부적합
새 프로젝트 시작기존 대규모 Node.js 마이그레이션
TypeScript 우선CommonJS 레거시 다수
보안 중시 (의존성 감사)npm 생태계 100% 의존
올인원 도구 원함기존 ESLint·Prettier 설정 유지
최신 웹 표준 (Fetch, URL 등)엔터프라이즈 안정성 최우선

의의

1. "창시자가 자기 작품을 비판하고 다시 만들었다"
   - 기술 겸손의 모범 사례
   - Node.js의 10가지 후회 → Deno로 해결

2. Secure-by-Default의 가치
   - npm 공급망 공격 빈번한 시대
   - 기본 접근 차단 = 보안 패러다임 전환

3. TypeScript = 새로운 기본
   - 설정 없이 바로 사용
   - 타입 안전성이 기본인 런타임

4. 올인원 도구 체인 트렌드
   - 포매터·린터·테스트·번들러 내장
   - 별도 설치·설정 시간 제거
   - [[Rob Pike 프로그래밍 5가지 규칙]] 규칙 4: "단순함이 답"

관련 항목