Wasm 파일( WebAssembly)이란?

채동기·2023년 5월 20일
0

Rust

목록 보기
1/5

웹 어셈블리

WebAssembly는 네이티브에 가까운 성능으로 동작하며 컴팩트한 바이너리 포맷을 제공하는 저수준 어셈블리 언어입니다. C/C++, Rust 등과 같은 언어를 WebAssembly로 컴파일하여 웹에서 실행할 수 있습니다. WebAssembly는 JavaScript와 함께 실행되며 서로를 보완할 수 있도록 설계되었습니다.

웹어셈블리는 웹 플랫폼에서 매우 중요한 역할을 합니다. 여러 언어로 작성된 코드를 웹에서 네이티브에 가까운 속도로 실행할 수 있게 해주고, 이전에는 웹에서 실행할 수 없었던 클라이언트 애플리케이션도 웹에서 실행할 수 있게 해줍니다.

또한, 웹어셈블리는 JavaScript와 함께 사용되도록 설계되었습니다. WebAssembly JavaScript API를 통해 웹어셈블리 모듈을 JavaScript 애플리케이션에 불러와 두 언어 간의 기능을 공유할 수 있습니다.

웹 어셈블리의 목표

  • 빠르고 효율적: WebAssembly 코드는 일반적인 하드웨어를 활용하여 여러 플랫폼에서 네이티브에 가까운 속도로 실행됩니다.
  • 읽기 쉽고 디버그 가능: WebAssembly는 사람의 눈으로 읽을 수 있는 수준의 텍스트 포맷을 가지고 있어 사람이 손으로 작성하고, 보고, 디버깅할 수 있습니다.
  • 안전: WebAssembly는 샌드박싱된 실행 환경에서 실행되도록 설계되어 다른 웹 기술과 안전하게 상호 작용할 수 있습니다.
  • 호환성: WebAssembly는 다른 웹 기술과 호환되도록 설계되어 웹을 망치지 않습니다.

어떻게 웹 플랫폼에 적용할까?

WebAssembly는 웹 플랫폼에서 다음과 같이 적용됩니다:

  • 가상머신(VM): 웹어셈블리는 자바스크립트와 함께 실행되는 가상머신입니다. 이전에는 웹 브라우저의 VM이 자바스크립트만을 실행할 수 있었습니다. 하지만 웹어셈블리의 등장으로 웹 브라우저의 VM은 자바스크립트와 웹어셈블리 코드를 모두 실행할 수 있게 되었습니다.

  • Web API: 웹어셈블리는 웹 브라우저나 하드웨어의 기능을 호출하여 웹 애플리케이션에서 다양한 작업을 수행할 수 있는 Web API 집합과 함께 사용됩니다. 이는 DOM, CSSOM, WebGL, IndexedDB, Web Audio API 등과 같은 다양한 기능을 제공합니다.

웹어셈블리는 자바스크립트를 대체하기 위해 만들어진 것이 아니라, 자바스크립트와 함께 동작하여 두 언어의 강점을 상호 보완하도록 설계되었습니다. 자바스크립트는 웹 애플리케이션을 작성하기에 유연하고 표현력이 뛰어난 고수준 언어이며, 웹어셈블리는 저수준 언어로 네이티브에 가까운 성능을 제공하고 C++이나 Rust와 같은 언어의 컴파일 타겟으로 사용될 수 있습니다.

웹 브라우저의 VM은 이제 자바스크립트와 웹어셈블리 코드를 모두 실행할 수 있으며, 필요에 따라 두 형식의 코드가 서로를 호출할 수 있습니다. 웹어셈블리 자바스크립트 API를 사용하여 웹어셈블리 모듈을 자바스크립트 애플리케이션에 불러와 웹어셈블리 코드에서도 자바스크립트 함수를 호출할 수 있습니다.

Rust 및 WebAssembly 사용 사례

  1. 어플리케이션 전체를 만드는 경우: Rust를 기반으로 한 웹 애플리케이션을 개발할 수 있습니다. 이 경우 Rust로 백엔드 서버나 프론트엔드 웹 애플리케이션을 구축하고, WebAssembly를 사용하여 네이티브 수준의 성능과 기능을 웹에서 활용할 수 있습니다. 이러한 사용 사례의 예로는 yew와 같은 프로젝트가 있습니다.

  2. 어플리케이션의 일부를 만드는 경우: Rust를 기존에 존재하는 JavaScript 프론트엔드에서 사용하여 웹어셈블리 모듈을 통합할 수 있습니다. 이는 Rust로 작성된 일부 모듈이나 기능을 JavaScript 애플리케이션에 통합하여 성능을 향상시키는 데 사용될 수 있습니다. Rust와 WebAssembly를 함께 사용하여 웹어셈블리 모듈을 만들고, JavaScript와 상호 작용하며 JavaScript 애플리케이션과 통합할 수 있습니다.

참조

https://developer.mozilla.org/ko/docs/WebAssembly
https://developer.mozilla.org/ko/docs/WebAssembly/Rust_to_wasm

profile
what doesn't kill you makes you stronger

0개의 댓글