웹어셈블리(WebAssembly)의 시스템 인터페이스인 WASI(WebAssembly System Interface)가 0.3 버전으로 공식 업데이트되었습니다. 이번 릴리스의 핵심은 웹어셈블리 컴포넌트 모델(Component Model)에 비동기(async) 처리 기능이 기본적으로 내장되었다는 점입니다. WASI 서브그룹의 투표로 0.3.0 사양이 안정화되었으며, 런타임과 툴체인 지원이 빠르게 이루어지고 있습니다.
기존 WASI 0.2에서는 각 컴포넌트가 자체적인 이벤트 루프(event loop)를 필요로 했고, 이로 인해 컴포넌트 간 비동기 작업 조율이 불가능했습니다. 스트리밍(streaming)이나 비동기 API를 사용하는 컴포넌트는 다른 컴포넌트와 함께 구성하기 어려웠습니다. 하지만 WASI 0.3에서는 호스트(host)가 모든 컴포넌트가 공유하는 단일 이벤트 루프를 관리하도록 변경되었습니다. 이는 `stream<T>`, `future<T>`, `async`와 같은 개념이 컴포넌트 모델의 표준 ABI(Canonical ABI)에 1급(first-class) 구성 요소로 추가되었기 때문입니다. 이 새로운 비동기 모델은 리눅스의 `io_uring`이나 윈도우의 IOCP/IoRing API와 유사한 완료 기반(completion-based) 방식으로 작동하여, 더욱 효율적인 비동기 처리를 가능하게 합니다.
이러한 변화는 언어 바인딩(language binding) 생성에도 큰 영향을 미칩니다. 컴포넌트 모델의 강점 중 하나는 다른 언어와의 바인딩 생성을 용이하게 한다는 것인데, 비동기 기능이 기본으로 통합되면서 각 언어의 특성에 맞는 비동기 바인딩을 생성할 수 있게 되었습니다. 예를 들어, Rust에서는 `async fn handle`과 같이 자연스러운 비동기 함수 구현이 가능해졌고, Python, JavaScript, C#, C 등 다양한 언어에서도 스택리스 코루틴(stackless coroutine)을 활용한 비동기 지원이 진행 중입니다. 특히 Go와 같이 스택풀(stackful) 코루틴을 사용하는 언어의 경우, 런타임이 동기처럼 보이는 호출을 비동기 호출로 변환하고 고루틴(goroutine)을 통해 동시 실행을 제공하여, 스트리밍 데이터를 효율적으로 처리할 수 있게 됩니다.
WASI 0.3은 웹어셈블리 생태계에 중요한 진전을 가져왔습니다. 컴포넌트 간 상호 운용성을 크게 향상시키고, 개발자들이 복잡한 비동기 로직을 더 쉽고 효율적으로 구현할 수 있도록 돕습니다. 이는 웹어셈블리가 웹 브라우저를 넘어 서버리스(serverless) 환경, 엣지 컴퓨팅(edge computing) 등 다양한 분야에서 더욱 강력한 플랫폼으로 자리매김하는 데 기여할 것입니다. 개발자들은 이제 WASI를 통해 고성능의 이식성 높은 애플리케이션을 더 쉽게 구축할 수 있게 되었습니다.