WebAssembly
(웹어셈블리에서 넘어옴)
웹어셈블리(WebAssembly)는 2015년부터 개발되어 2017년 발표된 웹 브라우저에서 실행하는 바이트 코드 집합 표준이다.
개발 배경 및 상세[편집 | 원본 편집]
2010년대부터 웹 컨텐츠는 자바스크립트를 사용하여 제작하는 방법이 보편화되었으나, 자바스크립트 자체의 난해함에 더해 스크립트 파싱(Parsing)에 필요한 시간이 길어 성능 하락이 존재한다는 문제가 있었다. 이에 자바의 JVM처럼 웹 브라우저를 바이트 코드 가상 머신으로 사용하는 방식으로 트랜스컴파일[1]한 웹 컨텐츠를 보여주는 방법으로 WebAssembly가 제안되었다.
그 이후 웹 브라우저 이외의 네이티브 플랫폼에서도 웹어셈블리를 쓸 수 있는 방법을 연구 중이다. JVM 같은 가상 머신 프로그램 종류를 웹어셈블리가 명령어 집합이 되도록 제작하거나 컴파일러의 중간 번역 결과(IR)로 활용하는 방법 등이 가능하다.
현재 WebAssembly로 컴파일하는 작업이 잘 지원되는 언어는 C/C++와 Rust가 있다. 전자는 Emscripten 프레임워크, 후자는 cargo에서 wasm-pack 라이브러리를 받아 쓸 수 있다.
명세 표준 설명[편집 | 원본 편집]
기타[편집 | 원본 편집]
- 웃픈 사실로, C/C++로 짠 프로그램을 웹으로 쉽게 이식할 수 있기 때문에 암호화폐 채굴 프로그램을 브라우저 모듈로 변환하여 사이트에 삽입하는 악성 코드가 전체 웹어셈블리 코드의 절반을 넘겼다는 2019년의 기사가 있다. 브라우저에서도 WebGL을 활용한 컴퓨팅 셰이더 사용이나 WebGPU를 통한 GPU 직접 접근이 가능하기 때문에 채굴에 필요한 컴퓨팅 자원을 브라우저로 끌고 올 수 있기 때문이다. 이걸 막으려면 카메라/마이크 사용 권한 체크 뿐만 아니라 자바스크립트로 가져오는 웹 어셈블리 모듈의 컴퓨팅 자원 권한 체크 알림 기능(윈도우의 UAC나 리눅스 bash에서 허구한 날 애플리케이션 실행에 sudo 명령어를 요구하는 것과 비슷하다)을 브라우저에서 구현하도록 표준을 만들어야 하나, 아직 진전이 더딘 상황이다. 일단 GPU가 아닌 CPU에서 멀티코어 컴퓨팅에 필요한 SharedArrayBuffer 객체 관련 기능은 2018년 초 인텔을 중심으로 벌어졌던 상용 CPU 분기 예측 보안 결함 사고(통칭 CPU게이트)의 여파로 보안 대책[2]이 도입되었기에 현재는 쉬운 악용법이 막힌 것으로 간주되며, 유사한 방법이 GPU 연산 자원에도 도입될 가능성이 높다.