AI Briefing

Cloudflare, Emscripten 지원으로 Workers에서 네이티브 Rust와 Tokio 실행 가능

·2026.09.28 22:00

핵심 내용

Cloudflare가 Emscripten 지원으로 Workers에서 네이티브 Rust와 Tokio 실행을 가능하게 했다.

자세히 보기

Cloudflare가 wasm-bindgen 도구 체인 내에서 Emscripten wasm32-unknown-emscripten Rust 컴파일러 타겟을 지원하는 실험적 프리뷰를 공개했다. 이 통합으로 Tokio 비동기 런타임을 사용하는 네이티브 Rust 코드를 Cloudflare Workers 및 기타 WebAssembly 환경에서 직접 실행할 수 있게 됐다.

도구 체인 상호 운용성

이 기능은 JavaScript 바인딩과 모듈 로딩을 관리하던 Emscripten과 wasm-bindgen 간의 기존 충돌을 해결한다. Google의 Portable Toolchains 팀과 협력한 새로운 워크플로우는 Emscripten이 빌드를 주도하고 wasm-bindgen이 이식 가능한 JavaScript 바인딩을 생성하도록 하며, -sWASM_BINDGEN 구성으로 활성화된다.

Tokio 런타임 통합

단일 스레드 JavaScript 이벤트 루프에서 Tokio의 비동기 모델을 지원하기 위해 Cloudflare는 두 가지 접근 방식을 구현했다.

  • JSPI (JavaScript Promise Integration): Tokio의 parking 시맨틱을 JSPI 스택 서스펜션에 매핑하며, 런타임 패닉을 방지하기 위해 신중한 스레드 로컬 컨텍스트 스왑이 필요하다.
  • LocalEventLoop: Tokio의 루프를 명시적인 drive() 연산과 호스트 소유의 Waker로 분리하는 제안된 설계로, 호스트 이벤트 루프가 차단 없이 자체 작업과 Tokio 작업을 교대로 처리할 수 있게 한다.

네트워킹 및 소켓

epoll에 의존하는 Tokio의 I/O 드라이버를 지원하기 위해 Cloudflare는 Emscripten에 40개 이상의 풀 리퀘스트를 기여하여 -sNODERAWSOCKETS 계층을 생성했다. 이 계층은 Emscripten의 가상화 계층을 node:net API에 연결하여 Workers에서 TCP, UDP, Unix 소켓을 사용할 수 있게 한다.

데모: Workers에서의 Minecraft

스택 검증을 위해 엔지니어들은 Rust 기반 Minecraft 서버인 Pumpkin을 Durable Object 내에서 실행되도록 포팅했다. 이 포팅은 Pumpkin의 멀티스레드 아키텍처를 협력형 Tokio 작업으로 변환하고, 커스텀 파일 시스템 백엔드를 사용해 월드 데이터를 Durable Object의 SQLite 데이터베이스에 저장했다. 해당 서버는 Workers TCP 인그레스를 통해 멀티플레이어 연결을 성공적으로 처리한다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.