WASM

개요

|300
웹 어셈블리, 줄여서 와즘은 웹에서 실행할 수 있는 어셈블리어를 말한다.
여기에서 말하는 웹이란 구체적으로 웹 브라우저를 기동하는 환경, V8(Node.js 가동 엔진)과 같은 것을 말한다.
어셈블리어라고 하나 당연히 이걸 우리가 직접 작성하는 건 아니고, 다양한 언어를 웹 어셈블리에 맞게 컴파일할 수 있도록 지원하고 있다.

브라우저 환경에서 돌아가라고 만든 건데 막상 보니 활용성이 좋아서 컨테이너를 대체할 수 있는 기술이라고도 평가받는다.[1]
처음 만들어질 때야 웹을 기본으로 했지만..
현재는 WASI(WebAssembly System Interface, 와시)와 같이 아예 OS의 각종 기능과 자원을 받을 수 있도록 하는 인터페이스도 개발되고 있다.[2]
그래서 그냥 어떤 한정된 공간에서 언어를 실행시키는 중간 계층 정도로 여겨지기도 한다.
어? 이렇게 보니까 컨테이너랑 다를 게 뭐임?
심지어 더 제한성이 강해서 좋아보인다! 뭐 이런 느낌으로 점차 받아들여지는 듯하다..

전문성

사실 나는 와즘의 효용을 대단히 의심하고 있다.
근데 이 의심이 결국 무지에서 비롯되는 것일 수도 있다 생각해서 현재 문서는 내 이해를 높이기 위해 작성되는 목적이 크다.
이후에 지식의 깊이가 깊어지면 글의 전체 뉘앙스와 구조를 수정할 수 있다.

배경

웹 브라우저 환경에서는 고전적인 표준이 이어지고 있다.
전체 구조와 형식을 규정하는 HTML, 이걸 이쁘게 꾸미는 CSS, 이를 움직이게 만드는 JS.
이때 JS는 느리다는 약점이 있음에도 불구하고 표준으로 잡혔기 때문에 여태 이를 대체할 수 있는 무언가가 없었다.
그래서 느슨해진 웹 생태계에 긴장감을 부여하며, JS의 기능을 확장하고자 나온 것이 와즘이다.
다른 언어를 브라우저에서 실행할 수 있는 런타임과 컴파일러가 생겼으니.. 굳이 자쓰를 쓸 이유가?
라곤 하지만, 언어를 바꾸는 건 당연히 쉬운 일이 아니다.

원리

음. 공식문서에서도 딱히 전체 원리를 설명하는 글은 잘 안 보인다.
다만 어셈블리어 바로 불릴 만한 이유가 있는 게 독립적인 ISA를 따로 정의했다고 한다.
이 ISA는 V8과 같은 환경에서 각 실제 CPU의 명령어로 변환된다.

특징

와즘의 장점은 다음과 같이 정리할 수 있다.

컨테이너와의 비교

그리도 비교를 하곤 하는 컨테이너, 무엇이 다를까?

컨테이너는 사실 가상화랄 게 없다.
그냥 리눅스에 프로세스 별로 자원을 독립시키는 기술이 등장했는데, 이 기술을 잘 이용해 프로세스가 가상의 환경에서 동작하는 것처럼 만들어버린 게 컨테이너다.
그래서 컨테이너와 비교해서 와즘이 더 나을 부분이 뭐가 있을까?

그래서 컨테이너를 대체하려는 움직임도 일어나고 있는데, 사실 컨테이너를 갈아엎는다는 것은 현재 구축된 쿠버네티스 생태계에 물보라를 일으킨다는 것과 같다.
안 그래도 kubelet을 와즘으로 구현하는 시도가 있었던 것으로 보이는데, 구체적인 이유는 안 봤으나 폭삭 망했수다[3]
개인적 사견으로는 글쎄, 자바도 무거워서 극혐하는 마당에, 계속 성숙해가는 컨테이너 보안 기술이 있는데 굳이 와즘을..?
기술의 변화는 대체로 느린 편이다.
그런데 정말 빠르게 변화가 오는 케이스는 새로운 기술이 엄청난 편의성을 가져올 때라고 생각한다.
근데 내 눈에는 암만 봐도 편해보이지가 않는다..

활용

와즘은 어디에 활용될 수 있을까?

WASI

와시는 W3C에서 지정한 시스템 api이다.[4]
이걸 이용해서 웹에서만 돌아가던 와즘을 일반 소프트웨어의 레벨로 끌어내릴 수 있게됐다.

25년 기준 다음의 api가 제공되고 있다.

오잉 CLI면 그냥 다 해주는 거 아니냐..?

관련 문서

EXPLAIN - 파생 문서

이름0related생성 일자

Dataview: No results to show for table query.

기타 문서

Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완
이름2코드타입생성 일자
Istio WasmPluginZ0knowledge2025-04-21 20:41
엔보이에 와즘 플러그인 적용해보기Z8topic2025-06-09 02:29

참고


  1. https://medium.com/@yujso66/번역-웹어셈블리에-주목하라-280ff4e9ce01 ↩︎

  2. https://webassembly.org/docs/non-web/ ↩︎

  3. https://github.com/krustlet/krustlet?tab=readme-ov-file ↩︎

  4. https://wasi.dev/ ↩︎