(번역) Rust가 자바스크립트를 잠식하고 있습니다

sehyun hwang·2026년 8월 17일

FE 번역글

목록 보기
51/51
post-thumbnail

원문: https://leerob.com/rust

Rust는 빠르고 안정적이며 메모리 효율이 높은 프로그래밍 언어입니다. 10년째 가장 선호도 높은 프로그래밍 언어로 선정되고 있습니다[^1]. Mozilla가 만든 Rust는 현재 Meta, Apple, Amazon, Microsoft, Google에서 시스템 인프라, 암호화, 가상화, 그 밖의 저수준 프로그래밍에 사용되고 있습니다.

Rust는 왜 지금 최소화(Terser), 트랜스파일(Babel), 포맷팅(Prettier), 번들링(webpack), 린팅(ESLint) 등 자바스크립트 웹 생태계의 일부를 대체하는 데 사용되고 있을까요?

Rust란?

Rust를 통해 개발자는 메모리 효율적인 고속 소프트웨어를 작성할 수 있습니다. 코드 안전성과 간결한 문법에 초점을 맞춘, C++이나 C를 대체하는 현대적인 언어입니다.

Rust는 자바스크립트와 상당히 다릅니다. 자바스크립트는 사용하지 않는 변수나 객체를 찾아 자동으로 메모리에서 제거합니다. 이를 가비지 컬렉션(Garbage Collection)이라고 합니다. 자바스크립트는 개발자가 수동으로 메모리를 관리하지 않아도 되도록 추상화되어 있습니다.

Rust에서는 C++만큼 고통스럽지 않으면서도 메모리 할당을 더 세밀하게 제어할 수 있습니다.

Rust는 메모리 "소유권(ownership)"이라는 개념을 도입한 비교적 독특한 메모리 관리 방식을 사용합니다. 기본적으로 Rust는 누가 메모리를 읽고 쓸 수 있는지를 추적합니다. 프로그램이 메모리를 사용하는 시점을 파악하고, 더 이상 필요하지 않게 되는 즉시 해제합니다. 컴파일 타임에 메모리 규칙을 강제하므로 런타임 메모리 버그가 사실상 불가능합니다. 메모리를 수동으로 추적할 필요가 없습니다. 컴파일러가 알아서 처리합니다. – Discord

도입 현황

앞서 언급한 기업들 외에도, Rust는 다음과 같은 인기 오픈소스 라이브러리에도 활용되고 있습니다.

Rust는 우리 팀의 생산성을 크게 끌어올려 주었으며, Rust에 베팅한 것은 우리가 내린 최고의 결정 중 하나였습니다. 성능 이상으로, Rust의 편의성(ergonomics)과 정확성에 대한 집중이 싱크의 복잡성을 길들이는 데 도움을 줬습니다. 시스템의 복잡한 불변 조건(invariants)을 타입 시스템으로 인코딩하고 컴파일러가 이를 검증하도록 할 수 있습니다. – Dropbox

자바스크립트에서 Rust로

자바스크립트는 웹 브라우저가 있는 모든 기기에서 동작하는, 세상에서 가장 널리 사용되는 프로그래밍 언어입니다. 지난 10년간 자바스크립트를 중심으로 거대한 생태계가 형성되었습니다.

  • Webpack: 여러 자바스크립트 파일을 하나로 번들링합니다.
  • Babel: 구형 브라우저를 지원하면서도 최신 자바스크립트로 개발할 수 있게 합니다.
  • Terser: 가능한 한 작은 파일 크기를 생성합니다.
  • Prettier: 의견이 담긴 방식으로 코드를 포맷합니다.
  • ESLint: 배포 전에 코드의 문제를 찾아냅니다.

오늘날 웹 애플리케이션 출시를 위한 기반을 만들기 위해 수백만 줄의 코드가 작성되었고, 그보다 훨씬 더 많은 버그가 수정되었습니다. 이 모든 도구는 자바스크립트나 타입스크립트로 작성되어 있습니다. 잘 동작해왔지만, 이제 자바스크립트로 가능한 최적화의 한계에 도달했습니다. 이런 배경에서 웹 빌드 성능을 크게 높이도록 설계된 새로운 세대의 도구들이 등장했습니다.

SWC

2017년에 만들어진 SWC는 차세대 고속 개발 도구를 위한 확장 가능한 Rust 기반 플랫폼입니다. Next.js, Parcel, Deno 같은 도구와 Vercel, ByteDance, Tencent, Shopify 같은 기업에서 사용하고 있습니다.

SWC는 컴파일, 최소화, 번들링 등에 쓰이며, 확장 가능하도록 설계되었습니다. 내장 또는 커스텀 코드 변환을 수행하는 호출 지점이기도 합니다. 이러한 변환 실행은 Next.js 같은 상위 수준 도구를 통해 이루어집니다.

Deno

2018년에 만들어진 DenoV8을 사용하고 Rust로 구축된 간단하고 현대적이며 안전한 자바스크립트·타입스크립트 런타임입니다. Node.js의 원작자가 만든, Node.js를 대체하려는 시도입니다. 2018년에 만들어졌지만 v1.0은 2020년 5월이 되어서야 출시되었습니다.[^2]

Deno의 린터, 코드 포매터, 문서 생성기는 모두 SWC로 구축되어 있습니다.

esbuild

2020년 1월에 만들어진 esbuild는 Go 언어로 작성된 자바스크립트 번들러·미니파이어로, 기존 도구보다 10~100배 빠릅니다.

A) 번들링 자바스크립트, 타입스크립트, 그리고 아마도 CSS처럼 특정 사용 사례에 잘 작동하고, B) 자바스크립트 빌드 도구에서 '빠르다'는 게 무엇을 의미하는지에 대한 커뮤니티의 기대치를 새로 설정하는 빌드 도구를 만들려 하고 있습니다. 제 생각에 현재 도구들은 너무 느립니다. – esbuild 제작자 Evan (출처)

esbuild가 등장하기 전까지, Go나 Rust 같은 시스템 프로그래밍 언어로 자바스크립트 툴링을 구축하는 것은 꽤 비주류였습니다. esbuild가 개발자 도구를 더 빠르게 만들려는 폭넓은 관심에 불을 지폈다고 생각합니다. Evan은 Go를 선택했습니다.

Rust 버전도 충분한 노력을 기울이면 동등한 속도로 만들 수 있을 것입니다. 하지만 전반적으로 Go가 훨씬 즐겁게 작업할 수 있는 언어였습니다. 이건 사이드 프로젝트이고, 제가 재미있어야 계속할 수 있습니다. – esbuild 제작자 Evan (출처)

Rust가 더 나은 성능을 낼 수 있다고 주장하는 이들도 있지만, 두 언어 모두 커뮤니티에 영향을 미치겠다는 Evan의 원래 목표를 달성합니다.

기본적인 최적화만으로도 Rust는 Go의 세밀하게 손으로 튜닝한 버전을 능가했습니다. Go로 깊이 파고들었던 것에 비해 Rust로 효율적인 프로그램을 작성하는 것이 얼마나 쉬운지를 보여주는 엄청난 증거입니다. – Discord

Rome

2020년 8월에 만들어진 Rome은 자바스크립트, 타입스크립트, HTML, JSON, Markdown, CSS를 위한 린터, 컴파일러, 번들러, 테스트 러너 등의 기능을 모두 갖추고 있습니다. 프런트엔드 개발 툴체인 전체를 대체하고 통합하는 것을 목표로 합니다. Babel을 만든 Sebastian이 제작했습니다.

그렇다면 왜 처음부터 다시 만들었을까요?

Babel을 다른 도구들의 신뢰할 수 있는 기반으로 삼으려면 모든 것을 바꿔야 했을 겁니다. 이 아키텍처는 제가 파서, AST, 컴파일러를 공부하던 2014년에 내린 초기 설계 결정에 묶여 있습니다. - Sebastian (출처)

Rome는 현재 타입스크립트로 작성되어 Node.js에서 실행됩니다. 하지만 RSLint 파서와 자체 AST 순회용 방문자 시스템을 사용해 Rust로 재작성하는 작업을 진행 중입니다.[^3]

NAPI

Rust와 Node.js의 통합은 다른 저수준 언어보다 뛰어납니다.

napi-rs를 사용하면 Rust로 사전 컴파일된 Node.js 애드온을 만들 수 있습니다. node-gyppostinstall 스크립트 없이도 크로스 컴파일 및 NPM에 네이티브 바이너리를 게시하는 즉시 사용 가능한 솔루션을 제공합니다.

esbuild처럼 자식 프로세스를 생성하지 않아도 Node.js에서 직접 호출할 수 있는 Rust 모듈을 만들 수 있습니다.

Rust + WebAssembly

WebAssembly(WASM)는 Rust가 컴파일 대상으로 삼을 수 있는 이식 가능한 저수준 언어입니다. 브라우저에서 실행되고 자바스크립트와 상호 운용 가능하며, 모든 주요 최신 브라우저에서 지원됩니다.

WASM이 자바스크립트보다 훨씬 빠른 것은 분명하지만, 네이티브 속도에는 미치지 못합니다. 저희 테스트에서 Parcel은 네이티브 바이너리에 비해 WASM으로 컴파일했을 때 10~20배 느렸습니다. – Devon Govett

WASM이 아직 완벽한 해결책은 아니지만, 개발자가 매우 빠른 웹 경험을 만드는 데 분명히 도움이 됩니다. Rust 팀은 고품질의 최첨단 WASM 구현에 전념하고 있습니다. 개발자 입장에서는 웹(WASM 사용)으로 컴파일하면서도 Rust의 성능 이점(Go 대비)을 누린다는 뜻입니다.

이 분야의 초기 라이브러리와 프레임워크입니다.

WASM으로 컴파일되는 이 Rust 기반 웹 프레임워크들은 자바스크립트를 대체하려는 것이 아니라 함께 작동하도록 설계되었습니다. 아직 완전히 도달하지는 못했지만, 기존 자바스크립트 툴링을 더 빠르게 만드는 것동시에 WASM으로 컴파일하는 미래 지향적인 아이디어 양쪽에서 Rust가 웹을 공략하는 것을 보는 것은 흥미롭습니다.

끝까지 Rust입니다.

Rust를 쓰지 말아야 할 이유

Rust는 학습 곡선이 가파릅니다. 대부분의 웹 개발자가 익숙한 것보다 낮은 수준의 추상화를 다룹니다.

Rust, Go, Zig 혹은 다른 저수준 언어로 네이티브 코드를 다루게 되면, 언어 선택보다 알고리즘과 자료구조가 더 중요합니다. Rust는 만능 해결책이 아닙니다.

Rust는 시스템 프로그래밍에서 매우 중요한 코드의 여러 차원을 생각하게 합니다. 메모리가 어떻게 공유되거나 복사되는지를 생각하게 합니다. 실제로 발생하지만 드문 엣지 케이스를 떠올리고 반드시 처리하도록 합니다. 가능한 모든 면에서 놀라울 정도로 효율적인 코드를 작성하도록 돕습니다. – Tom MacWright (출처)

웹 커뮤니티에서 Rust의 사용은 여전히 비주류입니다.[^4] 아직 임계점에 도달하지 못했습니다. 자바스크립트 툴링을 위해 Rust를 배우는 것이 진입 장벽이 되겠지만, 흥미롭게도 개발자들은 기여하기 어렵더라도 더 빠른 도구를 선호합니다. 빠른 소프트웨어가 이깁니다.

현재, 인증, 데이터베이스, 결제 등 즐겨 사용하는 서비스를 위한 Rust 라이브러리나 프레임워크를 찾기가 어렵습니다. Rust와 WASM이 임계점에 도달하면 해결될 것이라고 생각하지만, 아직은 아닙니다. 기존 자바스크립트 도구들이 격차를 메우고 성능 개선을 점진적으로 도입하는 데 도움이 필요합니다.

자바스크립트 툴링의 미래

저는 Rust가 자바스크립트 툴링의 미래라고 믿습니다. Next.js 12는 Babel(트랜스파일)과 Terser(최소화)를 SWC와 Rust로 완전히 대체하는 전환을 시작했습니다. 이유는 무엇일까요?

  • 확장성: SWC는 라이브러리를 포크하거나 설계 제약을 우회하지 않고 Next.js 내부에서 Crate로 사용할 수 있습니다.
  • 성능: SWC로 전환해 Next.js에서 Fast Refresh는 약 3배, 빌드는 약 5배 빨라졌으며, 추가 최적화 여지가 남아 있습니다.
  • WebAssembly: Rust의 WASM 지원은 모든 플랫폼을 지원하고 Next.js 개발을 어디서나 가능하게 하는 데 필수적입니다.
  • 커뮤니티: Rust 커뮤니티와 생태계는 활발하고 계속 성장하고 있습니다.

SWC를 도입한 것은 Next.js만이 아닙니다.

Parcel은 SWC를 라이브러리처럼 사용합니다. 이전에는 Babel의 파서와 자바스크립트로 작성한 커스텀 변환을 사용했습니다. 이제는 SWC의 파서와 Rust로 작성한 커스텀 변환을 사용합니다. 스코프 호이스팅(scope hoisting) 전체 구현, 의존성 수집 등이 포함됩니다. Deno가 SWC 위에 구축한 방식과 유사한 범위입니다. – Devon Govett

Rust는 아직 초기 단계이며, 몇 가지 중요한 부분이 여전히 정리 중입니다.

  • 플러그인: Rust로 플러그인을 작성하는 것은 많은 자바스크립트 개발자에게 쉽지 않습니다. 동시에, 플러그인 시스템을 자바스크립트에 노출하면 성능 이점이 사라질 수 있습니다. 아직 명확한 해결책이 나오지 않았습니다. 이상적으로는 미래에 자바스크립트와 Rust를 모두 결합하는 방식이 될 것입니다. 자바스크립트로 플러그인을 작성하고 싶다면 속도를 희생하는 대가로 가능하고, 더 높은 성능이 필요하다면 Rust 플러그인 API를 사용하면 됩니다.
  • 번들링: 흥미로운 개발 영역 중 하나는 Webpack을 대체하는 SWC의 swcpack입니다. 아직 개발 중이지만 매우 유망할 수 있습니다.[^5]
  • WebAssembly: 앞서 언급했듯이, Rust로 코드를 작성하고 WASM으로 컴파일하는 전망은 매력적이지만, 아직 해야 할 작업이 남아 있습니다.

그럼에도 저는 Rust가 향후 1~2년, 그리고 그 이후로도 자바스크립트 생태계에 큰 영향을 미칠 것이라고 확신합니다. Next.js에서 사용하는 모든 빌드 도구가 Rust로 작성되어 최적의 성능을 제공하는 세상을 상상해 보세요.[^6] 그렇게 되면 Next.js는 NPM에서 다운로드하는 정적 바이너리(static binary)로 배포될 수도 있습니다.

그것이 제가 살고(그리고 개발하고) 싶은 세상입니다.

업데이트: 2023년

자바스크립트 생태계에서 새로운 Rust 툴링에 대한 투자가 늘었습니다. 주요 Rust 프로젝트 몇 가지를 소개합니다.

  • Biome: 이 글에서 앞서 언급한 Rome이 Biome가 되었습니다
  • Rspack: webpack 호환 기능을 갖춘 새로운 번들러
  • Pacquet (pnpm): Node.js를 위한 실험적인 패키지 매니저
  • Rolldown: Vite를 위한 새로운 번들러 (esbuild와 rollup 대체)
  • Oxc: Biome와 유사하게 파서, 린터, 포매터, 트랜스파일러, 미니파이어 등 통합 제공
  • Turbopack: Next.js 컴파일러를 구동하는 새로운 번들러 (현황)
  • Lightning CSS: 새로운 CSS 파서, 변환기, 번들러, 미니파이어

또한 Bun 1.0이 출시되어 Zig를 주목받게 하고 자바스크립트 생태계 전체의 속도를 높이는 데 기여했습니다.

업데이트: 2026년

2021년 이 글을 썼을 때, Rust가 자바스크립트 툴링을 대체한다는 것은 야심 찬 예측이었습니다. 2026년인 지금, 거의 모든 주요 자바스크립트 빌드 도구에 Rust 기반의 대안이 생겼거나 Rust로 재작성되었습니다. 2023년 업데이트에서 나열한 프로젝트들 중 다수가 안정적인 릴리스를 출하했습니다.

  • Turbopack: 이제 안정화되어 Next.js 16의 기본 번들러가 되었습니다. 프로덕션 빌드는 2~5배, Fast Refresh는 최대 10배 빨라졌습니다.
  • Rolldown: 2026년 5월에 1.0 안정 버전에 도달했습니다. Vite 내부에서 esbuild와 Rollup을 모두 대체하는 Rust 번들러로, Rollup보다 10~30배 빠릅니다. Vite 8은 2026년 3월에 이를 기본 번들러로 채택했습니다.
  • Oxc: Oxfmt(포매터)가 Prettier 완전 호환에 30배 속도로 베타에 도달했습니다. Oxlint는 Shopify, Airbnb, Mercedes-Benz에서 프로덕션에 사용 중입니다.
  • Biome v2: 타입스크립트 컴파일러 없이 타입 인식 린팅(type-aware linting)을 지원하는 최초의 JS/TS 린터입니다. GritQL 플러그인과 모노레포 지원도 포함됩니다.
  • Rspack: 2024년 8월에 완전한 webpack API 호환성을 갖춰 1.0에 도달했습니다. TikTok, Discord, Microsoft, Amazon에서 프로덕션에 사용 중입니다.
  • Tailwind CSS v4: 2025년 1월에 Oxide 엔진과 함께 출시되어, 연산 비용이 높은 작업에는 Rust를, CSS 처리에는 Lightning CSS를 사용합니다. 전체 빌드는 5배, 증분 빌드는 8배 빨라졌습니다.
  • Deno 2.0: 2024년 10월에 Node.js와 npm 완전 하위 호환성을 갖춰 출시되어, Rust 기반의 포매터, 린터, 툴링이 이제 주류 Node 프로젝트에서도 동작합니다.

패키지 매니저도 Rust로 이동하고 있습니다. pnpm 11.2(2026년 5월)는 실험적이고 선택적인 Rust 설치 엔진(pacquet, 2023년에 언급한 실험적 프로젝트)을 탑재했으며, 콜드 설치 시간의 대부분을 차지하는 페치·링크 단계를 담당합니다.

이 흐름은 다른 생태계로도 번지고 있습니다. Python에서는 Rust 기반 패키지 매니저 uv(pip보다 10~100배 빠름)와 Flake8, Black, isort를 대체하는 Ruff(린터·포매터)가 빠르게 자리잡고 있습니다. Rust는 자바스크립트뿐 아니라 모든 곳의 개발 툴링을 잠식하고 있습니다.

위의 esbuild 섹션에서 esbuild 제작자 Evan Wallace는 Go가 Rust보다 "훨씬 즐겁게 작업할 수 있는" 언어라고 말했습니다. Vue와 Vite의 제작자 Evan You는 반대 방향에 베팅하여, 2024년에 VoidZero를 설립하고 2025년에 통합 Rust 기반 자바스크립트 툴체인 구축을 위해 1,250만 달러 시리즈 A를 유치했습니다. Vite, Vitest, Rolldown, Oxc가 모두 이 우산 아래 있습니다. 2026년 6월, VoidZero는 Cloudflare에 인수되었습니다.

Rust는 AI 코딩 에이전트가 코드를 작성하기에도 훌륭한 언어임을 입증하고 있습니다. 저는 최근 코딩 에이전트만을 이용해 Rust 기반 이미지 압축기를 만들었습니다. 런타임 의존성 없이 38,000줄의 Rust 코드로 구성되었습니다. Rust의 엄격한 컴파일러는 AI 생성 코드와 궁합이 잘 맞습니다. 컴파일이 통과된다는 것은 다른 언어에 비해 코드가 훨씬 정확성에 가깝다는 의미입니다.

2026년 5월, Bun은 코딩 에이전트를 활용해 백만 줄 이상의 코드를 변경하며 핵심 전체를 Zig에서 Rust로 재작성했습니다. Rust는 코딩 에이전트 덕분에 지난 6개월 동안 크게 성장했습니다.

2021년 제가 묘사한 세상, 즉 모든 자바스크립트 빌드 도구가 Rust로 작성된 세상이 대부분 실현되었습니다.


  • [^1]: 이전에는 "가장 사랑받는 언어"라고 불렸습니다. Rust는 2016년부터 매년 Stack Overflow 개발자 설문조사에서 이 부문 1위를 차지하며 2025년까지 10년 연속 기록을 세웠습니다.
  • [^2]: Deno 2.0은 2024년 10월에 출시되어 Node.js와 npm의 완전한 하위 호환성을 갖추게 되었습니다.
  • [^3]: Rome는 2023년에 공식적으로 종료되고 Biome로 포크되어, 이후 타입 인식 린팅을 포함한 v2를 출시했습니다.
  • [^4]: 2026년 기준으로는 더 이상 사실이 아닙니다. 이제 거의 모든 주요 자바스크립트 빌드 도구에 Rust 기반 대안이나 대체재가 있습니다.
  • [^5]: swcpack은 출시되지 않았습니다. 이 영역은 RspackTurbopack이 채웠습니다.
  • [^6]: Turbopack이 기본 번들러가 되고 SWC가 Next.js 16에서 트랜스파일과 최소화를 담당하면서, 이 예측은 대부분 실현되었습니다.

0개의 댓글