'웹의 미래' 최신 웹어셈블리 툴 8가지

InfoWorld
웹어셈블리(WebAssembly), 일명 Wasm은 브라우저 안에서 코드를 실행하고 웹에서 자바스크립트 외에 다른 언어를 지원하며 애플리케이션의 속도를 높인다. 툴 생태계도 발전하고 있고 브라우저 개발사인 애플, 구글, 마이크로소프트, 모질라가 이를 지원한다.

© Getty Images Bank

기존 웹어셈블리 툴 중에서는 웹어셈블리 해석기를 제공하는 Rust-wasm, 웹어셈블리 바이너리 파일 읽기 및 쓰기를 위한 C# 라이브러리인 Wasmlib 등이 유명하다. 하지만 더 많은 툴이 웹어셈블리 생태계를 풍부하게 하고 있다. 살펴볼만한 새로운 툴 8종 정리했다.

라이프(Life)
클라우드 마켓 펄린(Perlin)의 라이프 프로젝트는 구글의 고(Go) 언어로 작성된 교차 플랫폼 VM으로 구성된다. 안전하고 빠르며 모듈식이며, 여러 기기에서 높은 연산력이 요구되는 코드를 실행한다. 본래 펄린에서 연산 작업을 위한 실행 환경으로 개발됐지만 웹어셈블리 레퍼런스 매뉴얼에 따라 수정됐고 일련의 최적화 기법을 사용한다. 네이티브에 대한 의존성이 없으며 교차 컴파일을 통해 윈도우, 리눅스, 맥OS, 안드로이드, iOS 등에서 실행할 수 있다. 사용자 코드는 보안을 위해 샌드박스 처리된다. 펠린 깃허브 저장소에서 다운로드할 수 있다.

네뷸렛(Nebulet)
현재 개발 중인 마이크로커널(Microkernel)로, 성능을 높이기 위해 링(Ring) 0 및 단일 주소 공간에서 웹어셈블리 모듈을 실행한다. 네뷸렛은 일부 작업 부하, 특히 서버와 관련된 작업에서 뛰어난 성능을 보여준다. 단, 링 0에서 모듈을 구동하면 보안 플래그가 올라갈 수 있으며 스펙터, 멜트다운, 실행 버그에 대한 우려가 증가할 수 있다. 이는 설립자 라클란 스네프도 인정하는 단점인데, 문제가 얼마나 커질지는 알 수 없는 상황이다.

2018년 구글 SoC(Summer of Code) 프로젝트에서 네뷸렛은 하위 컨텍스트 스위치 오버헤드, 기능 호출로 시스템 호출, 일반적인 운영체제에서는 불가능한 최적화 등을 지원했다. 크레인리프트(Cranelift) 코드 생성기는 웹어셈블리를 네이티브 기계 코드로 컴파일한다. 컴파일 후 애플리케이션과 런타임 사이에는 복잡한 상호작용이 없다. 네뷸렛의 커널은 러스트로 작성된다. 네뷸렛은 깃허브에서 다운로드할 수 있다.

와사비(Wasabi)
와사비는 'WebAssembly analysis using binary instrumentation'을 의미한다. 동적 분석 프레임워크다. 와사비는 프로그램 실행 중 프로그램 속성을 관찰한다. 동적 분석은 버그를 해결하고 성능 병목현상과 보안 문제를 확인하기 위해 사용된다.

와사비는 통계적으로 program.wasm 등의 웹어셈블리 바이너리를 구성하며 프로그램의 원본 지침에 지침을 삽입한다. 바이트코드를 소스 코드와 독립되게 수정한다. 이 프로그램은 동적 분석을 수행하기 위해 현재 구성된 program.wasm을 이용해 웹사이트를 연다. 사용자 작성 분석 기능을 웹어셈블리 프로그램에 알리기 위해 wasabi.js 스크립트가 analysis.js와 함께 페이지에 추가된다. 와사비는 러스트와 함께 일부 자바스크립트 코드로 작성됐다. 와사비는 해당 프로젝트의 깃허브 저장소에서 다운로드할 수 있다.

Wasmjit
코어를 C90으로 작성한 임베디드형 Wasmjit 웹어셈블리 런타임은 주로 Emscripten 생성 웹어셈블리 모듈을 호스팅하는 리눅스 커널 모듈로 쓰인다. 이 구성에서는 링 0에서 실행되며 시스템 호출에 정상 기능 호출로 액세스한다. 개발자 라이언 헌터는 이것이 리눅스 커널에 포함되기를 바라고 있다. 헌터는 최근 Wasmjt로 엔진x(Nginx) 웹 서버를 구동했다.

네뷸렛과 마찬가지로 Wasmjit에 대한 보안 문제와 함께 스펙터 및 멜트다운에 대한 잠재적인 취약성에 관한 우려가 있다. Wasmjit는 스펙터에 취약하지만 보완 방법을 개발하고 있다. Wasmjit은 해당 프로젝트의 깃허브 저장소에서 다운로드할 수 있다.
 
---------------------------------------------------------------
웹 디자인 인기기사
->모바일 '친화적인' 웹사이트 구축 팁 12선
->칼럼 | 2016 - 2017년 웹 디자인 트렌드 전망
->기업 웹 사이트 디자인, 13가지 간단 팁
-> '고정관념 버려라' 터치 앱 개발 UX 가이드
---------------------------------------------------------------

WAVM
WAVM(WebAssembly Virtual Machine)은 웹어셈블리용 단독형 VM이다. 표준 바이너리 형식뿐만 아니라 웹어셈블리 레퍼런스 해석기로 정의한 텍스트 형식을 로드할 수 있다. 텍스트 형식의 경우 WAVM은 레퍼런스 해석기가 사용하는 표준 스택(Stack) 기계 구문과 AST 구문뿐만 아니라 모든 테스트 명령을 로드할 수 있다.

WAVM을 구축하려면 C메이크 구축 소프트웨어와 LLVM 6.0 컴파일러(Compiler)가 필요하다. WAVM은 C++로 윈도우에서, GCC 및 클랭(Clang)으로 리눅스에서, X코드(Xcode)/클랭으로 맥OS에서 테스트를 거쳤다. WAVM은 깃허브에서 다운로드할 수 있다.

와빗(WebAssembly Binary Toolkit, WABT)
'와빗'이라고 발음하는 WABT 툴킷은 웹어셈블리 파일을 검사하거나 형식을 변환하는 툴이다. 주요 기능은 다음과 같다.

- WABT, 웹어셈블리 텍스트 형식을 바이너리 형식으로 변형.
- Wasm2wat, WABT의 반대.
- Wasm-objdump, 웹어셈블리 바이너리에 관한 정보 인쇄.
- Wasm-interp, 스택 기반 해석기를 사용해 웹어셈블리 바이너리 복호화 및 실행.
- Wat-desugar, .wat 텍스트 형태 분석.
- Wasm2c, 웹어셈블리 바이너리 파일을 C 소스 및 헤더로 변환.

모질라 개발자 네트워크(Mozilla Developer Network)에서 사용되는 WABT는 안정 버전이다. WABT는 앞으로 웹어셈블리 자체에 추가되는 SIMD(single instruction, multiple data) 및 쓰레드(Thread) 지원 기능 등을 추가로 개발할 예정이다. WABT는 깃허브에서 다운로드할 수 있다.

웹어셈블리 스튜디오(WebAssembly Studio)
현재 베타 상태이며 모질라가 개발한 웹어셈블리 스튜디오 온라인 IDE다. 학습용 툴로도 사용되는 웹어셈블리와 호한되는 툴 콜렉션이다. 파일 열기, 다운로드, 편집, 삭제 등 기본적인 기능이 제공된다. 또한 개발자는 파일과 디렉터리를 업로드할 수 있다. 프로젝트는 공유를 위해 분할할 수 있다. 웹어셈블리의 바이너리 모듈뿐만 아니라 텍스트 파일도 편집할 수 있다. 웹어셈블리 스튜디오는 C, C++ 및 러스트 언어를 지원한다. 컴파일 등 일부 기능은 관리형 백엔드(Back-end) 서비스가 필요하지만 다른 것은 브라우저에서 실행된다. 온라인으로 웹어셈블리 스튜디오 IDE를 체험할 수 있다.

VS 코드용 웹어셈블리 툴킷(WebAssembly Toolkit for VS Code)
마이크로소프트의 오픈 소스 코드 편집기 비주얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 한다. 이 확장기능은 드미트리 체베치크가 개발했다. VS 코드용 웹어셈블리 툴킷은 비주얼 스튜디오 마켓에서 다운로드할 수 있다. ciokr@idg.co.kr