Rust

[WASM] 웹 어셈블리의 미래 - WebAssembly

Razelo 2022. 1. 26. 09:57

브런치에 웹 어셈블리의 미래라는 글을 작성했는데 해당 글을 이곳에도 공유하고 싶어서 올리고자 한다. 

 

아래 브런치 링크를 첨부한다. 

 

https://brunch.co.kr/@razelo/7

 

[WASM] 웹 어셈블리의 미래

WASM이란 무엇일까? | 웹 어셈블리라고 불리는 wasm은 2015년에 개발되어 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되는 기술이다. C/ C++ / RUST와 같은 로우 레벨 랭

brunch.co.kr

 


WEB 어셈블리라고 불리는 WASM은 2015년이라는 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되는 기술이다. 

 

주로 C/ C++ / RUST와 같은 LOW 레벨 랭귀지 즉 속도가 좋은 강한 타입의 랭귀지를 웹에서 쓰고자 만든 기술인데 주로 엠스크립튼이라는 소스 -> 소스 컴파일러 기술을 사용한다. 

 

cpp파일을 만든다고 가정했을때  index.wasm, index.js, index.html  즉 3개의 파일이 결과물로 나오게 되는데 여기서 js는 html과 wasm을 이어주기 위한 일종의 글루 코드이다. 

 

왜 wasm이 일반적인 js보다 빠르게 작동한다는 것일까? 

 

그것은 wasm이 작동하는 방식에 있다. 

 

1. 자바스크립트 처리 과정
2. wasm 처리 과정

 

위의 두개의 이미지를 보면 첫번째 이미지인 자바스크립트의 경우 그 처리과정에 있어서 파싱과 이후 최적화를 거치는데 다시한번 최적화를 거친다. 이후 gc과정도 거치게 된다. 하지만 wasm의 경우 이미 바이트 코드이기 때문에 굳이 abstract syntax tree로 변환할 필요 없이 해석 즉 decode만 필요하다. 

 

사실 컴파일 + 최적화 단계에서도 차이가 존재하는데 wasm의 경우 LLVM 컴파일러를 사용하기 때문에 이미 최적화가 많이 된 상태라고 한다. 

 

때문에 성능차이가 발생하는 것이다. 

 

하지만 인터넷에 존재하는 여러 벤치마크 자료들을 살펴보면 WASM의 성능이 수십배 뛰어난 것이 아니라 몇십퍼센트에서 크게는 두 세배 정도밖에 차이가 나지 않는 것을 살펴볼 수 있다. 또한 개발환경도 아직 상당히 불편함을 감수해야 하는 상황이고 개발 자료도 많지 않다고 한다. 

 

오히려 인터넷을 찾아보면 WASM이 JS를 죽일거라는 자극적인 블로그 포스팅과 NFT와 같은 크립토를 홍보하는 글들이 다수를 차지한 것 같았다. 

 

하지만 그럼에도 불구하고 WASM이 어쩔 수 없이 흥할 수 밖에 없는 기술이라는 생각이 들었다. 다만 그 영역이 크게 홍보되고 있는 탈중앙화 기술의 일부로써가 아니라 프론트엔드의 혁신으로써 흥할 기술이라는 생각이 들었다. 그 이유는 개인적으로 탈중앙화기술 자체에 대해서는 조금은 회의적인 생각이 있기 때문이다.

앞으로 WASM이 더욱 개선되어 프론트엔드에서 빠른 연산을 처리하고 다양한 기능들을 제공할 수 있게 된다면 웹이라는 공간이 정말 전문적인 툴도 돌릴 수 있는 공간이 되어 서핑 공간이 아니라 일종의 기존 데스크탑공간을 대체할 수 도 있게되지 않을 거라는 생각을 하게 되었다. (혹시 언리얼을 돌리게 될 수도 있지 않을까? 아니면 지금 우리가 PC나 노트북에서 보는 바탕화면처럼 웹공간에 자신의 원격 로컬 환경이 존재하게 될 수도 있지 않을까? )

 

예전에 한 블로그 포스팅에서 어떤 글을 읽은 적이 있었는데 언젠가는 물리적으로 존재하는 저장장치 혹은 고성능 연산장치가 탑재되지 않은 기기를 가지게 될거라는 이야기가 있었다. 말그대로 웹에 모든게 존재하는거다. 그리고 클라우드산업의 성공이 그 예상의 성공적인 출발을 보여주었고 이어서 물리적으로 존재하는 우리의 작업환경에서도 그 변화가 전파될거라는 생각이 들었다. 

 

우선적으로 WASM은 다양한 랭귀지를 사용할 수 있으며 그것이 또 웹과 연동된다는 점에서 기존에 개발하던 과정에서 발생하는 문제점보다 몇배는 더 많은 난관을 거치지 않을까 싶다. 그렇기에 개발 편리성이 빠르게 제공되어야만 이 기술의 대중성이 좌우되지 않을까 싶다. 트위터의 한 팔로워분께서 자신이 포팅한 게임엔진을 웹에서 돌리는 모습을 올려주셔서 이와 관련해서 짧은 대화를 나눴다. 그분 얘기대로 어째 언젠가는 고성능 그래픽도 프론트에서 보게될 수 있지 않을까?   

 

어제부터 WASM에 대해 이것저것 살펴보다보니 오늘 아침에 유튜브 연관에 WASM과 관련해서 영상이 하나 올라왔다. 누르지 않고는 그냥 지나치지 못하는 영상이 하나 올라왔는데 정말 재밌게 봤다. 

 

https://www.youtube.com/watch?v=3LWgbjVWLug 

 

 

https://webassembly.org/

 

WebAssembly

WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.

webassembly.org

 

반응형