핵심 요약
2025년 12월 Anthropic의 Bun 인수 이후 Bun은 Claude Code의 코어 인프라가 됐다. 라이선스는 그대로 MIT, 인적 자원·로드맵 안정성은 크게 올랐다. 1.2 릴리스로 node:cluster·http2·dgram 호환성이 90% 넘어섰다.
- HTTP 처리량: ~120K req/s (Node ~45K)
- Lambda 콜드스타트: 290ms (Node 940ms, -69%)
- npm install: 2~3초 (npm 30~45초, 20~40배)
- TypeScript·JSX 네이티브 실행 (트랜스파일러 불필요)
1. 무엇이 그렇게 빠른가
Bun은 V8 대신 JavaScriptCore(Safari 엔진), Zig로 작성. 패키지 매니저는 병렬 다운로드 + binary lockfile.
| 항목 | Bun 2.0 | Node.js 24 |
|---|---|---|
| HTTP RPS (간단) | ~120K | ~45K |
| Lambda 콜드스타트 | 290ms | 940ms |
| 크기 (binary) | ~60MB | ~80MB |
| TypeScript 네이티브 | ✓ | X (--experimental-strip-types) |
| 테스트 러너 | 내장 (Jest 호환) | node:test |
| 번들러 | 내장 | X |
| 워커 클러스터 | node:cluster (1.2) | node:cluster |
| 장기 실행 안정성 | 72h+ 시 가끔 문제 | 매우 안정 |
2. 즉시 마이그레이션이 이득인 케이스
서버리스 (Lambda·Cloudflare·Vercel)
콜드스타트 -69%는 측정 가능한 사용자 경험 차이. 트래픽 스파이크에서 결정적.
CI/CD 파이프라인
# GitHub Actions에서
- run: bun install # 30초 → 2초
- run: bun run build
- run: bun test # 별도 jest 설치 불필요
# 평균 빌드 시간 30~50% 단축모노레포 install
5,000개 의존성 모노레포 → npm 8분, Bun 25초.
3. 마이그레이션 보류해야 하는 케이스
- 장기 실행 프로세스 — 72시간+ 메모리 누수 사례 보고. V8 GC가 더 검증됨
- 네이티브 C++ addon 의존 — node-gyp 빌드 모듈 일부 미지원
- 관측성·APM — Datadog/New Relic의 Node 통합이 더 풍부
- 엔터프라이즈 SLA — Node는 OpenJS Foundation, Bun은 Anthropic(상업 회사)
- 오래된 의존성 — 일부 deprecated Node API 미구현
4. 단계별 도입 전략
Phase 1: 도구로만 (위험 0)
# 패키지 매니저로만 사용
bun install
bun add lodash
# package.json scripts는 그대로 npm run으로Phase 2: 개발/CI에서
# 로컬 dev·CI는 bun, 프로덕션은 Node
"scripts": {
"dev": "bun --watch src/index.ts",
"build": "bun build src/index.ts --target=node",
"start": "node dist/index.js" // 프로덕션
}Phase 3: 비크리티컬 서비스부터 프로덕션
로깅·뱃지 발급 같은 stateless 마이크로서비스부터. 메인 API는 마지막.
5. Node.js 호환성 함정
// 작동하지 않거나 다르게 동작하는 것들 (Bun 1.2 기준)
// 1. node:vm 일부 옵션
import vm from 'node:vm'
new vm.Script(code, { importModuleDynamically: ... }) // 주의
// 2. cluster fork mode는 OK, 하지만 IPC 메시지 size 제한 다름
// 3. node-gyp 기반 네이티브 모듈 (예: 일부 image processing)
// 권장: 프로덕션 전 호환성 테스트
bun pm trust // postinstall 스크립트 신뢰
bun --bun script.ts // 강제 Bun 런타임6. Bun 전용 API — 락인 주의
// Bun.serve() — Node로 못 옮김
Bun.serve({ port: 3000, fetch(req) { return new Response('OK') } })
// Bun.password.hash() — bcrypt보다 빠름, 하지만 Bun 종속
const hash = await Bun.password.hash('secret')
// Bun.SQL — Postgres 클라이언트, native bindings
import { sql } from 'bun'
const users = await sql`SELECT * FROM users`크로스 런타임 라이브러리(hono, itty-router) 사용 권장. Bun 전용 API는 회피하거나 추상화 레이어 두기.
7. Anthropic 인수의 의미
- Bun = Claude Code의 디폴트 런타임
- Anthropic이 풀타임 엔지니어 다수 고용 — 개발 속도↑
- Cloudflare·Vercel 등과 파트너십 강화 가능성
- 위험: 한 회사 종속(MIT 라이선스라 fork 가능하지만)
8. 비용 영향 (실측 사례)
| 워크로드 | Node 24 | Bun 2.0 | 월 절감 |
|---|---|---|---|
| Lambda 5억 호출/월 | $2,400 | $1,440 | $960 (-40%) |
| EC2 API 서버 (m5.large 5대) | $350 | $210 (3대로 충분) | $140 |
| CI 빌드 (월 5,000회 × 10분) | $200 | $80 | $120 |
9. 결정 트리
- 서버리스/엣지? → 즉시 Bun
- CI/dev 도구만? → 즉시 Bun (위험 0)
- 장기 실행 모놀리식 API? → 1년 더 관망
- Cluster·worker 무거운 워크로드? → Node 권장
- 스타트업 새 프로젝트? → Bun 권장
자주 묻는 질문
Deno와 비교?
Bun: 속도·Node 호환성. Deno: 보안 모델·표준 라이브러리. 신규 프로젝트는 Bun 점유율↑, Deno는 정체 중.
npm 호환성은 100%?
postinstall script·peerDependencies 일부 케이스 다름. bun pm trust·--no-save 등 플래그로 대부분 해결.
Anthropic 인수가 부정적 영향은?
현재까지는 긍정적(인적 자원). 잠재 위험은 Anthropic 우선순위에 휘둘릴 가능성. MIT라서 최악의 경우 fork 가능.

댓글 0