웹어셈블리

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the specification changes.

웹어셈블리는 현대 웹브라우저에서 돌릴 수 있는 새로운 형식의 코드입니다. 네이티브에 가까운 성능으로 돌아가며 컴팩트한 바이너리 포맷을 제공하는 저수준 어셈블리 언어로, C/C++ 등과 같은 언어의 컴파일 타겟으로써 그런 언어로 작성된 프로그램을 웹에서 돌릴 수 있게 해줍니다. 또한 자바스크립트와 나란히 돌아가면서, 서로를 보완할 수 있도록 설계되었습니다.

간단히 말해서

웹어셈블리는 웹 플랫폼에 있어서 상당히 큰 의의를 갖습니다 — 여러 언어로 작성된 코드들을 네이티브에 가까운 속도로 웹에서 돌릴 수 있는 길을 제공하며, 이전까지는 웹에서 돌려볼 수 없었던 클라이언트 앱들을 웹에서 돌릴 수 있도록 만들어주기 때문입니다.

웹어셈블리는 자바스크립트와 나란히 돌아가면서 서로의 부족한 부분을 보완할 수 있도록 설계되었습니다 — 웹어셈블리 자바스크립트 API를 사용해서 웹어셈블리 모듈을 자바스크립트 앱으로 불러와 둘 사이에 기능을 공유할 수 있습니다. 이는 웹어셈블리를 작성하는 법을 몰라도 같은 앱 안에서 웹어셈블리의 고성능과 자바스크립트의 유연함이라는 두 마리 토끼를 동시에 취할 수 있도록 합니다.

더 훌륭한 점은, 주요 브라우저 벤더의 적극적인 참여를 통해 W3C 웹어셈블리 커뮤니티 그룹에서 웹 표준으로 개발되고있다는 것입니다.

가이드

웹어셈블리의 컨셉
우선 웹어셈블리의 기본 개념 — 이게 무엇이고, 어째서 이게 유용하며, 어떻게 웹 플랫폼(또는 그 이상)으로 들여와졌으며, 어떻게 이것을 쓸 수 있는지 알아봅니다.
C/C++을 웹어셈블리로 컴파일하기
엠스크립튼 같은 도구를 사용해서 C/C++ 로 작성된 코드를 .wasm으로 컴파일할 수 있습니다. 이게 어떻게 작동하는지 알아봅시다.
Loading and running WebAssembly code
After you have a .wasm, this article covers how to fetch, compile and instantiate it, combining the WebAssembly JavaScript API with the Fetch or XHR APIs.
Caching compiled WebAssembly modules
Caching large WebAssembly modules on the client is useful for improving app startup performance. This article explains how to use this using IndexedDB.
Using the WebAssembly JavaScript API
Once you've loaded a .wasm module, you'll want to use it. In this article we show you how to use WebAssembly via the WebAssembly JavaScript API.
Exported WebAssembly functions
Exported WebAssembly functions are the JavaScript reflections of WebAssembly functions and allow calling WebAssembly code from JavaScript. This article describes what they are.
Understanding WebAssembly text format
This article explains the wasm text format. This is the low-level textual representation of a .wasm module shown in browser developer tools when debugging.
Converting WebAssembly text format to wasm
This article provides a guide on how to convert a WebAssembly module written in the text format into a .wasm binary.

API 참조

WebAssembly
이 객체는 모든 웹어셈블리와 관련된 기능의 네임스페이스로서 역할합니다.
WebAssembly.Module
WebAssembly.Module 객체는 이미 브라우저에 의해 컴파일된 상태없는 웹어셈블리 코드를 담고있습니다. 게다가 여러번 인스턴스화 시킬 수 있고 효과적으로 워커 사이에 공유가능하며 IndexedDB에 캐시 가능합니다.
WebAssembly.Instance
WebAssembly.Instance 객체는 상태를 가지며, 실행가능한 모듈의 인스턴스입니다. Instance 객체는 웹어셈블리 코드를 자바스크립트에서 부를 수 있도록 익스포트된 모든 웹어셈블리 함수를 포함하고있습니다.
WebAssembly.instantiate()
WebAssembly.instantiate() 함수는 웹어셈블리 코드를 받아서 컴파일하고 인스턴스화하여, 모듈과 그 모듈의 첫 인스턴스를 반환하는 기본적인 API입니다.
WebAssembly.Memory()
WebAssembly.Memory 객체는 사이즈 조절 가능한 어레이버퍼(ArrayBuffer)로, 인스턴스가 접근하는 메모리를 날(raw) 바이트들로 들고있습니다.
WebAssembly.Table()
WebAssembly.Table 객체는 인스턴스에 의해 접근되는 불투명한 값(함수 레퍼런스 등)들의 사이즈 조절 가능한, 형식지정된 배열입니다.
WebAssembly.CompileError()
새 웹어셈블리 CompileError 객체를 생성합니다.
WebAssembly.LinkError()
새 웹어셈블리 LinkError 객체를 생성합니다.
WebAssembly.RuntimeError()
새 웹어셈블리 RuntimeError 객체를 생성합니다..

예제

스펙

스펙 상태 설명
Web Assembly JavaScript API Draft 자바스크립트 API 정의 초안.

브라우저 호환성

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 57 No support 52 (52)[1] No support (Yes) No support
Feature Chrome for Android Android Webview Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 57 57 No support 52.0 (52)[1] No support No support No support

[1] 웹어셈블리는 파이어폭스 52+부터 활성화되었습니다. 다만 파이어폭스 52 확장 지원 릴리즈 (ESR.)에서는 비활성화 돼있습니다.

바깥 고리

문서 태그 및 공헌자

 이 페이지의 공헌자: 0xABCDEF, lukewagner
 최종 변경: 0xABCDEF,