Node 가 표준 — 모든 npm 호환. Bun = 빠른 빌드 + 호환, Deno = 보안 + 표준 web API + JSR 레지스트리. 프로덕션 = Node 디폴트, 새 프로젝트 = Bun 시도 가치.
📖 핵심 개념
Node: V8 + libuv. 가장 호환.
Bun: Zig + JSC. 빠른 install / test / bundler 내장.
Deno: V8 + Rust. 권한 모델 + Web 표준 + JSR.
모두 TS native (Bun, Deno) 또는 tsx 필요 (Node).
💻 코드 패턴
Bun
# install
bun install
bun add zod
bun add -d typescript
# 실행
bun run src/index.ts
bun --watch src/index.ts
# test
bun test# bundler
bun build src/index.ts --outdir dist --target node
// Bun.serve (built-in HTTP)
Bun.serve({port: 3000,fetch(req){consturl=newURL(req.url);if(url.pathname==='/health')returnnewResponse('ok');returnnewResponse('not found',{status: 404});},});// SQLite native
import{Database}from'bun:sqlite';constdb=newDatabase('app.db');db.query('SELECT * FROM users WHERE id = ?').get(id);
Deno
# install (per import)
deno run --allow-net main.ts
# permission flags
deno run --allow-net --allow-read=./data --allow-env main.ts
deno run -A main.ts # all (개발용)# tasks
deno task dev
// imports — URL 또는 JSR / npm
import{z}from'npm:zod@3';import{serve}from'jsr:@std/http';import_from'https://esm.sh/lodash@4';// 권한 명시 API
constdata=awaitDeno.readTextFile('./data.json');// --allow-read
Deno.serve({port: 3000},(req)=>newResponse('hi'));
Web 표준 (모두 공유)
// 표준 API — Node 18+, Bun, Deno 모두 동일
constr=awaitfetch('https://api.example.com');consttext=awaitr.text();addEventListener('fetch',e=>e.respondWith(handle(e.request)));
Node compat (Bun)
// 거의 모든 npm 호환
importexpressfrom'express';// OK
import{createServer}from'http';// OK
import{db}from'pg';// OK (native binding 일부 issue)