토픽 110 / 111·코드 실행 체계 (Code Execution Model)
WebAssembly (Wasm)
WebAssembly (Wasm)
웹 브라우저 및 다양한 런타임에서 실행 가능한 이진 명령어 형식의 이식 가능한 저수준 바이트코드로, C/C++/Rust 등 다양한 언어에서 컴파일하여 네이티브에 근접한 성능을 제공
목적: 웹 고성능 실행, 언어 다양성, 이식성, 보안(샌드박스)
특징: 바이너리 포맷(.wasm), 스택 기반 VM, 샌드박스 실행, 선형 메모리, 결정론적 실행
구성요소: ① 모듈(Module) ② 선형 메모리(Linear Memory) ③ 테이블(Table) ④ 인스턴스(Instance) ⑤ 임포트/익스포트
동작: 소스코드(C/Rust/Go) → 컴파일러(Emscripten/wasm-pack) → .wasm 바이너리 → 런타임(V8/Wasmtime/Wasmer)에서 실행
WASI(WebAssembly System Interface): 브라우저 밖 시스템 자원 접근 표준 인터페이스, 파일/네트워크/소켓
적용사례: 브라우저(게임/영상편집/CAD), 서버리스(Cloudflare Workers/Fastly), 플러그인 시스템, 컨테이너 대안, 엣지 컴퓨팅
장점: 네이티브급 성능, 다중 언어 지원, 강력한 보안(샌드박스), 작은 바이너리, 빠른 시작
단점: DOM 직접 접근 불가(JS 브릿지 필요), GC 미지원(수동 메모리), 디버깅 어려움, 제한된 시스템 접근
비교: Wasm(바이너리/빠름/다중언어) vs JavaScript(텍스트/유연/웹표준) vs 컨테이너(무거움/풀스택/격리)
연관: 바이트코드, 가상머신, 컨테이너, 서버리스, 엣지 컴퓨팅, LLVM