개요
JavaScript/TypeScript 런타임은 브라우저 밖에서 JS를 실행하는 환경입니다. Node.js가 사실상 표준이었으나, Deno와 Bun이 각각 보안과 속도를 앞세워 대안으로 부상했습니다.
3대 런타임
Node.js
| 항목 | 내용 |
|---|
| 창시자 | Ryan Dahl (2009) |
| 엔진 | V8 (Chrome) |
| 언어 | C++ |
| 패키지 | npm (2M+ 패키지) |
| 특징 | 가장 큰 생태계, 최고 안정성, LTS |
- 사실상 서버 JS의 표준
- Express, Fastify, Nest.js 등 풍부한 프레임워크
- 모든 클라우드 플랫폼 완벽 지원
| 항목 | 내용 |
|---|
| 창시자 | Ryan Dahl (2018, Node.js 반성에서 출발) |
| 엔진 | V8 |
| 언어 | Rust |
| 패키지 | JSR + npm 호환 |
| 특징 | 퍼미션 기반 보안, 내장 도구 최다, Web Standard API |
--allow-net, --allow-read 등 세밀한 보안 제어
- fmt, lint, test, bench, compile, doc 모두 내장
- Deno Deploy (엣지 서버리스), Fresh (웹 프레임워크) 생태계
| 항목 | 내용 |
|---|
| 창시자 | Jarred Sumner (2022, Oven) |
| 엔진 | JavaScriptCore (Safari) |
| 언어 | Zig |
| 패키지 | npm 호환 (내장) |
| 특징 | 최고 속도, 올인원 (런타임+번들러+패키지매니저+테스트) |
- Node.js 드롭인 대체 목표
bun install npm 대비 10~30배 빠름
bun build --compile로 단일 바이너리
성능 비교
Node.js = 1.0x 기준
| 항목 | Node.js | Deno | Bun |
|---|
| HTTP req/s | 14,000 (1.0x) | 29,000 (2.1x) | 52,000 (3.7x) |
| Cold Start | 60~120ms | 40~60ms | 8~15ms |
| 패키지 설치 | 1.0x | 빠름 | 10~30x |
| 번들링 | 1.0x (Webpack) | - | ~50x |
| 테스트 실행 | 1.0x (Jest) | 빠름 | 10~30x |
기능 비교
| 기능 | Node.js | Deno | Bun |
|---|
| TypeScript | ts-node/tsx 필요 | 네이티브 | 네이티브 |
| 보안 모델 | 없음 | 퍼미션 샌드박스 | 없음 |
| 패키지 매니저 | npm (별도) | deno add + npm | 내장 |
| 번들러 | 별도 (Webpack 등) | 없음 | 내장 |
| 포매터 | Prettier (별도) | deno fmt | 없음 |
| 린터 | ESLint (별도) | deno lint | 없음 |
| 테스트 러너 | Jest 등 (별도) | deno test | bun test |
| 벤치마크 | 별도 | deno bench | 없음 |
| 컴파일 (바이너리) | pkg (별도) | deno compile | bun build —compile |
| 문서 생성 | TypeDoc (별도) | deno doc | 없음 |
| 보안 감사 | npm audit | deno audit | 없음 |
| Web Standard API | 부분 | 완전 | 부분 |
| SQLite 내장 | 별도 패키지 | 없음 | bun:sqlite |
| FFI | N-API | deno ffi | bun:ffi |
호환성 비교
| 항목 | Node.js | Deno | Bun |
|---|
| npm 패키지 | 100% | ~90% | ~95% |
| CommonJS | O | O | O |
| ES Modules | O | O | O |
| package.json | O | O | O |
| node_modules | O | O | O |
| Node.js 내장 모듈 | 100% | 대부분 | 대부분 |
| C++ 애드온 (N-API) | O | 부분 | O |
| Express/Fastify | O | O | O |
| Next.js | O | 실험적 | 실험적 |
생태계 비교
| 항목 | Node.js | Deno | Bun |
|---|
| 패키지 레지스트리 | npm (2M+) | JSR + npm | npm |
| 웹 프레임워크 | Express, Fastify, Nest.js | Fresh | Hono, Elysia |
| 엣지 배포 | Vercel, AWS Lambda | Deno Deploy | - |
| 프레임워크 지원 | Next.js, Nuxt, Remix | Fresh, Astro | Next.js (실험), Astro |
| GitHub Stars | 112k | 106k | 76k |
| LTS | O (짝수 버전) | O (2.0+) | 미확정 |
각 런타임의 철학
| 런타임 | 철학 |
|---|
| Node.js | ”검증된 안정성” — 가장 큰 생태계, 최고의 호환성 |
| Deno | ”올바른 설계” — 보안, 표준, 도구 통합 |
| Bun | ”극한의 속도” — 모든 것을 빠르게 |
선택 가이드
| 상황 | 추천 |
|---|
| 프로덕션 안정성 최우선 | Node.js |
| 대규모 팀, 기존 코드베이스 | Node.js |
| 보안 민감 서버 | Deno (퍼미션 샌드박스) |
| TypeScript 설정 없이 시작 | Deno or Bun |
| 내장 도구로 의존성 최소화 | Deno (fmt, lint, test, bench, doc 모두 내장) |
| 엣지 서버리스 | Deno (Deno Deploy) |
| 최고 성능 / 빠른 시작 | Bun |
| 빠른 패키지 설치 | Bun |
| CLI 도구 배포 (단일 바이너리) | Deno or Bun |
| Node.js 드롭인 대체 | Bun |
| 새 프로젝트 (소규모) | Bun or Deno |
경량 / 임베디드 런타임
txiki.js
- Web Platform APIs (
fetch, WebSocket, setTimeout, Crypto) 내장
- TCP/UDP/HTTP 서버, WebSocket 내장
- SQLite, FFI, 해싱 표준 라이브러리
tjs compile → 단일 바이너리 컴파일
- WinterTC (서버 JS 호환성 표준) 준수
- 목표: 임베딩/경량 환경 (IoT, 엣지, 스크립팅)
QuickJS는 FFmpeg 창시자 Fabrice Bellard가 만든 초소형 JS 엔진
엔진 비교
| 런타임 | 엔진 | 특징 |
|---|
| Node.js / Deno | V8 | 최고 성능, 가장 큰 JIT |
| Bun | JavaScriptCore | 빠른 시작, 애플 생태계 |
| txiki.js | QuickJS | 초소형, 임베딩 최적 |
2025~2026 트렌드
- Node.js: TypeScript 네이티브 지원 실험 (
--experimental-strip-types), 안정성 유지
- Deno: npm 호환성 90%+ 달성, JSR 생태계 성장, Deno 2.x LTS
- Bun: Windows 안정화, 프로덕션 채택 증가, 번들러/컴파일러 고도화
- 공통: OpenAI 호환 API, MCP 프로토콜, AI 에이전트 런타임으로의 확장
관련 항목