핵심 요약
- 독립형 .NET 웹어셈블리 컴파일러 NetWasm이 Rust보다 작은 용량의 WASM 바이너리 빌드 결과를 발표했습니다.
- 정밀 GC를 포함하고도 동일 워크로드 기준 Rust 대비 원본 10.7%, Brotli 압축 시 19.5% 더 작은 크기를 달성했습니다.
- 불필요한 런타임 요소를 덜어내고 도달 가능한 코드만 빌드하는 방식으로 용량을 줄였으며 속도 역시 Mono AOT보다 빠르게 측정되었습니다.
요약 C# 및 .NET CIL 코드를 웹어셈블리(WASM)와 WASI용 초소형 독립 실행 파일로 컴파일해 주는 독립형 프로젝트 'NetWasm'이 공개되어 해외 개발자 커뮤니티에서 화제를 모았습니다. 데스크톱 CLR, Mono, dotnet.js 등의 무거운 런타임이나 애플리케이션 DLL을 포함하지 않는 독자적인 컴파일러 및 런타임을 채택한 것이 특징입니다.
공개된 벤치마크에 따르면 동일한 'print-42' 워크로드 기준으로 NetWasm의 결과물 크기는 정밀 GC(Garbage Collector) 런타임을 포함하고도 47,895바이트를 기록했습니다. 이는 크기 최적화 설정을 적용한 Rust 1.95.0의 결과물(53,635바이트)보다 원본 기준 약 10.7%, Brotli-11 압축 기준 약 19.5% 더 작은 수치입니다. 호스트 엔진에서 GC를 제공받는 Kotlin(약 79KB)이나 TinyGo(약 93KB)와 비교해도 눈에 띄게 작은 풋프린트를 보여줍니다.
실행 성능 면에서도 마이크로소프트의 공식 Mono AOT 대비 메모리 할당 및 GC 벤치마크(전체 트랜잭션 26% 단축, 보존 객체 그래프 38% 단축, UI 변동 40% 단축)에서 우수한 처리 속도를 기록했습니다. 이처럼 크기를 대폭 줄일 수 있었던 비결로는 Roslyn이 생성한 CIL 중 도달 가능한 코드만 컴파일하는 폐쇄 세계(Closed-world) 컴파일, 데스크톱 런타임의 모든 가정을 덜어낸 경량 플랫폼 규격, 광범위한 런타임 리플렉션 배제 등이 꼽힙니다.
단순한 실험적 프로젝트를 넘어 C# 15 지원, 웹 워커 및 JS 모듈 연동, 정적 .a 라이브러리 링크, WASI P2 컴포넌트 생성, HTTP/JSON/XML/LINQ 등의 라이브러리를 지원하며 일반적인 dotnet CLI 환경에서 즉시 빌드와 실행이 가능합니다. 무겁다는 인식이 강했던 .NET 생태계가 웹어셈블리 영역에서 Rust마저 제치며 새로운 가능성을 보여주었다는 평가를 받고 있습니다.
Sponsored · 광고