WebAssembly: 의미, 장점, 사용 사례 등
WebAssembly의 열풍에 휩싸였지만 정확히 무엇인지 모르겠나요? 자세한 내용은 다음과 같습니다.

WebAssembly 또는 Wasm은 모든 컴퓨터 아키텍처에서 실행할 수 있는 프로그램을 만드는 바이너리 코드 형식입니다.
이 시스템은 C나 C++와 같은 프로그래밍 언어의 컴퓨터 코드를 사람이 읽을 수 있는 .wat 형식과 바이너리 .wasm 형식으로 변환하는 컴파일러와 가상 머신으로 구성되어 있습니다.
WebAssembly의 원래 목표는 브라우저 내에서 네이티브에 가까운 실행 속도를 구현하여 프로그래머가 웹 페이지에 고성능 애플리케이션을 개발할 수 있도록 하는 것이었습니다. 하지만 이 기술은 이제 브라우저를 넘어 클라우드로 진화하는 듯합니다.
이 가이드에서는 끊임없이 발전하는 이 기술에 대한 모든 정보와 장점, 단점, 그리고 미래 잠재력에 대해 알려드립니다.
WebAssembly란 무엇인가?
WebAssembly 는 가상 머신에서 실행되는 바이너리 코드 형식으로, 다양한 프로그래밍 언어에서 컴파일할 수 있습니다. 이식성을 고려하여 설계되었으며 웹 브라우저 또는 서버 애플리케이션으로 실행될 수 있습니다.
2017년에 처음 출시된 WebAssembly는 3년부터 W2019C 권장 사항으로 지정되었으며 Mozilla, Google, Microsoft, Red Hat 등 수많은 기여자에 의해 유지 관리되고 있습니다.
원래 목표는 브라우저 내에서 C/C++ 애플리케이션에서 찾을 수 있는 것과 같은 네이티브에 가까운 실행 속도를 개발하는 것이었습니다. 또한 이전 버전과 호환되고 JavaScript를 준수하는 안전하고 개방형 표준, 디버깅 가능하고 버전이 없는 웹 표준이 되도록 의도되었습니다.
WebAssembly는 어떻게 작동하나요?
WebAssembly는 .wasm 바이너리나 .wat 텍스트 형식으로 컴파일된 컴퓨터 코드를 실행하기 위해 브라우저나 서버 환경에 내장될 수 있는 Java나 JavaScript와 같은 런타임 엔진으로 설계되었습니다.
WebAssembly 실행을 위한 코드를 작성하려면 개발자가 지원되는 여러 언어 중 하나로 프로그램을 작성합니다. 그런 다음 AOT(Ahead of Time) 또는 JIT(Just in Time) 중 하나인 WebAssembly 컴파일러를 사용하여 컴파일합니다.
이 코드는 실행 환경에서 대부분의 작업을 수행할 수 있지만 브라우저의 DOM 객체에 액세스하거나 수정할 수 없습니다. 이러한 상호 작용은 JavaScript를 통과해야 합니다.
샘플 WebAssembly 애플리케이션을 만드는 방법
아래에서 볼 수 있듯이 몇 단계만 거치면 웹 브라우저용 간단한 Wasm 애플리케이션을 만들 수 있습니다.
- 다운로드 및 설치 Emscripten SDK.
- 샘플을 작성하세요 헬로월드.c 코드를 작성하거나 원하시면 C++/Rust로 작성해도 됩니다.
- 달리기 emcc helloworld.c -s WASM=1 -s helloworld.html 터미널에서 Emscripten을 사용하여 코드를 WebAssembly로 컴파일합니다. 필요한 Wasm 바이너리, HTML 및 JavaScript 파일(접착 코드)을 생성합니다.
- 웹 브라우저를 통해 helloworld.html 페이지를 제공합니다.
WebAssembly의 장점
WebAssembly와 관련 기술을 채택하는 데에는 여러 가지 이유가 있습니다. 여기에는 다음이 포함됩니다.
- 네이티브에 가까운 성능 – WebAssembly는 매우 저수준의 디자인으로 되어 있어 C나 C++와 같은 저수준 언어와 유사한 성능을 제공합니다.
- 보안 – 이 시스템은 제한된 시스템 접근이 가능한 가상 환경에 격리하여 보안되도록 설계되었습니다.
- 개방형 표준 – 많은 조직과 개인이 WebAssembly에 기여하고 있으며 이는 공식 W3C 권장 사항입니다.
- 가벼움 – WebAssembly는 가상 머신에서 실행될 바이너리 코드로 컴파일됩니다. 이 코드는 이식 가능하며 시스템 파일이 필요하지 않거나 시스템 파일과 함께 제공되지 않습니다.
- 다국어 지원 – 50개 이상의 언어가 WebAssembly로 컴파일될 수 있습니다.
- 플랫폼 독립적 – 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초 이내에 모든 클라우드 환경에 애플리케이션을 쉽게 배포할 수 있습니다.
반면 쿠버네티스는 Docker, CRI-O, containerd 및 모든 쿠버네티스 CRI(컨테이너 런타임 인터페이스) 구현과 같은 컨테이너화된 애플리케이션을 관리하고 배포하는 오픈 소스 시스템입니다. 쿠버네티스는 또한 여러 서버 또는 가상 머신에서 클라우드 배포를 쉽게 확장할 수 있도록 합니다.
이 관점에서 WebAssembly는 Docker와 더 유사하며 Kubernetes를 사용하여 컨테이너화된 클라우드 애플리케이션으로 실행되도록 만들 수 있습니다. 또한 Docker보다 많은 이점을 제공하지만 아마도 Docker를 대체하지는 않을 것입니다.
브라우저를 넘어서
처음에는 웹 서버가 있었습니다. 서버로 전체 머신을 전담해야 했습니다. 그런 다음 가상 머신 또는 VM이 있었는데, 이를 통해 서버가 하나 이상의 CPU 스레드에서만 실행될 수 있었습니다. 그래도 전담 VM이 있어야 했습니다.
클라우드 컴퓨팅 덕분에 애플리케이션을 컨테이너화하여 필요할 때만 서버를 실행하고 배포할 수 있게 되었습니다. 이는 사용한 만큼만 비용을 지불하면 되므로 전용 서버 구축이 필요 없어져 비용 절감으로 이어졌습니다. 하지만 여전히 몇 가지 문제점이 남아 있습니다.
첫째, 도커 파일은 수 기가바이트 크기일 수 있으며, 이는 시작 및 기타 관리 문제에 약간의 지연이 있음을 의미합니다. 그러나 유사한 Wasm 파일은 사전 컴파일된 바이너리이기 때문에 몇 MB 크기일 수 있습니다. 이는 도커보다 훨씬 빠른 시작 시간을 제공하며, 특정 시간에 민감한 애플리케이션에 적합합니다.
두 번째로, WebAssembly의 설계는 개발자가 시스템 리소스를 관리하거나 할당할 필요가 없고, 선택한 프로그래밍 언어를 사용하여 간단히 요점만 얻을 수 있다는 것을 의미합니다.
이러한 기능 덕분에 WebAssembly는 클라우드 마이크로 서비스를 실행하는 데 적합하지만, 운영 환경과 파일 시스템에 대한 더 많은 제어가 필요한 애플리케이션에는 여전히 Docker 애플리케이션이 더 선호됩니다.
더 자세한 내용은 WasmCloud 및 WasmEdge 와 같은 프로젝트 에서 WebAssembly를 실용적인 클라우드 컴퓨팅 플랫폼으로 개발하고 있는 내용을 참조하십시오.
Wasm 사용 사례
WebAssembly의 독특한 특성으로 인해 사용 사례가 많습니다. 이는 브라우저 내, 브라우저 외, 하이브리드 설정의 세 가지 주요 그룹으로 나눌 수 있습니다.
브라우저 내 유형은 설명이 필요 없을 정도로 명확하고 브라우저 외부는 주로 서버, IoT, 클라우드 배포를 의미하고 하이브리드는 두 가지를 혼합한 것을 의미합니다.
Wasm이 탁월한 성과를 거둘 수 있는 사용 사례는 다음과 같습니다.
- 이미 존재하는 고성능 코드 – WebAssembly로 이식할 수 있는 오래되었지만 놀라운 코드입니다.
- 새로운 고성능 코드 – 처음부터 설계하고 구현해야 하는 것.
- 데스크톱 애플리케이션을 웹으로 이식 – 이를 통해 웹 기반 데스크톱 솔루션의 새로운 종류가 열릴 수 있습니다. 웹 기반 비디오 편집.
- 클라우드 컴퓨팅 – Docker와 Kubernetes와 함께 새로운 기회를 모색합니다.
Wasm이 탁월한 성과를 거둘 수 있는 구체적인 애플리케이션과 시나리오는 다음과 같습니다.
- 비디오 및 이미지 편집
- 게임 디자인
- AI 애플리케이션
- 가상 및 증강 현실 애플리케이션
- 음악 어플리케이션
- P2P 애플리케이션
- 서버 측 애플리케이션
- 클라우드/클러스터 계산
- 컴퓨터 지원 설계
- OS 플랫폼 시뮬레이션
- 암호화
- 로컬 웹 서버
- 원격 데스크톱 애플리케이션
- 과학적 시각화
- 스마트폰의 하이브리드 네이티브 앱
- IoT 기기에서
지원되는 언어 및 프레임워크 목록
50개 이상의 언어가 WebAssembly로 컴파일되며, 그 중 가장 인기 있는 언어는 다음과 같습니다.
- C
- C + +
- R
- 루비
- 빠른
- Go
- 코 틀린
- 녹
- PHP
- 블레이저 – .NET 개발자를 위한 프레임워크.
- Jweb어셈블리 – Java 바이트코드 및 JRuby, Jython, Groovy, Scala, Kotlin과 같은 관련 언어를 위한 컴파일러.
- 흔히 묘지에 심는 상록수 – WebAssembly를 사용하여 멀티스레드 웹앱을 만드는 Rust 프레임워크입니다.
- 어셈블리스크립트 – WebAssembly 코드를 생성하기 위해 특별히 설계된 언어.
- 곡물 – 강력한 유형의 함수형 언어.
- 모토코
여기에서 더 많은 언어를 찾을 수 있습니다.
WebAssembly 런타임 및 도구 목록
- 모든 주요 브라우저는 Wasm을 지원합니다
- 피오디드 – Pandas, NumPy, SciPy를 포함한 Python 과학 스택을 갖춘 브라우저의 Python 런타임.
- 워머
- 와기 – 마이크로 서비스 및 웹 앱의 경우
- 내가 그랬니 – 모듈형 시스템 인터페이스
- 와스엠타임 – 빠르고 안전한 WebAssembly 런타임.
- 와셔
- 루셋
- wasm클라우드 – 클라우드 환경
- 크러슬렛 – Wasm을 실행하기 위한 Kubernetes kublete는 Rust로 작성되었습니다.
- WasmEdge – 클라우드 및 엣지 런타임 환경
맺음말
우리는 WebAssembly와 그것이 컴퓨팅에 어떤 의미를 갖는지에 대한 여정의 끝에 왔습니다. 그리고 보시다시피, 그것은 많은 약속을 담고 있습니다.
아직 개발 중인 단계이지만, 지속적으로 개선되고 있습니다. 더 자세한 정보는 여기 , 여기 , 그리고 여기에서 확인하실 수 있습니다.





