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 애플리케이션이 더 선호됩니다.
자세한 내용은 다음과 같은 프로젝트를 참조하세요. 와스엠클라우드 및 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 코드를 생성하기 위해 특별히 설계된 언어.
- 곡물 – 강력한 유형의 함수형 언어.
- 모토코
더 많은 언어를 찾을 수 있습니다 LINK.
WebAssembly 런타임 및 도구 목록
- 모든 주요 브라우저는 Wasm을 지원합니다
- 피오디드 – Pandas, NumPy, SciPy를 포함한 Python 과학 스택을 갖춘 브라우저의 Python 런타임.
- 워머
- 와기 – 마이크로 서비스 및 웹 앱의 경우
- 내가 그랬니 – 모듈형 시스템 인터페이스
- 와스엠타임 – 빠르고 안전한 WebAssembly 런타임.
- 와셔
- 루셋
- wasm클라우드 – 클라우드 환경
- 크러슬렛 – Wasm을 실행하기 위한 Kubernetes kublete는 Rust로 작성되었습니다.
- WasmEdge – 클라우드 및 엣지 런타임 환경
결론
우리는 WebAssembly와 그것이 컴퓨팅에 어떤 의미를 갖는지에 대한 여정의 끝에 왔습니다. 그리고 보시다시피, 그것은 많은 약속을 담고 있습니다.
아직 진행 중이지만 끊임없이 개발 중입니다. 관심이 있으시면 자세한 정보를 찾을 수 있습니다. LINK, LINK및 LINK.





