브런치에 웹 어셈블리의 미래라는 글을 작성했는데 해당 글을 이곳에도 공유하고 싶어서 올리고자 한다.
아래 브런치 링크를 첨부한다.
https://brunch.co.kr/@razelo/7
WEB 어셈블리라고 불리는 WASM은 2015년이라는 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되는 기술이다.
주로 C/ C++ / RUST와 같은 LOW 레벨 랭귀지 즉 속도가 좋은 강한 타입의 랭귀지를 웹에서 쓰고자 만든 기술인데 주로 엠스크립튼이라는 소스 -> 소스 컴파일러 기술을 사용한다.
cpp파일을 만든다고 가정했을때 index.wasm, index.js, index.html 즉 3개의 파일이 결과물로 나오게 되는데 여기서 js는 html과 wasm을 이어주기 위한 일종의 글루 코드이다.
왜 wasm이 일반적인 js보다 빠르게 작동한다는 것일까?
그것은 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
'Rust' 카테고리의 다른 글
[Rust] Rust가 ++연산자를 지원하지 않는 이유 (0) | 2024.05.03 |
---|---|
[Rust] 러스트 Double Linked List 코드 (0) | 2024.04.12 |
[Rust] 러스트를 배워봅시다! - Rust language 간단 후기1 - 재밌다! (0) | 2022.01.15 |
[Rust] 러스트를 배워봅시다. (0) | 2022.01.12 |