핵심 요약
Bun은 Zig로 작성된 JavaScript/TypeScript 런타임 + 패키지 매니저 + 번들러 통합 도구다. 1.2에서 Node API 호환성이 95%에 달했다.
- 스타트업: Node 대비 3~4배 빠름
- HTTP 서버 처리량: 약 2배 (단순 벤치 기준)
- install 속도: pnpm 대비 2배, npm 대비 20배+
- TypeScript 직접 실행 (ts-node 불필요)
실전 벤치마크 (간이)
| 항목 | Node 22 | Bun 1.2 |
|---|---|---|
| Cold start | 180ms | 45ms |
| HTTP req/s (hello) | ~120k | ~240k |
| npm install (medium) | 38s | 1.8s |
| 테스트 러너 | jest 14s | bun test 2.1s |
주의: 벤치마크는 워크로드에 따라 편차가 크다. DB·네트워크 바운드면 격차가 줄어든다.
호환성 체크리스트
- 지원: Express, Fastify, Prisma, Next.js(SSR), Nest, Vite
- 주의: native addon(.node) 일부 비호환, worker_threads 부분 지원
- 비호환: ts-node 특정 플래그, 일부 jest 커스텀 리포터
마이그레이션 5단계
1) package.json scripts 교체
{
"scripts": {
"dev": "bun run --watch src/index.ts",
"test": "bun test",
"build": "bun build src/index.ts --outdir=dist"
}
}
2) lock 파일 전환
rm package-lock.json node_modules -rf
bun install
3) 네이티브 의존성 점검
bcrypt, sharp, canvas 등은 호환 대안을 확인. 대부분 Bun-native 버전 존재.
4) CI 파이프라인
- uses: oven-sh/setup-bun@v1
with:
bun-version: 1.2
- run: bun install
- run: bun test
5) 프로덕션 검증
카나리 배포로 10~20% 트래픽부터. 메모리·GC·p99 지연 모니터링.
Bun 고유 기능
bun --hot src/index.ts— 상태 유지 HMRbun:sqlite— 내장 SQLite (빠름)Bun.serve({ fetch })— 웹 표준 fetch 핸들러 기반 서버- 단일 바이너리로 빌드:
bun build --compile
언제 안 쓰는 게 좋나
- 네이티브 애드온 깊게 의존하는 레거시
- 서버리스(AWS Lambda)에서 공식 런타임 필요
- 기업 보안상 공식 승인 런타임만 허용되는 경우
자주 묻는 질문
Next.js 프로덕션에서 써도 되나?
SSR·App Router 기본 기능은 동작. 단, 이미지 최적화·특정 플러그인에서 fallback 필요할 수 있어 스테이징 검증 필수.
Deno와의 차이?
Deno는 보안 샌드박스 + 웹 표준 강조, Bun은 속도 + Node 호환성 강조. 마이그레이션 난이도는 Bun이 낮다.
댓글 0