Bun은 자바스크립트·타입스크립트 앱 실행과 패키지 설치, 테스트를 묶은 개발 도구다. 10월 22일 공개된 v1.4.4는 내장 포매터를 추가하고 타입 검사 시간을 줄였다. 지원 언어·플러그인과 설정이 맞는 프로젝트에서는 코드 서식 정리와 타입 검사를 Bun 안에서 끝낼 수 있다.

기존 설정으로 포맷 검사까지

새 포매터는 기존 설정을 활용한다. bun fmt는 Prettier·oxfmt 설정을 읽는다. 회사는 Prettier 3.9.9 자체 테스트에서 9,731개 중 9,648개인 99.1%가 바이트 단위로 동일하다고 밝혔다.

다중 프로젝트 검사는 중복 작업을 줄였다. 회사 측정에서 bun check -b는 생성 모노레포(독립 프로젝트 4,000개·각 파일 5개)에서 13.65초에서 0.87초로 15.7배 빨라졌다. 조건은 skipLibCheck: true, 16코어 M4 Max, 6회 중 최고값이다. 선언 파일 파싱 결과·모듈 해석 캐시·출력 파일 목록을 프로젝트끼리 공유해 각자 사본을 보관하던 중복을 줄였다.

패키지 설치는 짧은 장애를 견디도록 실패할수록 재시도 간격을 늘린다. 회사의 측정에서 레지스트리가 1초 동안 503을 반환하자 v1.4.3은 7 ms 만에 실패했지만 v1.4.4는 1.6초에 설치를 끝냈다.

의존성을 상위 폴더에 모으는 설치도 빨라졌다. 회사 측정에서 Linux·패키지 캐시 보유·패키지 1,000개(각 파일 30개)·빈 설치 폴더·8코어 조건의 설치 시간은 381 ms에서 120 ms로 줄어 약 3.2배 빨라졌다.

표: Prettier 저장소에서 포맷 검사 시간과 최대 메모리 비교

조건: Prettier 저장소 2,616개 파일에 자체 설정을 적용한 bun fmt --check와 Prettier 3.9.10 비교, Intel Xeon Platinum 8488C 8코어 고정·Linux·워밍 파일 캐시 중앙값, 회사 발표.

단위: 포맷 검사 시간은 ms와 s, 최대 메모리는 MB

기존 설정으로 포맷 검사까지
도구포맷 검사 시간 (ms/s)최대 메모리 (MB)
bun fmt59.7 ms48
Prettier 3.9.1017.1 s459

포맷 검사 시간이 두 자릿수 이상 벌어졌다. 이 수치가 그대로 CI 절감 시간으로 이어진다고는 할 수 없어, 각자 CI에서 포맷 단계가 몇 초를 차지하는지는 따로 측정해 볼 만하다.

타입 검사 개선 폭은 저장소마다 달라

표: Bun v1.4.4와 v1.4.3의 bun check 실행 시간 비교

조건: 8스레드 Linux x64에서 콜드 런, 캐시 없이 처음 실행한 측정 3회 중 최고값, 두 버전이 같은 오류 수를 보고한 저장소 기준, 회사 발표.

단위: 초

Bun v1.4.4와 v1.4.3의 bun check 실행 시간 비교 (초)MUI docs: Bun v1.4.3 10.28, Bun v1.4.4 1.31; t3code server: Bun v1.4.3 4.59, Bun v1.4.4 1.62; Supabase studio: Bun v1.4.3 2.84, Bun v1.4.4 1.27; mikro-orm: Bun v1.4.3 3.30, Bun v1.4.4 1.82; VS Code: Bun v1.4.3 4.09, Bun v1.4.4 2.82Bun v1.4.3Bun v1.4.4MUI docs10.281.31t3code server4.591.62Supabase studio2.841.27mikro-orm3.301.82VS Code4.092.82
Bun v1.4.4와 v1.4.3의 bun check 실행 시간 비교 (초)
타입 검사 개선 폭은 저장소마다 달라
저장소Bun v1.4.3Bun v1.4.4배수
MUI docs10.281.317.8
t3code server4.591.622.8
Supabase studio2.841.272.2
mikro-orm3.301.821.8
VS Code4.092.821.4

저장소마다 폭은 달랐지만 방향은 같았다. 회사가 따로 잰 76개 저장소 중 69개가 10% 넘게 빨라졌다고 밝혔다.

업그레이드 방법

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

# 또는 npm, Homebrew
npm install -g bun
brew tap oven-sh/bun
brew install bun

# 이미 설치돼 있다면
bun upgrade

교체 전에는 타입 검사기의 TypeScript 7 기준 설정을 확인한다. 포맷 검사는 bun fmt --check로 실행하며, 고칠 파일이 있으면 종료 코드 1을 반환한다.

깨지는 변경은 우선 다음을 확인한다.

Bun.Glob의 *(1).txt는 이제 '0개 이상의 1 뒤에 .txt'로 읽힌다. *[(]1).txt로 예전 동작을 유지한다. ws 서버의 유휴 타임아웃·자동 핑이 없어지고 기본 maxPayload는 16 MiB에서 100 MiB로 오른다. 설치 명령은 어느 패키지 매니저도 지원하지 않는 플래그를 오류로 처리한다. --frozen-lockfil 같은 오타가 해당한다.

DB 전송은 메모리를 일정하게 유지

DB를 붙인 서비스에서는 Bun.SQL의 쿼리당 비용이 줄었다. 회사의 발표 기준으로 Linux x64의 PostgreSQL에서 특정 행을 찾는 조회의 클라이언트 사용자 공간 명령어 수가 48% 감소했다.

대용량 복사에는 COPY 스트림의 역압력이 작용한다. 소비 속도에 맞춰 전송을 조절하므로 테이블 전체 크기만큼 메모리가 불어나지 않는다. 회사 측정에서는 1,000 MiB를 초당 255 MiB로 전송하면서 최대 상주 메모리 59 MiB를 유지했다.

Node.js에서 ws를 써 온 팀은 패키지를 갈아 끼울 필요 없이 Bun에서 ws를 그대로 import해 동작을 확인해 볼 수 있다.

표: ws 내장 구현 호환성 지표 비교

조건: npm ws 8.22.0과 비교한 재작성된 Bun v1.4.4 내장 구현과 그 이전 버전 기준, 회사 발표.

단위: 통과 또는 동일 출력 스크립트 수

ws 내장 구현 호환성 지표 비교
비교 항목Bun v1.4.4이전 버전
ws 자체 테스트 통과234 / 271개94 / 271개
클라이언트 스크립트 동일 출력179 / 212개18 / 212개
서버 스크립트 동일 출력150 / 159개67 / 159개

Bun의 기존 내장 ws 구현을 ws 8.22.0 포팅으로 다시 써서 스크립트 출력이 그대로 같아지는 경우가 늘었다. 프레임과 압축은 여전히 네이티브로 처리된다.

회사 측정에서 포맷 검사는 두 자릿수 이상 빨라졌지만, 실제 저장소의 타입 검사 개선은 1.4~7.8배로 도구와 저장소에 따라 달랐다.