2022. 3. 7. 16:56ㆍ프로그래밍/WASM
WASM 란?
WebAssembly 의 약자로, Web과 Assembly가 합쳐져 WebAssembly라 불리고,
LLVM(Low Level Virtual Machine) 기반의 언어들(C, C++, Rust)을 기계 친화 언어인 바이트 코드로 변환한 웹을 위한 새로운 바이너리 포맷입니다.
사실 더 간단명료한 설명은 코딩애플님께서 영상으로 남겨주셨습니다.
https://www.youtube.com/watch?v=VJag_H2Cosc
저는 WASM을 웹 브라우저에서 Js의 부족한 기능, 무거운 실행시간을 로우 레벨단에 있는 언어들을 사용하여
웹에서도 무거운 앱을 네이티브에 가깝게 돌려보자 라는 취지로 만들어진 표준이라고 생각합니다.
현재 글을 읽고 계신 이 티스토리도 이미지 편집 기능 중 필터 기능을 WASM으로 구현했다고 합니다.
또한 WASM을 언급하면 절대 빠지지 않는 Asm.js도 있습니다.
Asm은 별도로 공부 후 포스팅 하겠습니다. 우선은 아래 블로그에서 이해해주시면 감사합니다.
https://blog.outsider.ne.kr/927
asm.js에 대해서 :: Outsider's Dev Story
asm.js을 처음 듣게 된 것은 존 레식이 올린 다음 트윗을 보고나서였다. Asm.js is seriously one of the most exciting things to happen in JavaScript-land in a long time. Congrats Firefox team!? John Res...
blog.outsider.ne.kr
WASM의 사용처
원본 사진은 LLVM언어를 컴파일하는 과정까지 설명되어 있어 일부분을 잘랐습니다.
- WASM(.wasm 파일)을 실행하기 위한 JS Glue코드를 생성 (JavaScript부분) 합니다.(이 때 HTML도 같이 생성됩니다)
Glue 코드 : .wasm을 실행하기 위해 js에 추가되는 코드(간단하게 wasm 로더)
- 최종적으로 .wasm을 실행하기 위해 VM에 로드합니다.
위 사진의 저작권은 Huiseoul Enginerring 에 있습니다.
V8 파이프라인의 최적화 컴파일러 중 하나인 TurboFan이 있습니다.
WASM은 아래 사진과 같이 위치하고 실행이 됩니다.
위 사진의 저작권은 Huiseoul Enginerring 에 있습니다.
사진에선 decode 되어 TurboFan에서 돌아가는 거 같으나 이경우는 Optimizing이 필요할 경우이며
Mozilla의 설명에 의하면 VM과 나란히 구동된다고 합니다.
즉 결론은 VM에선 JS만 로드/실행이 아닌
WASM이 추가되어 Js, WASM 2가지 코드를 로드/실행합니다.
WASM 만들고 테스트하기 (C/C++)
필요 환경
윈도우10
IIS
python 최신버전
Git
emscripten
C++
C/C++을 .wasm으로 컴파일 하기 위해선 여러 방법이 있지만 이 포스팅에선 Emscripten을 사용하겠습니다.
IIS와 Git은 기본으로 설치되어있다는 가정하에 진행하겠습니다.
1. 파이썬 설치
https://www.python.org/downloads/
Download Python
The official home of the Python Programming Language
www.python.org
Emscripten는 파이썬 스크립트로 이루어져 있습니다. CMD에 python입력 시 설치 확인이 된다면 다음 스탭으로.
2. Emscripten 설정
https://emscripten.org/docs/getting_started/downloads.html
Download and install — Emscripten 3.1.6-git (dev) documentation
Note If you want to use your system’s Node.js instead of the emsdk’s, it may be node instead of nodejs, and you can adjust the NODE_JS attribute of your .emscripten file to point to it.
emscripten.org
위 링크에서도 다운로드 및 설정하는 방법이 있습니다.
CMD 관리자 권한으로 아래 명령어를 실행합니다.
# Github에서 레파짓 클론
git clone https://github.com/emscripten-core/emsdk.git
# 클론 한 프로젝트 폴더로 이동
cd emsdk
# 최신 버전의 EmSDK를 다운 및 설치 (윈도우에선 " ./ " 를 안 붙여야 작동합니다)
emsdk install latest
# 최신 버전의 SDK를 활성화함 (이상하게도 컴파일할 때는 EmSDK를 Active 한 CMD 창에서만 작동합니다)
emsdk activate latest
# EmSDK의 Path설정
emsdk_env.bat
여기까지 별 탈 없이 오셨다면 50퍼 준비됐습니다. CMD창은 닫으시면 안 됩니다.
만약 3번째 명령어부터 입력했는데 Python 이라고만 출력된다면 파이썬 설치가 안됐다는 뜻입니다.
3. CPP 파일 작성 및 컴파일
CMD에 경로 입력하기 편한 위치에 cpp파일을 생성합니다.
자세한 설명은 모질라 개발자 문서에서 확인하실 수 있습니다.
# 위에서 폴더 아무것도 안 건드렸다면, EmSDK 폴더 안에 있는 main.cpp를 컴파일하여 iis www 폴더로 출력
em++ main.cpp -o C:\inetpub\wwwroot
4. 확인하기!
localhost로 들어가 보면
이렇게 잘 됩니다!
마무리하며
게임 서버 개발하는 입장에서 이걸 보고 있으면 Rest Api 서버 만들 때 어디에 붙이면 좋을까 라는 생각을 하게 되는 거 같습니다.
13년부터 나온 기술이지만 표준으로 채택되면서 나에겐 신기술!!