킹의 개발일지

뜨거운 만두, bun.js 넌 누구냐! 본문

bun.js

뜨거운 만두, bun.js 넌 누구냐!

k1ng 2023. 11. 7. 02:10

 

bun에 대해서는 유튜브를 탐방하다가 우연히 알게 됐다. 영상 제목부터 '속도가 미쳤습니다. bun!', '노드보다 4배 빠르다던데... ' 그리고 썸네일은 막 불에 타는 만두?와 속도를 비교하는 그래프를 보여주면서, '얘는 엄청 빨라!' 라는 것을 대문짝만하게 광고하고 있었다. 그런 영상들에 매료되어 bun 이라는 놈을 맛보기로 마음먹었다.

그래서 bun 너는 뭐야?

bun.js 공식 홈페이지에 들어가면 다음과 같이 설명한다.

Bun is a fast JavaScript runtime, package manager, bundler, test runner, all-in-one toolkit.
Develop, test, run, and bundle JavaScript & TypeScript projects—all with Bun. Bun is an all-in-one JavaScript runtime & toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.

 

말 그대로 자바스크립트 런타임, 패키지 매니저, 번들러, test runner까지 겸비한 올인원 툴킷이라는 것이다. 그 중 눈에 뛰는 것이 바로 'Fast', 즉 빠르다는 것이다.

 

릴리즈 노트 https://bun.sh/blog/bun-v1.0 를 살펴보면 속도에 대한 예찬이 적혀있다.

 

Bun 1.0 | Bun Blog

Bun 1.0 is finally here. Bun is a fast, all-in-one toolkit for running, building, testing, and debugging JavaScript and TypeScript, from a single file to a full-stack application. Today, Bun is stable and production-ready. We love JavaScript. It's mature,

bun.sh

 

Bun is fast, starting up to 4x faster than Node.js.

 

Install speed, test speed, 번들링 speed 등 경쟁 상대들과 비교를 통해서 bun.js가 얼마나 빠른 녀석인지 설명한다. 자세한 비교 내용은 위 링크에서 확인 할 수 있다. 그리고 중요한점! Node 보다 4배 더 빠르기까지 하단다. 소개글을 보면 bun이 빠를것이라고 안 믿을 수 없다. 그럼 왜 빠른걸까?

bun 왜 빠른건데?

bun이 빠르게 동작할 수있는 이유로 크게 두 가지를 든다.

1. JavaScriptCore Engine

bun은 Speed에 대해서 이렇게 설명한다.

Bun starts fast and runs fast. It extends JavaScriptCore, the performance-minded JS engine built for Safari. As computing moves to the edge, this is critical.

 

Node와 Deno 런타임에서 사용하는 V8 엔진은 c++로 개발 되었으며, 크롬 브라우저에서 사용 되고 있다. 그러나 bun은 사파리에서 사용하는 '성능 지향적인' JavaScriptCore 엔진을 사용한다. JavaScriptCore은 V8과 같은 전통적인 자바스크립트 엔진들보다 빠르게 시작하고 동작한다.

2. ZIG

C++, Rust로 개발된 Deno와 Node.js와 달리 bun은 JSX, Typescript transfiler, 번들러, npm client, sql client, http 클라이언트 등을 모두 ZIG로 개발했다고 한다.

 

ZIG는 메모리 직접 관리하는 기능을 갖춘 로우레벨 언어로 일부 테스트에서는 Rust보다 빠르다고한다.

빠른건 알았는데... Node를 대체할 수 있을까?

bun은 즉각적으로 Node를 대체할 수 있도록 디자인 됐다고 한다. fs, path, Buffer 등을 포함해 수백 개가 넘는 Node.js 및 웹 API를 기본적으로 구현했다 한다.

 

기본적으로 Node에서 가능한 것들을 모두 bun에서 실행 가능한데, npm install로 하던 것들도 bun install로 실행할 수 있으며 속도는 훨신 빠르다.

 

또한 타입스크립트 파일도 바로바로 실행 가능하다. 그리고 개인적으로 조금 마음에 들었던 점들인데, nodemon 없이도 Hot reloading을 지원하면서 이전 프로세스 종료없이 리로드도 가능하다고 한다. 또한 "type" : "module" 같이 번거로운 과정 없이 import 구문을 사용할 수 있으며, ESM와 CJS를 동시에 사용할 수 있어 같은 파일에서 require과 import를 동시에 사용할 수 도 있다.


오늘은 막 출시된 뜨거운 만두?(아직 마스코트가 만두인지 뭔지 잘 모르겠다...) bun에 대해서 알아봤다.

 

Node가 제공하는 것들을 그대로 제공하면서 속도는 더 빠른 bun을 안 써볼 이유는 없는것 같다. 하지만 나온지 얼마 안 됐기 때문에 큰 프로젝트에 바로 적용시켜 보기까진 깊은 고민이 있어야 할 것이다.

 

실제로 이번 프로젝트에 bun 적용시켜 봤는데, Node와 매우 흡사해서 빠르게 적용시켜 볼 수 있었다.

 

아! 참고로 window 버전은 출시 안 했기 때문에 window에서 사용하려면 WSL을 통해서 사용해야한다.

 

'bun.js' 카테고리의 다른 글

bun.js로 간단한 HTTP 서버를 만들어보자 (1)  (0) 2023.11.21