WebAssembly - WAT을 WASM으로 변환

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 WebAssembly의 세계로 흥미로운 여정을 떠납니다. 특히 WebAssembly 텍스트(WAT)를 WebAssembly 바이너리(WASM)로 변환하는 것에 중점을 두겠습니다. 이 용어들이 낯설게 느껴지시나요? 걱정 마세요. 우리는 모든 것을 단계별로 설명할 테니까요. 이 튜토리얼이 끝나면, 당신은 프로처럼 WAT를 WASM으로 변환할 수 있을 것입니다!

WebAssembly - Convert WAT to WASM

WebAssembly는 무엇인가요?

변환 과정에 들어가기 전에, WebAssembly이 무엇인지 이해해 보겠습니다. 모래성을 짓는다고 상상해 보세요. WebAssembly은 마법의 통로처럼 순식간에 완벽한 모래 구조를 만들어내는 것입니다. 이렇게 하면 해변에서의 창작물이 더 빠르고 인상적이 됩니다.

웹 개발의 세계에서 WebAssembly은 C++나 Rust와 같은 언어로 작성된 코드를 웹 브라우저에서 거의 네이티브 속도에 가깝게 실행할 수 있는 저수준 언어입니다. JavaScript와 함께 작동하여 웹 애플리케이션의 성능을 향상시킵니다.

WAT와 WASM: 기본 개념

이제 WAT와 WASM에 대해 이야기해 보겠습니다. WAT는 모래성의 도면을 인간이 읽을 수 있는 언어로 작성한 것처럼 생각해 보세요. 반면 WASM은 마지막 모래성처럼 컴퓨터가 이해하고 빠르게 실행할 수 있는 형태입니다.

  • WAT (WebAssembly Text Format): 인간이 읽을 수 있는, 어셈블리 언어와 유사
  • WASM (WebAssembly Binary Format): 컴퓨터가 읽을 수 있는, 압축된 바이너리 형식

WAT에서 WASM으로 변환: 과정

WAT를 WASM으로 변환하는 것은 모래성 도면을 실제 모래 구조로 변환하는 것과 같습니다. 이 과정을 단계별로 따라가 보겠습니다.

단계 1: WAT 코드 작성

먼저 우리는 WAT 코드를 작성해야 합니다. 간단한 예제를 보여드리겠습니다:

(module
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
(export "add" (func $add))
)

이 WAT 코드는 두 개의 32비트 정수를 더하는 함수를 정의한 모듈을 정의합니다. 모든 세부 사항을 이해하지 못하셔도 걱정 마세요. 이를 단계별로 설명해 드리겠습니다:

  1. (module ...): 우리의 모든 WAT 코드를 감싸는 것입니다.
  2. (func $add ...): "add"라는 이름의 함수를 정의합니다.
  3. (param $a i32) (param $b i32): 두 개의 32비트 정수 매개변수를 지정합니다.
  4. (result i32): 함수가 32비트 정수를 반환한다고 나타냅니다.
  5. local.get $alocal.get $b: 함수 매개변수를 가져옵니다.
  6. i32.add: 두 수를 더합니다.
  7. (export "add" (func $add)): 함수를 모듈 외부에서 접근할 수 있게 합니다.

단계 2: WAT 파일 저장

이 코드를 .wat 확장자로 저장한 파일에 저장하세요. 예를 들어, add.wat입니다.

단계 3: WAT에서 WASM으로 변환 도구 사용

이제 WAT를 WASM으로 변환하는 마법의 순간입니다. WebAssembly Binary Toolkit(WABT)의 일부인 wat2wasm 도구를 사용하겠습니다.

다음과 같이 사용하시면 됩니다:

  1. WABT를 설치하세요 (이미 설치되어 있지 않다면):
  • macOS에서: brew install wabt
  • Ubuntu에서: sudo apt-get install wabt
  • 기타 시스템에서는 WABT GitHub 저장소를 확인하세요
  1. 터미널을 엽니다 و wat2wasm 명령어를 실행합니다.
wat2wasm add.wat -o add.wasm

이 명령어는 wat2wasm을 사용하여 add.wat 파일을 add.wasm 파일로 변환합니다.

단계 4: WASM 파일 확인

축하드립니다! 우리는 첫 번째 WASM 파일을 생성했습니다. 하지만 이게 정말 작동했는지 어떻게 확인할 수 있을까요? WABT 도구 중 하나인 wasm2wat를 사용하여 WASM를 다시 WAT로 변환하고 원래 코드와 일치하는지 확인해 보겠습니다:

wasm2wat add.wasm -o add_verified.wat

이제 add_verified.wat 파일을 텍스트 편집기로 엽니다. 원래 WAT 코드와 매우 유사하게 보이지만, 약간의 포맷 차이가 있을 수 있습니다.

WASM 파일 사용

이제 WASM 파일을 가지고 있으니, 웹 애플리케이션에서 어떻게 사용할 수 있을까요? 간단한 HTML과 JavaScript 예제를 보여드리겠습니다:

<!DOCTYPE html>
<html>
<head>
<title>WebAssembly Add Function</title>
</head>
<body>
<h1>WebAssembly Add Function</h1>
<p>Result: <span id="result"></span></p>
<script>
(async () => {
const response = await fetch('add.wasm');
const bytes = await response.arrayBuffer();
const { instance } = await WebAssembly.instantiate(bytes);
const result = instance.exports.add(5, 3);
document.getElementById('result').textContent = result;
})();
</script>
</body>
</html>

이 HTML 파일은 우리의 WASM 모듈을 로드하고 add 함수를 5와 3의 인자로 호출합니다. 결과(8)는 페이지에 표시됩니다.

결론

이제 우리는 WAT 코드를 작성하고, 그것을 WASM으로 변환하고, 마침내 웹 페이지에서 사용하는 여정을 마쳤습니다. 기억해 두세요, 이것은 얼음의 일角일 뿐입니다. WebAssembly은 고성능 웹 애플리케이션의 무한한 가능성을 열어줍니다.

프로그래밍 여정을 계속하면서 다양한 WAT 함수를 실험하고 WebAssembly의 기능을 탐구해 보세요. 누구 knows? 당신은 세상을 바꿀 만한 웹 애플리케이션을 만들 수도 있을 것입니다!

미래의 WebAssembly 마법사 여러분, 행복하게 코딩하세요!

Credits: Image by storyset