본문 바로가기
목차
CE

[CE] WebAssmbly (WASM)

by ds31x 2025. 4. 21.
728x90
반응형

WebAssembly 개요

WebAssembly(줄여서 WASM)는

  • Web Browser 라는 Virtual Machine 환경에서
  • 고성능으로 프로그래밍 소스 코드를 실행할 수 있게 해주는
  • binary format(바이너리 형식)의 bytecode의 일종임.

https://deriv.com/derivtech/learning/webassembly-beyond-the-browser

위 그림에서 WAT은 Web Assembly Text format의 abbreviation임.

 

WSAM는 C, C++, Rust, Python 등과 같은 고급 언어로 작성된 코드를 개발 환경에서 WSAM으로 컴파일하여 웹에 배포(웹페이지와 함께)함.

  • 이는 웹에서 거의 네이티브 속도로 실행할 수 있게 해줌.
  • WebAssembly 컴파일러(예: Emscripten, wasm-pack 등)를 통해 미리 WASM 바이너리로 컴파일
  • 이 기술은 웹 애플리케이션의 성능을 크게 향상시키기 위해 설계되었음.

단, 배포할 때의 바이트코드(WASM 바이너리)의 크기가 JavaScript보다 크다는 단점이 있으나 runtime 성능은 보다 우수함.

JavaScript도 내부적으로는 bytecode를 사용하지만,
이는 각 엔진의 내부 구현 세부사항이며 WebAssembly처럼 직접 배포 가능한 형태는 아님.

 

https://dsaint31.me/mkdocs_site/CE/ch08/ce08_compiler_interpreter/?h=bytecode#bytecode

 

BME

Compiler Language and Interpreter Language compiled language 와 interpreted language라고도 불림. Compiler Language Compiler(High-level language를 machine language로 번역)를 사용하는 고급 언어. 프로그램 전체를 읽어들여 이를 o

dsaint31.me


웹 브라우저와 가상머신

현대 Web Browser 는 사실상 Virtual Machine 임:

  • 코드 실행 환경:
    • JavaScript 엔진(Chrome의 V8, Firefox의 SpiderMonkey 등)과
    • WebAssembly 런타임을 통해
    • 바이트코드를 실행
  • 플랫폼 독립성:
    • 운영체제나 하드웨어에 관계없이
    • 동일한 (바이트)코드 실행 가능
  • 메모리 관리:
    • 자동 메모리 관리 및
    • 시스템 메모리 직접 접근 제한
  • 샌드박스 보안:
    • 코드가 사용자 컴퓨터에 함부로 접근하는 것을 방지
  • 최적화 엔진:
    • JIT(Just-In-Time) 컴파일을 통한 성능 향상

이러한 가상머신 환경 위에서 WebAssembly는 JavaScript 대비 더 효율적인 코드 실행을 가능하게 함.

2024.04.22 - [분류 전체보기] - [CE] Virtual Machine, Web Browser and Bytecode.

 

[CE] Virtual Machine, Web Browser and Bytecode.

Virtual Machine (가상 머신) An abstract computer with an incredibly complicated instruction set (=Bytecode)implemented entirely in software bytecode란? https://dsaint31.me/mkdocs_site/CE/ch08/ce08_compiler_interpreter/?h=bytecode#bytecode BMECompiler

ds31x.tistory.com


WebAssembly(Wasm)의 주요 특징

  • 성능: JavaScript보다 빠른 실행 속도 제공
  • 안전성: 가상머신의 샌드박스 환경에서 실행되어 보안 강화
  • 호환성: 다양한 프로그래밍 언어에서 컴파일 가능
  • 효율성: 컴팩트한 바이너리 형식의 바이트코드로 빠른 다운로드 및 파싱 가능
  • 표준: W3C 표준으로 모든 주요 브라우저 가상머신에서 지원

WASM의 핵심 기능:

  • 바이너리 형식의 바이트코드로 컴파일되어 브라우저 가상머신에서 빠르게 로드 및 실행
  • 스택 기반 가상머신을 위한 명령어 세트
  • 타입 안전성 및 메모리 안전성 보장
  • JavaScript와의 상호 운용성: Chrome의 V8 엔진은 JavaScript 코드와 WebAssembly 모듈을 모두 실행할 수 있는 통합 환경을 제공
    • 내부에선 다른 방식으로 실행이 되나 웹브라우저의 가상머신이 이들간의 bridge역할을 함.
    • JavaScript: 동적 타입. 고수준 인터프리터와 JIT 컴파일 조합으로 실행.
    • WASM: 정적 타입. 저수준 바이트 코드로 더 직접적인 방식으로 실행됨.
  • 브라우저 가상머신의 웹 API 접근 가능

참고: WASI (WebAssembly System Interface)

WASI는 WebAssembly System Interface의 약자로,
WebAssembly가 브라우저 외부의 시스템 환경에서도 실행될 수 있도록 하는 표준 시스템 인터페이스 임.
이는 WebAssembly의 활용 범위를 브라우저 가상머신 밖으로 확장함.

 

WASI의 주요 특징:

  • 파일 시스템, 네트워크, 시간 등의 시스템 리소스에 안전하게 접근 가능
  • 모듈화된 디자인으로 필요한 기능만 사용 가능
  • 플랫폼 독립적인 방식으로 시스템 리소스 접근
  • 브라우저와 유사한 보안 모델이 내장되어 샌드박스 환경 제공
  • 서버 측 애플리케이션, IoT 기기, 클라우드 컴퓨팅 등 다양한 환경에서 활용 가능
WASI는 WebAssembly를
웹 브라우저 가상머신 을 넘어
범용 가상머신 기술 로 발전시키는 중요한 확장임.

 

이를 통해 "한 번 작성하고 어디서나 실행"이라는 WebAssembly의 비전을 보다 일반화시킨 것이라고 볼 수 있음.

728x90

'CE' 카테고리의 다른 글

[CE] Java Script Engine  (0) 2025.05.12
[CE] Memory(RAM)의 구조와 속도관련 표기법  (0) 2025.04.28
[Programming] MVC, MVVM, and Qt's MV  (0) 2025.04.14
[C] LLP64 vs. LP64  (0) 2025.03.21
[Py] bytecode 분석 - dis 모듈  (0) 2025.03.11