블로그를 Render로 옮긴 이후, 지난 2년 동안 줄곧 Bun을 써왔다.
티스토리에 있던 글을 전부 마크다운으로 옮긴 후, 블로그 작성에 쓰는 유틸리티에 Bun을 쓰도록 한 것이 24년 5월의 일이니, 딱 2년 된 셈이다.
Bun을 쓰게 된 계기는 단순했다. 블로그 배포 플랫폼인 Render가 기본 패키지 매니저로 Bun을 사용했기 때문이다. 처음 보는 이름에 호기심이 생겨 Bun에 대해 찾아보았고, 곧바로 "어머, 이건 꼭 써야 해!"를 읊조릴 수밖에 없었다.
그도 그럴 것이, Bun은 말 그대로 '올인원(All-in-one)'이었으니까.
- 단일 실행 파일 하나로 JavaScript/TypeScript 런타임 해결
- 강력하고 빠른 패키지 매니저 기능
- 자체 번들러와 업데이트 시스템
그 당시에는 무슨 패키지 매니저를 써도 죄다 JavaScript/TypeScript 기반인 탓에 답답한 Node.js에서 벗어날 수 없다는 점에 조금씩 피로감을 느끼고 있었고, 모든 걸 실행 파일 하나로 끝내는 Bun은 정말이지 거부할 수 없는 매력적인 선택지였다.
그렇게 2년 정도 Bun에 만족하며 사용해 왔지만, Bun에 불필요한 기능이 너무 많아지는 게 아니냐는 생각이 최근 들어 점차 머릿속에 자리 잡기 시작했다.
시간이 지남에 따라 Bun.WebView, Bun.cron() 같은, 개인 블로그 운영에 결코 쓸 일이 없는 기능들이 하나둘 추가되었다.
가볍고 빠른 것이 Bun의 장점 중 하나라고 생각해 왔는데, 그런 기능이 하나 둘 덕지덕지 붙다 보니, 어느새 Bun의 실행 파일 용량이 Node.js의 용량보다 더 커져버렸다. 빠르기는 여전히 빠르지만, 더 이상 가볍다고 하기 어려워진 것이다.
그래도 기껏 잘 쓰고 있는 Bun의 사용을 갑자기 그만둘 수 없어 뭉그적대던 중, Bun을 반드시 그만둬야 하는 상황이 발생했다. 바로 블로그 생성 도구인 Hugo 때문이었다.
최근 Hugo가 보안을 위해 특정 Node.js 플래그를 사용하는 기능을 추가했는데, 정작 Bun이 그 플래그를 전혀 인식하지 못해 Bun을 통해 설치한 PostCSS 등의 도구가 제대로 실행되지 않게 되었다. 이를 해결하기 위해선 무조건 Node.js를 사용해야만 하는 상황.
그렇지 않아도 Bun 사용을 그만두고 다른 런타임을 알아볼까 고민하던 중이었는데, Hugo가 '아, 그런 건 잘 모르겠고, 아무튼 Node.js 갖고 오세요!'라고 말하기에, 일말의 망설임 없이 Bun을 버리기로 했다. 아니, 내 블로그가 더 이상 작동하지 않는다니까?
Bun을 대체할 런타임을 찾기 위해 인터넷을 조금 뒤졌다.
- Deno: Bun처럼 '런타임 + 패키지 매니저' 기능을 갖고 있는 건 몹시 매력적이었지만, Node.js 호환성이 Bun보다 조금 뒤떨어진다고 한다.
- Node.js + pnpm: 런타임과 패키지 매니저를 분리해야 한다는 게 조금 귀찮지만, 가장 안정적인 선택지이다.
패키지 매니저로는 pnpm을 골랐는데, Yarn은 v1와 v2 사이의 괴리가 너무 커서 부담스러웠고, npm은 더 이상 쓰기 싫어서였다.
pnpm이라는 글자를 입력하기 좀 불편한 감이 없잖아 있긴 하다만, 로컬에서 p 등의 단축 래퍼를 만들면 되니까 큰 문제는 없을 것이다.
결국 내 환경에서 Bun을 완전히 삭제하는 것으로 Bun과의 인연을 마쳤다.
pnpm의 sub-command가 아직 익숙지 않고, 런타임과 패키지 매니저를 분리해서 설치해야 한다는 게 조금 귀찮지만, 그래도 Node.js는 표준 런타임 아닌가. 이전보다 훨씬 더 안정적으로 사용할 수 있다는 건 분명한 장점이다.
Bun이 Zig에서 Rust로 사용 언어를 바꾸는 초대규모 PR을 충분한 코드 리뷰 없이 그냥 진행했다는 이야기를 들었다.
분명 기존에 잘 작동되던 것도 여기저기서 문제가 생길 게 뻔하니, Bun에서 벗어난 게 정말 신의 한 수였다고밖에 생각되지 않는다.


![[퍼옴] 무예도보통지 시리즈](/b/chit-chat/muyedobotongji/001.a433900056472c6f078cfc9b2bb32026.webp)

