Skip to content
ai news

Bun 1.4: 의존성을 제거하는 업데이트

논란의 중심인 Bun의 Rust 재작성 버전이 출시되었습니다. 단순히 속도만을 위한 것이 아닙니다. 내장된 새로운 표준 라이브러리는 의존성 비대화를 제거하고 공급망 보안을 강화하는 것을 목표로 하지만, 과연 지나친 변화일까요?

Jonah Park
Bun 1.4: 의존성을 제거하는 업데이트

우리가 그토록 원했던 JavaScript 표준 라이브러리

JavaScript 생태계는 오랫동안 포괄적인 표준 라이브러리의 부재로 어려움을 겪어왔습니다. 이러한 공백으로 인해 개발자들은 수많은 마이크로 패키지를 통합해야 했고, 이는 프로젝트 의존성 비대화와 공급망 취약점 노출 증가로 이어졌습니다. 파편화된 타사 솔루션에 대한 이러한 의존성은 지속적인 아키텍처 과제가 되었습니다.

The Rust Rewrite로 소개된 Bun 1.4는 이 문제를 정면으로 다룹니다. 이제 런타임은 Rust로 설계된 필수 고성능 유틸리티를 번들로 제공하여, 이전에 외부 패키지가 필요했던 핵심 기능을 제공합니다. 이를 통해 다양한 프로젝트 유형에서 15개 이상의 일반적인 의존성을 제거할 수 있습니다.

의존성 대체에 대한 구체적인 예시는 다음과 같습니다:

  • Playwright 및 Puppeteer를 대체하는 헤드리스 브라우저 제어용 Bun.WebView
  • Sharp와 같은 라이브러리의 필요성을 없애는 이미지 조작용 Bun.Image
  • 강력한 마크다운 파싱을 통합한 Bun.Markdown
  • node-pty에 대한 의존성을 제거하는 내장 의사 터미널(pseudo-terminal) 제공용 Bun.Terminal

이러한 통합 접근 방식은 JavaScript 생태계의 주요 철학적 변화를 예고합니다. 파편화된 마이크로 패키지 문화에서 벗어나 더 강력한 '배터리 포함(batteries-included)' 런타임으로 나아가는 것입니다. Bun 1.4는 기초적인 기능을 통합하여 안정성을 높이고 프로젝트 오버헤드를 줄이는 것을 목표로 합니다.

네이티브 API로 Puppeteer와 Sharp를 대체하세요

Bun 1.4는 자동화를 위한 내장 헤드리스 브라우저인 Bun.WebView를 도입하여 Playwright 및 Puppeteer와 같은 의존성을 대체하도록 설계되었습니다. Mac에서 Bun.WebView는 Safari의 엔진인 WebKit을 사용하므로 추가 설치가 필요하지 않습니다. Windows 및 Linux 사용자의 경우 기존 Chrome 또는 Chromium 인스턴스를 활용하여 헤드리스 하위 프로세스를 실행하거나 이미 열려 있는 브라우저에 연결할 수 있습니다.

이 네이티브 통합은 상호작용을 위해 네이티브 브라우저 이벤트를 전달하므로 클릭, 타이핑, 스크롤이 웹 페이지에서 더 인간적으로 보이게 합니다. API는 요소 찾기, 클릭, 타이핑, evaluate를 통한 페이지별 JavaScript 실행과 같은 기본 작업을 다룹니다. 가벼운 브라우저 자동화 및 스크래핑에는 효과적이지만, Bun.WebView는 아직 테스트 러너나 트레이스 뷰어와 같은 기능이 부족하여 Playwright와 같은 도구를 완전히 대체하지는 못합니다.

의존성 비대화를 더욱 줄이기 위해 Bun.Image는 Sharp를 대체하는 강력한 도구로 제공됩니다. 이 네이티브 이미지 라이브러리는 Bun 내에서 직접 체인 가능한 작업을 제공합니다. 개발자는 이미지 크기 조정, 회전, 뒤집기, 밝기 및 선명도 조절, 이미지 형식 변환을 효율적으로 수행할 수 있습니다. 또한 Bun.Image는 전체 픽셀 데이터를 디코딩할 필요 없이 너비, 높이, 형식을 포함한 메타데이터를 읽습니다. 이는 복잡한 네이티브 빌드의 필요성을 제거하고 외부 이미지 처리 라이브러리에서 자주 발생하는 배포 문제를 해결합니다.

이제 개발 워크플로우에 내장된 기능

Bun 1.4는 concurrentlynpm-run-all과 같은 외부 의존성을 제거하는 내장 스크립트 러너를 도입합니다. 이제 개발자는 --parallel을 사용하여 여러 package.json 스크립트를 동시에 실행하거나 --sequential을 사용하여 순차적으로 실행할 수 있습니다. 이 기능에는 스크립트 이름이 접두사로 붙는 출력, 스크립트 이름에 대한 글로브 매칭, 워크스페이스 필터링이 포함됩니다. 또한 한 스크립트에서 오류가 발생하더라도 다른 스크립트가 계속 실행되도록 허용하는 옵션도 제공됩니다.

작업 스케줄링을 위해 Bun.cronnode-cron과 같은 패키지를 대체합니다. 이 기능은 두 가지 모드를 지원합니다. 간단한 작업은 이벤트 루프에서 함수가 실행되며, 시스템 수준의 크론 작업은 스크립트를 통해 등록됩니다. 이러한 시스템 수준 작업은 Linux의 crontab, Maclaunchd, Windows의 작업 스케줄러를 활용하여 강력하고 지속적인 실행을 보장합니다. 요일 이름 지정 및 daily와 같은 헬퍼를 포함한 표준 cron 구문이 지원됩니다.

pseudo-terminal API인 Bun.Terminal이 런타임에 직접 통합되어 node-pty가 필요하지 않게 되었습니다. 이를 통해 JavaScript로 Bash, Vim, Htop과 같은 대화형 명령줄 애플리케이션을 구동할 수 있습니다. Bun.spawnterminal 옵션이 추가되어 하위 프로세스가 색상 출력, 커서 이동, 대화형 프롬프트를 위한 실제 터미널 환경을 제공받을 수 있습니다. 이 기능 및 기타 기능에 대한 자세한 내용은 Bun 1.4 릴리스 노트를 참조하십시오.

이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.

하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음

Rust Rewrite의 진정한 성과

Bun 1.4의 기반이 되는 Rust Rewrite는 재설계의 진정한 성과인 상당한 성능 향상을 제공합니다. 이러한 재엔지니어링을 통해 모든 작업에서 더 빠른 시작 시간과 눈에 띄게 낮은 CPU 사용량을 달성했습니다. 특히, Bun.WebViewBun.Image와 같은 광범위한 새 기능이 추가되었음에도 Bun 바이너리 크기는 17% 더 작아졌습니다.

추가 유틸리티는 개발 워크플로우를 더욱 간소화합니다. Bun.Archive는 tarball을 검사하기 위한 빠르고 네이티브한 구현을 제공하여, 개발자가 전체 압축 해제 없이도 .tgz 아카이브에서 package.json과 같은 특정 파일을 읽을 수 있게 합니다. 또한 Bun은 JSON5와 XML을 파싱하고 문자열화하는 네이티브 지원을 도입하여 이러한 일반적인 데이터 형식을 위해 타사 라이브러리를 사용할 필요가 없습니다.

패키지 관리의 중요한 편의성 개선 사항으로 새로운 글로벌 가상 저장소인 isolatedLinker가 있습니다. 이 기능은 설치된 패키지를 복제하는 대신 개별 프로젝트의 node_modules 폴더에 심볼릭 링크로 연결하여 상당한 디스크 공간을 절약합니다. 또한 isolatedLinker는 여러 프로젝트에 걸쳐 후속 bun install 명령을 가속화하여 전반적인 개발자 효율성을 높입니다.

자주 묻는 질문(FAQ)

Bun 1.4의 가장 큰 변화는 무엇인가요?

'Rust Rewrite'는 강력한 내장 표준 라이브러리를 도입하여 브라우저 자동화, 이미지 처리, 크론 작업 등 15개 이상의 일반적인 NPM 의존성을 런타임 내에서 직접 대체하는 것을 목표로 합니다.

Bun 1.4가 Playwright나 Puppeteer를 완전히 대체하나요?

완전히 대체하지는 않습니다. Bun.WebView는 경량 브라우저 자동화, 스크래핑, UI 스크립팅에 탁월합니다. 그러나 현재는 전용 테스트 러너나 트레이스 뷰어와 같이 Playwright에서 제공하는 고급 기능은 부족합니다.

Bun 1.4가 대체할 수 있는 주요 의존성에는 어떤 것들이 있나요?

Bun 1.4는 Playwright/Puppeteer(Bun.WebView), Sharp(Bun.Image), Marked(Bun.Markdown), node-cron(Bun.cron), concurrently(병렬 스크립트), 그리고 다양한 tar 및 ANSI 문자열 라이브러리와 같은 패키지를 대체할 수 있습니다.

Bun 1.4의 글로벌 가상 저장소는 어떻게 작동하나요?

'isolatedLinker'가 활성화되면 bun install은 패키지를 컴퓨터의 단일 글로벌 저장소로 추출합니다. 그런 다음 심볼릭 링크를 사용하여 프로젝트의 node_modules에 연결함으로써 상당한 디스크 공간을 절약하고 여러 프로젝트에 걸쳐 설치 속도를 높입니다.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only