Bun
Bun
빠른 JS 런타임, 번들러, 패키지 매니저. Node.js 대안.
Bun
빠른 JS 런타임, 번들러, 패키지 매니저. Node.js 대안.
Bun은 Jarred Sumner가 Zig 언어로 개발한 차세대 JavaScript/TypeScript 런타임입니다. 2022년 처음 공개되어 2023년 9월에 1.0 버전이 출시되었으며, Node.js 대비 최대 4배 빠른 시작 속도와 뛰어난 성능으로 주목받고 있습니다.
Bun의 가장 큰 특징은 올인원(All-in-One) 도구라는 점입니다. JavaScript 런타임뿐만 아니라 패키지 매니저(npm/yarn 대체), 번들러(webpack/esbuild 대체), 테스트 러너까지 내장하고 있어 별도 도구 설치 없이 프로젝트를 시작할 수 있습니다.
Bun은 JavaScriptCore 엔진(Safari에서 사용)을 기반으로 하며, 메모리 사용량이 적고 콜드 스타트가 빠릅니다. 또한 Web API(fetch, WebSocket, ReadableStream 등)를 네이티브로 지원하고, Node.js의 대부분 API와 npm 패키지를 호환합니다.
실무에서 Bun은 CI/CD 파이프라인에서의 빠른 빌드, 서버리스 함수의 콜드 스타트 개선, 개발 환경의 빠른 핫 리로드 등에 활용됩니다. 특히 TypeScript를 별도 설정 없이 바로 실행할 수 있어 개발자 경험(DX)이 크게 향상됩니다.
// 1. Bun으로 HTTP 서버 만들기 (내장 API)
const server = Bun.serve({
port: 3000,
fetch(request) {
const url = new URL(request.url);
if (url.pathname === "/api/hello") {
return Response.json({ message: "안녕하세요, Bun!" });
}
if (url.pathname === "/") {
return new Response("Welcome to Bun Server!", {
headers: { "Content-Type": "text/plain; charset=utf-8" }
});
}
return new Response("Not Found", { status: 404 });
}
});
console.log(`🚀 서버 실행 중: http://localhost:${server.port}`);
// 2. 파일 시스템 작업 (Bun API)
const file = Bun.file("./data.json");
const content = await file.json();
console.log("파일 내용:", content);
// 파일 쓰기 (동기적으로 빠르게 처리)
await Bun.write("./output.txt", "Bun으로 작성된 파일입니다!");
// 3. 패키지 설치 및 사용 (bun install이 npm보다 25배 빠름)
// $ bun install lodash
import _ from "lodash";
const users = [
{ name: "김철수", age: 30 },
{ name: "이영희", age: 25 },
{ name: "박민수", age: 35 }
];
const sorted = _.sortBy(users, "age");
console.log("나이순 정렬:", sorted);
// 4. TypeScript 직접 실행 (별도 설정 불필요!)
// $ bun run app.ts
interface User {
id: number;
name: string;
email: string;
}
const createUser = (name: string, email: string): User => ({
id: Date.now(),
name,
email
});
const newUser = createUser("홍길동", "hong@example.com");
console.log("새 사용자:", newUser);
"CI 빌드 시간이 5분인데, Bun으로 전환하면 1분 이내로 줄일 수 있습니다. 패키지 설치가 npm 대비 25배 빠르고, TypeScript 트랜스파일도 내장되어 있어서 빌드 파이프라인이 단순해집니다."
"Bun은 JavaScriptCore 엔진을 사용하고 Zig로 작성되어 Node.js의 V8 기반보다 메모리 효율과 시작 속도가 뛰어납니다. Node.js API 대부분과 호환되지만, 아직 일부 네이티브 모듈은 지원하지 않아 프로덕션 도입 전 호환성 검증이 필요합니다."
"Bun.file()과 Bun.write()를 사용하면 fs 모듈보다 간결하고 빠릅니다. 특히 JSON 파일은 file.json()으로 바로 파싱할 수 있어서 코드량도 줄어듭니다."
bcrypt, canvas 등 C++ 바인딩을 사용하는 네이티브 모듈은 Bun에서 작동하지 않을 수 있습니다. 프로덕션 전환 전 반드시 의존성 호환성을 테스트하세요.
process.nextTick, require.resolve 등 일부 Node.js 전용 API는 다르게 동작하거나 미지원될 수 있습니다. Bun 공식 문서의 Node.js 호환성 표를 확인하세요.
프로덕션에서는 개발 환경이나 빌드 도구부터 Bun을 도입하고, 안정성 검증 후 런타임을 전환하세요. bun run은 package.json 스크립트를 그대로 실행할 수 있어 기존 워크플로우와 호환됩니다.