💻 프로그래밍

Bun

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에서 작동하지 않을 수 있습니다. 프로덕션 전환 전 반드시 의존성 호환성을 테스트하세요.

Node.js 전용 API 사용 주의

process.nextTick, require.resolve 등 일부 Node.js 전용 API는 다르게 동작하거나 미지원될 수 있습니다. Bun 공식 문서의 Node.js 호환성 표를 확인하세요.

점진적 마이그레이션 권장

프로덕션에서는 개발 환경이나 빌드 도구부터 Bun을 도입하고, 안정성 검증 후 런타임을 전환하세요. bun run은 package.json 스크립트를 그대로 실행할 수 있어 기존 워크플로우와 호환됩니다.

🔗 관련 용어

📚 더 배우기