혁신적인 기술 WASM
최근 웹어셈블리에 대한 컬럼을 읽고 관심이 생겼다.
웹어셈블리의 미래는 어떤 변화를 가져올까?
활용될 수 있는 분야가 무긍무진하다고 생각했고 아이디어도 기발하다고 생각되어 간략한 소개를 해보고자 한다.
웹어셈블리 즉 WASM은 2015년에 개발된 만큼 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되고 있다.
C/C++/Rust 같은 로우 레벨 언어의 성능을 웹에서도 사용하고자 하는 것이 목적이다. 속도가 빠르고 강한 타입의 언어를 웹에서 쓰고자 만들었기에 특별한 방법을 사용한다.
엠스크립튼이라는 소스 대 소스를 변환하는 컴파일러 기술을 사용한다.
간단한 예시를 들어보겠다.
*.cpp파일을 만든다고 가정했을때 index.wasm, index.js, index.html 3개의 파일이 결과물로 나온다. 여기서 js는 html과 wasm을 이어주기 위한 글루 코드이다. 접착제라고 생각하면 된다.
왜 wasm이 일반적인 js보다 빠르게 작동한다고 말할까?
그 이유는 wasm이 작동하는 방식에 있다.
아래 두 그림을 보자.
1. 자바스크립트 처리 과정
2. WASM 처리 과정
두 이미지를 보면 첫번째 이미지인 자바스크립트 처리 과정은 파싱 이후 최적화를 거치는데 이후 또다시 최적화를 거친다. 그것을 re-optimize라고 부른다.
이후 garbage collection 과정을 거친다.
반면 WASM은 이미 바이트 코드이기 때문에 굳이 Abstract Syntax Tree로 변환할 필요가 없어서 해석만 하면 된다고 한다. 그래서 decode 과정이 있는 것을 볼 수 있다.
단순하게 그림만 봐도 WASM의 처리 과정이 훨씬 짧다.
컴파일과 최적화 단계에서도 차이가 존재한다고 한다.
WASM의 경우 LLVM 컴파일러를 사용하기 때문에 이미 최적화가 많이 된 상태라고 한다. 그래서 여기서 성능 차이가 발생한다.
인터넷에 존재하는 여러 벤치마크 자료를 살펴보면 WASM의 성능이 수십 배 뛰어난 것이 아니라 수십 퍼센트에서 크게는 두 세배 정도밖에 차이가 나지 않는 것을 알 수 있다. 개발 환경도 아직 많은 불편함을 감수해야 하는 상황이고 개발 자료도 많지 않다.
상단에 뜨는 자료를 살펴보면 기술적인 이야기 대신 WASM이 자바스크립트를 대체할 것이라는 내용의 글과 WASM에 힘입어 블록체인이 기술적 진보를 이루어 NFT가 호황을 누릴 것이라는 글이 다수다.
개인적으로 자바스크립트는 WASM으로 인해서 사라지지 않을 것이라고 생각한다. 다만 일부 영역에서 WASM에 의해 비중을 잃게 될 것이라고 생각한다.
그리고 WASM의 발전이 블록체인의 기술적 부흥은 아니지만 부분적인 서비스 개발에는 분명 도움이 될 것이라고 생각한다.
개발 환경의 불편함과 빈약한 대중성에도 불구하고 WASM은 언젠가 흥할 수 밖에 없는 기술이라고 생각한다. 다만 그 이유가 블록체인의 부흥 때문이 아니라 프론트엔드 개발 영역에서의 혁신으로써 쓰이게 될 것이라고 생각하기 때문이다.
개인적으로 탈중앙화의 의미에 대해서는 회의적인 생각이 있기 때문이다. 이 부분은 블록체인을 다루는 이야기에서 따로 다루도록 하겠다.
앞으로 WASM이 더욱 개선되어 프론트엔드 개발에서 빠른 연산을 처리하고 다양한 기능을 제공할 수 있게 된다면 웹이 지금보다 더욱 복잡화될 것이라고 생각한다.
복잡해진 만큼 전문적인 툴을 돌릴 수 있는 공간이 되어 기존 데스크탑에서 사용하던 툴을 웹에서 사용하도록 대체할 수 도 있을 것이라고 생각한다. 물론 클라우드 기술의 도움이 뒷받침되어야 한다.
고성능 그래픽 연산이 이뤄지고 웹에서 복잡한 연산이 돌아가도 문제가 없다면 더욱 흥미로운 서비스들이 등장할 것이라고 생각한다.
혹시 언리얼을 웹에서 돌리게 되지 않을까라는 상상을 해보기도 했다.
예전에 한 블로그에서 흥미로운 글을 읽은 적 있다.
언젠가 미래의 우리가 사용하게될 다바이스는 물리적으로 존재하는 저장장치와 고성능 연산장치가 필요하지 않을거라는 이야기였다.
말 그대로 모든게 웹과 클라우드에 존재하는 개념을 이야기한 것이다.
클라우드 산업의 성공과 WASM과 같은 기술의 발전이 위와 같은 방향으로 흘러갈 수 있게 해준다고 생각한다.
물리적으로 존재하는 영역에도 변화가 전파될거라고 생각했다.
WASM은 다양한 언어를 사용할 수 있으며 그것을 웹에서 돌릴 수 있다는 점에서 기존 개발 과정에서 발생하는 문제점보다 몇 배는 더 많은 난관을 거치게 될 것이라고 생각한다.
개발 과정에서 기존에 예상치 못했던 버그들이 존재할 것이라고 생각한다.
개발 편리성의 제공 여부에 따라서 WASM의 흥망이 좌우될 것이라고 생각한다.
트위터의 한 팔로워분께서 자신이 포팅한 게임 엔진을 웹에서 돌리는 모습을 올려주셔서 이와 관련해서 짧은 대화를 나눴다. 그분께서 말씀하신 대로 언젠가는 고성능 그래픽 연산도 프론트엔드 영역에서 보게 될 수 있을 거라고 생각한다.
어제부터 WASM에 대해 탐색하다 보니 유튜브 연관 영상에 WASM과 관련한 영상이 하나 올라왔다.
꽤 길긴 하지만 식사하면서 보기에 딱 알맞은 내용이라 추천한다.
https://www.youtube.com/watch?v=3LWgbjVWLug
읽어주셔서 감사합니다.