제목 : WebAssembly 와 Node.js
WebAssembly 는 높은 성능을 가진 어셈블리와 비슷한 언어이며,
C, C++, Rust, AssemblyScript 를 포함하는 다양한 언어들로부터 컴파일 될 수 있습니다.
현재, 이는 크롬, 파이어폭스, 사파리, 엣지, 그리고 Node.js 에서 지원되고 있습니다.
웹어셈블리(WebAssembly) 의 세부 사양은 두 가지 파일 형태이며,
.wasm
확장자를 가진 웹 어셈블리 모듈로 불리는 이진 형태,
그리고 .wat
확장자를 가진 텍스트 형식의 웹 어셈블리로 불리는 텍스트 표현 형식 이 있습니다.
핵심 개념
- Module - 이진 웹어셈블리로 컴파일되는데, 즉,
.wasm
파일입니다. - Memory - 재조정 가능한 ArrayBuffer 입니다.
- Table - 크기 조정 가능한 참조 배열이며, Memory 에 저장되지는 않습니다. - Cache?
- Instance - 이것의 Memory, Table, 변수들을 가진 모듈을 인스턴스화합니다.
무슨 얘기인가 했더니, 앞으로 나올 이러한 단어들은 위의 단어를 의미하며,
웹어셈블리 모듈을 JS 로 불러 올 시, Memory, Table, Variables 를 불러온다는 의미이다.
WebAssembly 를 사용하기 위해서, 당신은 .wasm
이진 파일이 필요하며,
웹어셈블리와 소통하기 위한 API 들을 설정해야 합니다.
Node.js 는, 전역 객체인 WebAssembly
를 통해서 중요한 API 들을 제공합니다.
console.log(WebAssembly);
/*
Object [WebAssembly] {
compile: [Function: compile],
validate: [Function: validate],
instantiate: [Function: instantiate]
}
*/
WebAssembly 모듈을 생성하기
웹어셈블리 이진 파일들을 생성할 수 있는 여러개의 방법론이 있습니다 :
- 손으로 직접 WebAssembly(
.wat
) 를 작성하고, 이를 이진 형식으로 변환하려면, wabt 와 같은 도구를 사용하세요 - emscripten 로 C / C++ 어플리케이션을 사용할 수 있습니다.
- wasm-pack 로 Rust 어플리케이션을 사용할 수 있습니다.
- AssemblyScript 로 Typescript 처럼 사용할 수 있습니다.
이러한 도구들 중 몇몇은 이진 파일을 생성할 뿐만 아니라, JS "glue" 코드를 생성하며,
알맞는 HTML 파일로 브라우저에서 실행할 수 있습니다.
어떻게 사용하나요
한 번 WebAssembly** 모듈을 가지고 나면,
Node.js 의WebAssembly
객체를 사용하여 인스턴스화 할 수 있습니다.
// add.wasm 파일이란 것이 존재하고, 2 개의 인자를 더하는 단 하나의 function을 담고 있다고 가정합니다.
const fs = require("node:fs");
const wasmBuffer = fs.readFileSync("/path/to/add.wasm");
WebAssembly.instantiate(wasmBuffer).then(wasmModule => {
// 송출된 function - add 는 instance.exports 밑에 살아있습니다.
const {add} = wasmModule.instance.exports;
const sum = add(4, 5);
console.log(sum); // 결과 : 9
})
운영체제와 상호작용하기
웹어셈블리 모듈은 고유의 OS 기능과 직접적으로 제어할 수 없습니다.
써드 파티 도구인 Wasmtime 가 해당 운영체제 기능에 접근하는 데 사용 될 수 있습니다.
Wasmtime
도구는 WASI API 를 운영체제 기능에 접근하는 데 사용합니다.
'Node.js > Node.js 공식문서' 카테고리의 다른 글
Node.js 의 NODE_ENV 에 따른 차이점 (0) | 2024.09.19 |
---|---|
ECMAScript 2015 (ES6) 와 그 이후 (0) | 2024.09.18 |
NPM 패키지 매니저에 대한 소개 (2) | 2024.09.17 |
V8 자바스크립트 엔진 (4) | 2024.09.15 |
Node.js 공식문서 - Node.js 와 브라우저 간의 차이점 (0) | 2024.09.14 |