Bun 1.4, Rust 재작성과 내장 기능 대확장
출처: Bun Blog (Jarred, Ciro, Dylan, Alistair & Sosuke)
원문: https://bun.com/blog/bun-v1.4
원문 발행일: 2026-08-20
작성자: 팔복소프트-김팔복
한눈에 보기
- Bun 1.4가 출시됐고, 런타임 전체가 Zig에서 Rust로 재작성됐다.
- Node.js 테스트 스위트 통과가 1,517개 늘었다. Bun 1.0 이후 가장 큰 호환성 개선 폭이다.
- Playwright, Next.js 16, vitest, OpenTelemetry, dd-trace가 이제 Bun 위에서 동작한다.
- HTTP 서버 메모리 사용량이 13~48% 줄고, Linux에서 시작 시간이 5.1ms로 절반 이하가 됐다.
- sharp, node-cron, concurrently, tar 등 15개 인기 npm 패키지를 대체하는 기능이 런타임에 내장됐다.
bun audit fix,bun dedupe,bun prune등 패키지 관리 명령이 추가됐다.- TLS 검증 기본값이 강화돼, 1.3에서 되던 연결이 1.4에서 인증서 오류로 실패할 수 있다.
배경
Bun은 Node.js를 대체하는 것을 목표로 하는 JavaScript/TypeScript 런타임으로, 런타임·패키지 매니저·번들러·테스트 러너를 하나의 바이너리에 담고 있습니다. 지금까지는 Zig 언어로 작성돼 있었는데, 이번 릴리스부터 Rust 코드가 배포됩니다. Claude Code가 이미 수개월간 Rust 포트 위에서 돌아가고 있었다고 하니, 언어 전환 자체는 어느 정도 검증을 거친 셈입니다.
주요 내용
Node.js 호환성: "이제 진짜 돌아가는" 생태계
이번 릴리스의 무게중심은 신기능보다 호환성입니다. Node.js 26 테스트 스위트에서 1,517개 테스트가 추가로 통과하게 됐고, node:http, node:fs, node:stream 등 핵심 모듈이 Node 자체 테스트의 97%를 통과합니다. node:sqlite와 node:events는 100%입니다.
실무 관점에서 더 와닿는 건 패키지 단위 소식입니다. Playwright로 E2E 테스트를 돌리고, Next.js 16.3을 Turbopack으로 빌드하고, vitest를 커버리지 옵션까지 켜서 실행하는 게 전부 Bun에서 됩니다. OpenTelemetry와 dd-trace 같은 APM 계측도 동작합니다. 그동안 "Bun은 빠른데 우리 스택이 안 돌아간다"가 도입을 막는 가장 큰 벽이었는데, 그 벽이 눈에 띄게 낮아졌습니다.
성능: 서버 메모리와 유휴 CPU
프로덕션 지표 개선이 구체적입니다. Fastify 기준 부하 테스트 피크 메모리가 233MB에서 120MB로 48% 줄었고, Express는 46%, Next.js는 28% 감소했습니다. 유휴 상태 CPU 사용량은 5분의 1로 줄었는데, Bun 기반 대형 애플리케이션인 Claude Code에서 p99 CPU가 24%에서 10%로 떨어졌다는 실측치를 함께 공개했습니다. Linux에서 시작 시간은 5.1ms로, Node.js 26의 27.2ms와 비교하면 5배 이상 빠릅니다.
메모리 개선의 핵심은 할당자 통합입니다. 기존에는 JavaScriptCore용과 런타임용 두 개의 할당자를 쓰다가, mimalloc 하나로 합치고 유휴 시간에 메모리를 반환하는 스캐빈저 스레드를 붙였습니다.
내장 표준 라이브러리: npm 패키지 15개를 대체
이번 릴리스에서 가장 논쟁적일 부분입니다. 자주 쓰는 npm 패키지들의 기능이 런타임에 직접 들어왔습니다.
| 내장 기능 | 대체하는 npm 패키지 | 용도 |
|---|---|---|
Bun.Image |
sharp | 이미지 리사이즈·포맷 변환 |
Bun.WebView |
puppeteer, playwright | 헤드리스 브라우저 자동화 |
Bun.markdown |
marked | 마크다운 → HTML/React |
Bun.cron() |
node-cron | 예약 작업 (OS 스케줄러 연동) |
Bun.Terminal |
node-pty | PTY 제어 |
bun run --parallel |
concurrently, npm-run-all | 스크립트 병렬 실행 |
| 정적 파일 라우트 | serve-static | 디렉터리 서빙 (Range, ETag 자동 처리) |
Bun.XML, Bun.JSON5, Bun.Archive |
fast-xml-parser, json5, tar | 파싱·압축 |
전부 별도 설치나 네이티브 빌드 없이 바이너리에 포함됩니다. Bun.Image는 sharp보다 최대 1.38배 빠르다고 하고, API 형태도 sharp와 유사합니다. 단, Bun.markdown의 HTML 출력은 sanitize되지 않으므로 사용자 입력을 렌더링한다면 별도 처리가 필요합니다.
테스트와 패키지 관리
bun test에 --parallel(워커 병렬 실행), --shard(CI 머신 분할), --changed(diff에 영향받는 테스트만 실행)가 추가됐습니다. 특히 --isolate가 파일마다 새 전역 객체를 만들어 Jest/Vitest의 기본 동작과 같아졌기 때문에, "단독으로는 통과하는데 전체 스위트에서 깨지는" 유형의 버그가 사라집니다.
패키지 관리 쪽에서는 bun audit fix(취약 패키지 자동 업그레이드), bun dedupe(중복 버전 정리), bun prune --production(devDependencies 제거), 그리고 두 버전 간 실제 코드 변경을 보여주는 bun pm diff가 추가됐습니다. 공급망 보안 이슈가 잦은 요즘, 설치 전에 패키지 diff를 확인하는 워크플로가 표준 도구만으로 가능해진 점은 의미가 있습니다.
업그레이드 시 주의할 것
1.4는 breaking change가 적지 않은 릴리스입니다. 특히 확인할 항목:
- Node.js 26으로 리포트되면서
NODE_MODULE_VERSION이 147로 바뀝니다. 네이티브 애드온을 쓰는 패키지는 147용 빌드가 필요합니다. - TLS 검증 기본값이 전반적으로 강화됐습니다.
Bun.connect와tls.connect가 인증서 검증을 기본으로 수행하므로, self-signed 인증서를 쓰는 내부 서버 연결이 1.4에서 갑자기 실패할 수 있습니다. node심볼릭 링크나bun --bun으로 실행하면.env를 자동 로딩하지 않습니다(Node와 동일한 동작).Bun.YAML이 YAML 1.2를 따르면서yes/no/on/off가 불리언이 아닌 문자열로 파싱됩니다.- 새 모노레포는 isolated 링커(pnpm식 심링크 구조)가 기본이 됩니다. 기존 프로젝트는 영향 없습니다.
HTTP/3 지원도 들어왔지만 실험 단계이며, 원문에서도 프로덕션 사용은 아직 말리고 있습니다.
팔복소프트 관점
- 국내 백엔드는 여전히 Node.js + NestJS/Express 조합이 주류이고, 최근 pnpm 전환이 활발합니다. 이 흐름에서 Bun 1.4가 노리는 지점은 명확합니다. isolated 링커 기본화는 pnpm 사용자를,
--parallel·audit fix·dedupe는 npm/yarn의 익숙한 워크플로를 각각 겨냥한 구성입니다. "런타임은 아직 못 바꿔도 패키지 매니저와 CI 테스트 러너로는 지금 써볼 만하다"는 게 편집자의 판단입니다. CI에서 warm cache 설치가 210ms라는 수치는 국내처럼 배포 빈도가 높은 조직에서 체감 차이가 큽니다. Bun.Image는 특히 반갑습니다. sharp는 Docker(특히 Alpine) 환경에서 네이티브 바이너리 문제로 국내 팀들이 자주 씨름하는 패키지인데, 런타임 내장이면 그 계층 자체가 사라집니다. 다만 내장 API를 쓰는 순간 Node.js로 돌아갈 길이 사실상 막힌다는 점은 계산에 넣어야 합니다. sharp 호환 API가 아니라 "sharp와 비슷한" API이기 때문입니다.- TLS 기본값 강화는 방향은 옳지만, 사내망에 self-signed 인증서로 Redis·DB를 운영하는 국내 기업 환경에서는 1.3 → 1.4 업그레이드 직후 연결 장애로 나타날 가능성이 높습니다. 스테이징에서 DB/Redis/내부 API 연결부터 검증하고 올리길 권합니다.
- Rust 재작성 자체는 사용자가 당장 체감할 변화가 아닙니다. 다만 Zig 대비 채용 가능한 기여자 풀과 생태계가 훨씬 크다는 점에서, 프로젝트의 장기 유지보수 리스크를 줄이는 결정으로 읽힙니다.
- 프로덕션 API 서버를 통째로 옮기는 건 여전히 신중해야 합니다. 97% 호환이라는 건 뒤집으면 3%는 안 된다는 뜻이고, 그 3%가 어느 의존성에서 터질지는 돌려보기 전까지 모릅니다.
정리
Bun 1.4는 "빠르지만 호환성이 불안한 대안"에서 "주류 스택이 실제로 돌아가는 런타임"으로 넘어가려는 릴리스입니다. 기억할 것은 세 가지입니다. Playwright·Next.js·vitest 등 핵심 생태계가 돌아가기 시작했다는 것, npm 패키지 15개 분량의 기능이 내장돼 의존성을 줄일 수 있다는 것, 그리고 TLS·Node 26 관련 breaking change 때문에 업그레이드 전 스테이징 검증이 필수라는 것입니다. 신규 프로젝트나 CI 파이프라인부터 단계적으로 적용해 보는 접근을 권합니다.
- Bun
- JavaScript
- Node.js
- 런타임
- Rust
아직 댓글이 없습니다.