Dev Craft

WebAssembly 3.0, 무엇이 달라졌나

2025년 9월 17일 WebAssembly 3.0이 새 표준으로 발표됐다. 64비트 주소 공간, 가비지 컬렉션, 예외 처리 등 6년 넘게 준비된 기능들이 들어갔다.

짧아지는 순서로 늘어선 가로선들의 색인을 그린 추상 도판
AI 생성

2025년 9월 17일, WebAssembly(Wasm) 3.0이 새 표준으로 공식 발표됐다. 3년 전 벡터 명령어와 벌크 메모리 연산을 도입한 2.0에 이어, 이번 3.0은 6년 넘게 준비된 대규모 기능들을 담은 중요한 업데이트다. 주요 변경 사항을 정리한다.

1. 64비트 주소 공간 (Memory64)

이제 메모리와 테이블의 주소 타입으로 i32뿐 아니라 i64를 쓸 수 있다. 사용 가능한 주소 공간이 기존 4GB에서 이론적으로 최대 16엑사바이트까지 확장된다.

웹 환경에서는 브라우저 정책에 따라 16GB로 제한되지만, 웹이 아닌 서버나 독립형 환경에서는 훨씬 큰 데이터셋을 다루는 대규모 애플리케이션을 Wasm으로 돌릴 수 있게 되어 활용성이 크게 높아졌다.

2. 다중 메모리

기존에는 여러 메모리 객체를 쓰려면 별도의 모듈에서만 선언하고 접근할 수 있었다. 이제 단일 모듈 안에서 여러 메모리를 직접 선언하고, 정의하거나 가져올 수 있으며, 메모리 간 데이터 복사도 직접 할 수 있다.

여러 Wasm 모듈을 하나로 합치는 정적 링킹 도구를 완벽하게 지원하고, 보안을 위한 주소 공간 분리나 버퍼링 같은 새 활용 사례를 연다.

3. 가비지 컬렉션

런타임이 자동으로 메모리를 관리하는 GC가 추가됐다. Wasm GC는 저수준으로 설계돼, 컴파일러가 structarray 같은 타입으로 데이터 구조의 메모리 레이아웃을 선언하면 Wasm이 할당과 수명 관리를 책임진다.

특정 언어에 치우치지 않고 기본적인 메모리 관리 빌딩 블록만 제공함으로써, Java·Kotlin·OCaml·Dart 같은 다양한 고수준 언어를 Wasm으로 효율적으로 컴파일할 기반을 마련했다.

4. 타입 레퍼런스

GC를 기반으로 타입 시스템이 대폭 확장됐다. 이제 레퍼런스 타입이 참조되는 힙 값의 정확한 형태를 기술할 수 있어 런타임 타입 검사 없이도 안전성을 보장한다. 함수 레퍼런스에도 적용돼 새 call_ref 명령어로 런타임 오버헤드 없이 안전한 간접 함수 호출이 가능해졌다.

5. 꼬리 호출

현재 함수를 즉시 끝내고 새 함수를 호출해 스택 공간이 추가로 쌓이는 것을 막는다. 함수형 프로그래밍 언어나 특정 컴파일러 최적화 기법에 매우 중요한 기능이다.

6. 예외 처리

기존에는 비효율적인 JavaScript 연동으로 구현하던 예외 처리를 이제 Wasm 안에서 네이티브로 지원한다. 예외 태그를 선언하고, throw로 예외를 일으키고, catch 핸들러로 특정 태그의 예외를 선택적으로 처리한다. 이식성 높고 효율적인 오류 처리가 가능해졌다.

7. 그 밖에

  • 완화된 벡터 명령어(Relaxed SIMD) — 최대 성능을 위해 특정 엣지 케이스에서 구현에 따라 다른 동작을 허용하는 ‘완화된’ 버전
  • 결정론적 프로필 — 블록체인처럼 결정론적 실행이 필수인 환경을 위해, 비결정적 결과를 낼 수 있는 명령어에 결정론적 기본 동작을 표준으로 정의해 플랫폼 간 완전히 동일한 실행을 보장한다
  • 커스텀 어노테이션 구문 — Wasm 텍스트 형식(.wat)에 주석을 붙이는 일반 구문
  • JS 문자열 내장 함수 — Wasm 안에서 JavaScript 문자열 값을 직접 접근하고 조작하는 새 내장 함수 라이브러리

정리

Wasm 3.0은 가비지 컬렉션, 예외 처리, 64비트 메모리 지원 같은 대규모 업데이트로 Java·Kotlin·C# 같은 고수준 언어를 Wasm으로 컴파일할 기반을 크게 강화했다. 대부분의 주요 브라우저와 독립형 엔진에서 이미 지원이 이뤄지고 있어, 앞으로 생태계 확장이 더 빨라질 것으로 기대된다.