에디블로그
Engineer's Field Notes

AI 자동화로 매일
한 편씩 쓰는
엔지니어 운영 노트

Claude Code · 자동화 파이프라인 · 사고 회고까지. 잘 굴러간 기록 + 깨진 흔적도 같이 남깁니다.

사람이 할 수 있는 일은,
AI도 할 수 있어야 합니다.
매일 한 편 쓰면서 검증 중.
— 이번 주 가장 많이 읽힌 글 TOP 3
개발자 도구/터미널 & 환경

[Bun] Node와 npm을 대체하는 올인원 도구

반응형
[Bun] Node와 npm을 대체하는 올인원 도구
개발자 도구 · 터미널 & 환경

[Bun] Node와 npm을 대체하는 올인원 도구

자바스크립트로 프로젝트 하나를 굴리려면 보통 Node.js로 실행하고, npm으로 패키지를 깔고, jest로 테스트하고, webpack이나 esbuild로 번들링합니다. Bun은 이 네 가지를 단일 실행 파일 하나에 묶은 도구입니다. 무엇을 대체하는지, 어떻게 설치하고 시작하는지, 그리고 도입 전에 알아둘 한계까지 공식 문서 기준으로 정리합니다.

네 개의 도구를 하나의 바이너리로 묶었습니다

Bun은 자바스크립트와 타입스크립트 앱을 만들기 위한 올인원 툴킷입니다. 핵심은 별도 도구 네 개의 역할을 bun이라는 단일 명령어 하나가 전부 수행한다는 점입니다. 공식 문서는 Bun이 의존성 없는 단일 바이너리로 배포되며 런타임, 패키지 매니저, 테스트 러너, 번들러를 포함한다고 명시합니다.

기존에 여러 도구를 조합해 만들던 환경을 Bun 하나로 어디까지 덮을 수 있는지 정리하면 다음과 같습니다.

역할 기존에 쓰던 도구 Bun 명령어
런타임 (코드 실행) Node.js bun run
패키지 매니저 npm / yarn / pnpm bun install
테스트 러너 Jest / Vitest bun test
번들러 webpack / esbuild bun build
패키지 실행 npx bunx

도구마다 설정 파일과 호환성 문제를 따로 챙길 필요가 줄어든다는 것이 Bun이 내세우는 방향입니다. 기존 Node.js 프로젝트에서도 큰 변경 없이 사용할 수 있도록 설계됐다고 문서는 설명합니다.

엔진이 V8이 아니라 JavaScriptCore입니다

Bun을 이해하는 데 중요한 차이가 엔진입니다. Node.js는 구글이 만든 V8 엔진 위에서 동작하지만, Bun은 애플이 사파리용으로 개발한 JavaScriptCore 엔진 위에서 동작합니다. 그리고 Bun 자체는 Zig라는 언어로 작성됐습니다.

이 선택은 단순한 취향이 아니라 동작 방식에도 영향을 줍니다. 예를 들어 Headers, URL 같은 일부 웹 표준 API는 사파리의 구현을 그대로 가져다 씁니다. fetch, WebSocket, ReadableStream 같은 웹 표준 API도 기본 내장돼 있어, 브라우저에서 쓰던 코드를 서버에서도 비슷하게 쓸 수 있습니다.

속도에 관해 공식 문서가 직접 밝히는 수치는 두 가지입니다. 프로세스 시작이 현재 기준 Node.js보다 약 4배 빠르고, 패키지 설치는 npm 대비 최대 30배 빠르다고 적혀 있습니다. 이 수치는 환경과 프로젝트에 따라 달라질 수 있는 벤치마크 값이라는 점은 감안해야 합니다.

설치부터 첫 실행까지

Bun은 단일 바이너리이므로 설치 과정이 단순합니다. macOS와 Linux에서는 공식 설치 스크립트 한 줄로 받을 수 있고, 윈도우와 npm을 통한 설치 등 다른 경로도 공식 설치 페이지에 정리돼 있습니다.

# macOS / Linux 설치
curl -fsSL https://bun.sh/install | bash

# 설치 확인
bun --version

# 타입스크립트와 JSX 파일을 별도 설정 없이 바로 실행
bun run index.tsx

주목할 점은 마지막 줄입니다. .ts, .tsx, .jsx 파일을 별도 트랜스파일 설정 없이 곧바로 실행할 수 있습니다. Bun의 트랜스파일러가 실행 직전에 이 파일들을 일반 자바스크립트로 변환하기 때문입니다. 타입스크립트를 쓰기 위해 ts-node나 별도 빌드 단계를 붙이던 작업이 줄어듭니다.

자주 쓰게 되는 명령어

bun run — 스크립트와 파일 실행

파일을 직접 실행하거나 package.json에 정의된 스크립트를 돌립니다. bun run start는 start 스크립트를 실행하고, bun run index.ts는 파일을 바로 실행합니다. 문서는 이 실행 오버헤드가 거의 없는 수준이라고 표현합니다.

bun install — 패키지 설치

전역 캐시와 워크스페이스, 의존성 오버라이드, 감사(audit) 기능을 지원합니다. 기존 package.json을 그대로 읽어 설치하므로, npm으로 관리하던 프로젝트에 들어가 bun install만 실행해도 됩니다.

bun test — 테스트 실행

Jest와 호환되는 테스트 러너가 내장돼 있습니다. 스냅샷, DOM 테스트, 변경 감지(watch) 모드를 지원하고 타입스크립트를 우선으로 다룹니다. 별도 테스트 프레임워크를 설치하지 않아도 bun test만으로 테스트를 돌릴 수 있습니다.

bun build — 번들링

JS, TS, JSX를 브라우저와 서버 양쪽을 대상으로 번들링합니다. 코드 분할(splitting), 플러그인, HTML import 같은 기능을 지원하며 CSS도 처리할 수 있습니다.

bunx — 패키지 1회 실행

npx에 대응하는 명령어로, 설치하지 않은 패키지를 즉석에서 실행합니다. bunx cowsay 'Hello, world!' 같은 식으로 씁니다.

도입 전에 알아둘 점

Bun이 모든 환경을 즉시 대체한다고 단정하기는 이릅니다. 공식 문서가 직접 언급하는 한계와 함께, 도입 시 점검할 부분을 정리합니다.

  • Node.js 완전 호환은 진행 중 — 문서는 Node.js의 내장 글로벌(process, Buffer)과 모듈(path, fs, http 등) 호환을 목표로 하지만 "아직 완료되지 않은 진행 중인 작업"이라고 명시합니다. 호환 현황은 별도 compatibility 페이지에서 확인해야 합니다.
  • 특정 Node 모듈에 의존하는 프로젝트 — 위 호환성 때문에, 아직 지원되지 않는 모듈을 쓰는 라이브러리는 그대로 동작하지 않을 수 있습니다. 기존 프로젝트는 옮기기 전에 호환 현황을 먼저 점검하는 편이 안전합니다.
  • ESM 권장, CommonJS 지원 — Bun은 ES 모듈을 권장하지만 npm에 남아 있는 수많은 CommonJS 패키지도 함께 지원합니다. 두 모듈 시스템이 섞인 환경에서의 동작은 미리 확인해 두면 좋습니다.
  • 벤치마크 수치는 조건부 — 4배, 30배 같은 수치는 공식 문서가 밝힌 값이지만 프로젝트 구성과 환경에 따라 달라집니다. 실제 도입 효과는 본인 프로젝트에서 측정하는 것이 정확합니다.

누구에게 맞나

새 자바스크립트나 타입스크립트 프로젝트를 시작하면서 런타임, 패키지 매니저, 테스트, 번들러 설정을 처음부터 맞추는 부담을 줄이고 싶다면 Bun이 후보가 됩니다. 타입스크립트를 별도 빌드 설정 없이 바로 실행하고 싶은 경우, 설치 속도가 병목인 경우에도 시험해 볼 만합니다.

반대로 이미 안정적으로 돌아가는 Node.js 프로덕션 환경이고 특정 Node 모듈에 깊게 의존하고 있다면, 전체 전환보다는 별도 사이드 프로젝트나 스크립트 실행 같은 작은 범위부터 적용해 호환성을 확인하는 접근이 무난합니다. 설치 후 기존 프로젝트에서 bun installbun run부터 돌려 보는 것이 가장 빠른 체감 방법입니다.

설치 메모 macOS와 Linux는 curl -fsSL https://bun.sh/install | bash 한 줄로 설치됩니다. 윈도우, npm, Docker 등 다른 설치 방법과 지원 플랫폼은 공식 installation 페이지에 정리돼 있습니다. 기존 Node 프로젝트에 적용하기 전에는 runtime/nodejs-compat 페이지에서 호환 현황을 먼저 확인하는 것을 권장합니다.

이 글은 직접 사용 후기가 아니라 공식 문서를 기준으로 정리한 객관 소개입니다. 기능명과 수치는 작성 시점의 공식 문서를 따랐으며, 버전과 환경에 따라 달라질 수 있습니다.

반응형

📚 같이 보면 좋은

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 일정액의 수수료를 제공받습니다."