Webassembly 개요
Webassembly
1. 개요
WebAssembly(약칭 Wasm)는 다양한 프로그래밍 언어와 여러 실행 환경 사이의 중간 계층으로 30개 이상의 언어로 작성된 코드를 가져와 .wasm 파일로 컴파일한 다음 브라우저, 서버 또는 자동차에서 해당 파일을 실행할 수 있다. 브라우저 외부의 다양한 환경에서도 실행할 수 있으며 게다가 WebAssembly는 어셈블리가 아니라 약간 더 높은 수준의 바이트코드이다.
2. 강점
1) 이식성(Portable)
Wasm 바이트코드의 바이너리 형식은 표준화되기 때문에 Wasm을 실행할 수 있는 모든 런타임이라면 어떤 Wasm 코드든 실행할 수 있다. 때문에 “한 번 작성하면 어디서나 실행 가능”(Write once, Run anywhere)이라는 자바와 같다. 브라우저에서 95% 이상의 사용자들은 웹어셈블리를 실행할 수 있으며 나머지 사용자들은 wasm2js 컴파일러를 사용하여 실행할 수 있다. 비단 클라이언트만이 아닌 서버에서는 Wasmtime, Wasmer 같은 런타임으로 실행하 수 있으며, 제한된 자원을 가진 IoT 장치에서도 WAMR을 이용하여 실행할 수 있다.
2) 범용성(Universal)
많은 언어들이 Wasm으로 컴파일 될 수 있다. C, C++ 및 Rust와 같은 로우레벨 언어를 비롯하여 Go, Python 및 Ruby와 같은 가비지 컬렉션 고수준 언어까지 가능하다.
3) 네이티브에 가까운 성능(Near-Native Performance)
Wasm은 “네이티브에 가까운 성능”을 가진다. 컴퓨팅 집약적인 작업의 경우 웹어셈블리가 거의 항상 자바스크립트보다 빠르며, 네이티브 코드보다 평균 1.45에서 1.55배 정도 느리다. 이는 네이티브에 가까운 성능이라고 말할만한 성능이다.
4) 빠른 시작 시간(Fast Startup Time)
Wasm의 콜드 스타트 시간은 그 자체로 하나의 큰 주제를 차지할 만큼 중요하다. 서버에서 모든 컨테이너에 대해 새로운 OS 프로세스를 생성할 필요가 없기 때문에 Docker 컨테이너보다 10에서 100배 더 빠른 콜드 스타트 시간을 달성할 수 있다. 브라우저에서 Wasm을 디코딩하고 기계어로 번역하는 것은 JavaScript를 구문 분석, 해석 및 최적화하는 것보다 빠르므로 Wasm 코드는 JavaScript보다 더 빠르게 최고의 성능으로 실행될 수 있다.
5) 보안(Secure)
웹어셈블리는 웹을 염두에 두고 설계되었기 때문에 보안은 그 무엇보다 높은 우선순위에 있었다. 기본적으로 Wasm 런타임에서 실행되는 코드는 샌드박스 안에서 메모리가 할당되고, 기능이 제한됩니다. 즉, 명시적으로 허용된 작업만 수행할 수 있기에 보안적으로 강력하다. 샌드박스 안에서도 Wasm 코드는 여전히 시스템 수준 인터페이스 및 하드웨어 기능을 포함하여 기본 시스템에 액세스 할 수 있다.
3. 컨테이너화
1
2008년에 WASM+WASI가 있었다면 Docker를 만들 필요가 없었을 것입니다. 그만큼 중요합니다. 서버의 웹어셈블리는 컴퓨팅의 미래입니다.
- Docker 설립자 Solomon Hykes가 2019년 3월 28일 개인 트윗 에서
Docker 설립자가 말할만큼 Webassembly에 호평을 하는 이유가 있다. Docker와 비교하여 콜드 스타트 시간이 10–100배 더 빠르고 설치 공간이 더 작으며 더 잘 제한된 기능 기반 보안 모델을 사용하기 때문이다. 이런 이유로 인해 컨테이너가 아닌 Wasm 모듈을 컴퓨팅 및 배포의 표준 단위로 만들면 확장성과 보안이 향상될 것이라고 말한다.
4. 서버리스
범용성이 높고 성능이 좋으며 보안도 빠르고, 무엇보다도 콜드 스타트가 빠르니, 당연히 서버리스에 대해서도 생각해봄직하다.
실질적으로 AWS와 GOOGLE에서는 이를 기반으로해서 FaaS 서비스를 제공하고 있다.
※ 본 포스팅은 추가적으로 업데이트 될 예정이다.