WebAssembly: 의미, 장점, 사용 사례 등

게시 됨: 2022-10-12

WebAssembly 또는 Wasm은 모든 컴퓨터 아키텍처에서 실행할 수 있는 프로그램을 만들기 위한 이진 코드 형식입니다.

시스템은 가상 머신과 C 또는 C++와 같은 프로그래밍 언어의 컴퓨터 코드를 사람이 읽을 수 있는 .wat 및 바이너리 .wasm 형식으로 변환하는 컴파일러로 구성됩니다.

WebAssembly의 원래 목표는 브라우저 내에서 네이티브에 가까운 실행 속도를 가능하게 하여 프로그래머가 웹 페이지용 고성능 애플리케이션을 개발할 수 있도록 하는 것이었습니다. 그러나 이 기술은 이제 브라우저를 넘어 클라우드로 진화하는 것 같습니다.

이 가이드는 이 진화하는 기술, 강점과 약점, 미래 잠재력에 대해 알아야 할 모든 것을 보여줍니다.

목차

웹어셈블리란?

WebAssembly는 가상 머신에서 실행되고 다른 언어로 컴파일할 수 있는 바이너리 코드 형식입니다. 이식 가능하도록 설계되었으며 웹 브라우저 또는 서버 응용 프로그램에서 실행할 수 있습니다.

2017년에 처음 출시된 WebAssembly는 2019년부터 W3C 권장 사항이며 Mozilla, Google, Microsoft, Red Hat 등을 비롯한 수많은 기여자가 유지 관리합니다.

원래 목표는 브라우저 내부의 C/C++ 응용 프로그램에서 볼 수 있는 거의 기본 실행 속도를 개발하는 것이었습니다. 또한 이전 버전과 호환되고 JavaScript와 호환되는 안전한 개방형 표준, 디버그 가능 및 버전 없는 웹 표준을 의미합니다.

WebAssembly는 어떻게 작동합니까?

WebAssembly는 .wasm 바이너리 또는 .wat 텍스트 형식으로 컴파일된 컴퓨터 코드를 실행하기 위해 브라우저나 서버 환경에 포함될 수 있는 Java 또는 JavaScript와 같은 런타임 엔진으로 설계되었습니다.

WebAssembly 실행을 위한 코드를 작성하기 위해 개발자는 지원되는 수많은 언어 중 하나로 프로그램을 작성합니다. 그런 다음 WebAssembly 컴파일러를 사용하여 AOT(Ahead of Time) 또는 JIT(Just In Time)를 사용하여 컴파일합니다.

이 코드는 실행 환경에서 대부분의 작업을 수행할 수 있지만 브라우저의 DOM 개체에 액세스하거나 수정할 수는 없습니다. 이러한 상호 작용은 JavaScript를 통과해야 합니다.

샘플 WebAssembly 애플리케이션을 만드는 방법

아래에서 볼 수 있는 것처럼 몇 단계만 거치면 웹 브라우저용 Wasm 애플리케이션을 간단하게 만들 수 있습니다.

  1. Emscripten SDK를 다운로드하여 설치합니다.
  2. 샘플 helloworld.c 코드를 작성하거나 원하는 경우 C++/Rust에서 수행하십시오.
  3. 터미널에서 emcc helloworld.c -s WASM=1 -s helloworld.html 을 실행하여 Emscripten을 사용하여 코드를 WebAssembly로 컴파일합니다. 필요한 Wasm 바이너리, HTML 및 JavaScript 파일(접착제 코드)을 생성합니다.
  4. 웹 브라우저를 통해 helloworld.html 페이지를 제공합니다.

웹어셈블리의 장점

WebAssembly 및 관련 기술을 채택해야 하는 이유는 다음과 같습니다.

  • 네이티브에 가까운 성능 – WebAssembly는 C 및 C++와 같은 저수준 언어와 유사한 성능을 제공하는 저수준 설계를 가지고 있습니다.
  • 보안 – 시스템 액세스가 제한된 가상 환경에서 시스템을 격리하여 보안을 유지하도록 설계되었습니다.
  • 개방형 표준 – 많은 조직과 개인이 WebAssembly에 기여하고 있으며 공식 W3C 권장 사항입니다.
  • 경량 – WebAssembly는 가상 머신에서 실행될 바이너리 코드로 컴파일됩니다. 이 코드는 이식 가능하며 시스템 파일이 필요하지 않거나 함께 제공되지 않습니다.
  • 다국어 지원 – 50개 이상의 언어를 WebAssembly로 컴파일할 수 있습니다.
  • 플랫폼 독립적 – WebAssembly 가상 머신은 각 아키텍처가 동일한 런타임 환경을 제공하도록 설계되었습니다. 개발자는 WebAssembly용 코드를 작성하기만 하면 됩니다.

웹어셈블리의 한계

  • 작업 진행 중 – 표준은 아직 개발 중이므로 많은 기능과 개선 사항이 아직 제공되지 않습니다.
  • 가비지 수집 없음 – WebAssembly는 곧 구현될 수 있지만 여전히 가비지 수집이 부족합니다.
  • DOM 액세스 없음 – WebAssembly에서 직접 웹 브라우저의 DOM에 액세스할 수 없으며 JavaScript를 통해 이동해야 합니다.

웹어셈블리 대 자바

Java는 WebAssembly의 가장 초기 구현입니다. 한 번만 쓰고 어디에서나 실행할 수 있는 언어로 설계되었지만 그 과정에서 많은 문제가 발생했습니다.

Java와 마찬가지로 WebAssembly는 RE(런타임 환경)를 사용하여 코드를 실행하지만 Java와 달리 WebAssembly를 원하는 언어로 작성할 수 있습니다.

웹어셈블리 대 자바스크립트

WebAssembly는 JavaScript와 마찬가지로 브라우저 또는 기타 호스트 환경에서 실행됩니다. 그러나 JavaScript가 텍스트 형식으로 실행 환경에 전달되고 적시에 컴파일되는 경우 WebAssembly에는 텍스트 형식과 바이너리 형식이 모두 있습니다.

웹 브라우저 내에서 JavaScript는 DOM에 액세스할 수 있지만 WebAssembly는 액세스할 수 없습니다. 그러나 실행 속도와 관련하여 WebAssembly는 네이티브에 가까운 코드 실행 속도로 JavaScript를 능가합니다.

속도는 WebAssembly가 빛나는 곳이며 많은 용도에 이상적인 이유입니다. JavaScript를 사용하여 WebAssembly를 브라우저에 로드할 수 있으며 두 코드는 함께 실행되고 리소스를 공유할 수 있습니다.

WebAssembly 대 Docker 대 Kubernetes

Docker와 Kubernetes는 클라우드 컴퓨팅을 지원하는 인기 있는 두 가지 기술입니다. Docker는 개발자가 모든 시스템 종속성과 함께 애플리케이션을 단일 패키지로 패키징할 수 있도록 하는 컨테이너 기술입니다. 이를 통해 1초 이내에 모든 클라우드 환경에 애플리케이션을 쉽게 배포할 수 있습니다.

반면 Kubernetes는 Docker, CRI-O, containerd 및 모든 Kubernetes CRI(컨테이너 런타임 인터페이스) 구현과 같은 컨테이너화된 애플리케이션을 관리하고 배포하는 오픈 소스 시스템입니다. 또한 Kubernetes를 사용하면 여러 서버 또는 가상 머신에 걸쳐 클라우드 배포를 쉽게 확장할 수 있습니다.

이러한 관점에서 WebAssembly는 Docker와 더 유사하며 Kubernetes를 사용하여 컨테이너화된 클라우드 애플리케이션으로 실행할 수 있습니다. 또한 Docker에 비해 많은 이점을 제공하지만 이를 대체하지는 않을 것입니다.

브라우저 너머

태초에 웹 서버가 있었습니다. 전체 시스템을 서버로 전용해야 했습니다. 그런 다음 서버가 하나 이상의 CPU 스레드에서 실행되도록 허용하는 가상 머신 또는 VM이 ​​있었습니다. 그래도 전용 VM이 있어야 했습니다.

클라우드 컴퓨팅은 애플리케이션을 컨테이너화하여 필요할 때만 서버를 실행하고 실행할 수 있게 했습니다. 따라서 더 이상 전용 기계가 필요 없이 사용한 만큼만 비용을 지불하면 되므로 비용이 절감됩니다. 그러나 여전히 몇 가지 문제가 있습니다.

첫째, 도커 파일의 크기는 몇 기가바이트일 수 있으며 이는 시작 및 기타 관리 문제에 약간의 지연이 있음을 의미합니다. 그러나 유사한 Wasm 파일은 미리 컴파일된 바이너리이기 때문에 크기가 몇 MB에 불과할 수 있습니다. 이것은 Docker보다 훨씬 빠른 시작 시간을 제공하여 특정 시간이 중요한 애플리케이션에 적합합니다.

둘째, WebAssembly의 설계는 개발자가 시스템 리소스를 관리하고 할당할 필요가 없으며 선택한 프로그래밍 언어를 사용하여 간단하게 요점에 도달할 수 있음을 의미합니다.

이러한 기능으로 인해 WebAssembly는 클라우드 마이크로 서비스를 실행하는 데 이상적이지만 Docker 애플리케이션은 운영 환경 및 파일 시스템에 대한 더 많은 제어가 필요한 애플리케이션에 여전히 선호됩니다.

자세한 내용은 WasmCloud 및 WasmEdge와 같은 프로젝트에서 WebAssembly를 실행 가능한 컴퓨팅 플랫폼으로 개발하고 있습니다.

Wasm 사용 사례

WebAssembly의 고유한 특성을 감안할 때 많은 사용 사례가 있습니다. 그들은 세 가지 주요 그룹으로 나눌 수 있습니다. 브라우저 내, 브라우저 외부 및 하이브리드 설정.

브라우저 내 유형은 설명이 필요 없으며 브라우저 외부는 주로 서버, IoT 및 클라우드 배포를 나타내는 반면 하이브리드는 이 둘의 혼합을 나타냅니다.

다음은 Wasm이 탁월한 사용 사례를 보여줍니다.

  • 이미 존재하는 고성능 코드 – WebAssembly로 이식할 수 있는 오래되었지만 놀라운 코드입니다.
  • 새로운 고성능 코드 – 처음부터 설계하고 구현해야 하는 코드입니다.
  • 데스크탑 애플리케이션을 웹으로 포팅 – 이것은 웹 기반 비디오 편집과 같은 새로운 유형의 웹 기반 데스크탑 솔루션을 열 수 있습니다.
  • 클라우드 컴퓨팅 – 새로운 기회를 위해 Docker 및 Kubernetes와 함께 실행합니다.

다음은 Wasm이 탁월할 수 있는 특정 응용 프로그램 및 시나리오를 보여줍니다.

  • 비디오 및 이미지 편집
  • 게임 디자인
  • AI 애플리케이션
  • 가상 및 증강 현실 애플리케이션
  • 음악 응용 프로그램
  • P2P 애플리케이션
  • 서버측 애플리케이션
  • 클라우드/클러스터 계산
  • 컴퓨터 지원 설계
  • OS 플랫폼 시뮬레이션
  • 암호화
  • 로컬 웹 서버
  • 원격 데스크톱 애플리케이션
  • 과학적 시각화
  • 스마트폰의 하이브리드 네이티브 앱
  • IoT 기기에서

지원되는 언어 및 프레임워크 목록

50개 이상의 언어가 WebAssembly로 컴파일되며 가장 인기 있는 언어는 다음과 같습니다.

  • C++
  • 아르 자형
  • 루비
  • 빠른
  • 가다
  • 코틀린
  • PHP
  • Blazor – .NET 개발자를 위한 프레임워크입니다.
  • JwebAssembly – Java 바이트코드 및 JRuby, Jython, Groovy, Scala 및 Kotlin과 같은 관련 언어용 컴파일러입니다.
  • Yew – WebAssembly를 사용하여 다중 스레드 웹 앱을 만들기 위한 Rust 프레임워크입니다.
  • AssemblyScript – WebAssembly 코드를 생성하도록 특별히 설계된 언어입니다.
  • Grain – 강력한 형식의 함수형 언어입니다.
  • 모토코

여기에서 더 많은 언어를 찾을 수 있습니다.

WebAssembly 런타임 및 도구 목록

  • 모든 주요 브라우저에는 Wasm이 지원됩니다.
  • Pyodide – Pandas, NumPy, SciPy를 포함한 Python 과학 스택이 있는 브라우저의 Python 런타임입니다.
  • 워머
  • wagi – 마이크로 서비스 및 웹 앱용
  • Wasi – 모듈식 시스템 인터페이스
  • WasmTime – 빠르고 안전한 WebAssembly 런타임.
  • 와스머
  • 루셋
  • wasmCloud – 클라우드 환경
  • Krustlet – Rust로 작성된 Wasm 실행을 위한 Kubernetes kublete.
  • WasmEdge – 클라우드 및 에지 런타임 환경

결론

WebAssembly와 WebAssembly가 컴퓨팅에 필요한 것의 여정이 끝났습니다. 그리고 보시다시피, 그것은 많은 약속을 담고 있습니다.

아직 진행 중인 작업이지만 끊임없는 개발입니다. 관심이 있으시면 여기, 여기, 여기에서 더 많은 정보를 찾을 수 있습니다.