웹어셈블리
웹어셈블리(Web Assembly) 또는 와즘(WASM)은 구글, 마이크로소프트, 애플, 모질라가 소속된 웹어셈블리 커뮤니티 그룹이 웹 성능을 향상시키기 위해 2015년부터 개발한 웹브라우저 런타임이자 표준 포맷이다.
개요[편집]
기존에 C, C++ 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 C언어로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 변환하게 되면 자바스크립트에서 사용할 수 있다. 따라서 기존 소스 코드를 재활용할 수 있고 응용 프로그램 실행 성능도 개선될 수 있다.
특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, 가상현실(VR), 증강현실(AR) 등 여러 분야에 웹어셈블리를 적용하여 생산성을 높일 수 있다. 국제 웹 표준화 단체인 월드 와이드 웹 컨소시엄(W3C: World Wide Web Consortium)에서 2017년에 개발하였다. W3C 웹어셈블리 작업반에서 모질라(Mozilla), 마이크로소프트(Microsoft), 구글(Google)과 애플(Apple) 등 주요 브라우저 제작사와 관련 기업들이 협력하여 표준화를 추진한다. [1]
역사[편집]
자바 스크립트가 만들어진 건 1995년이다. 자바 스크립트는 속도가 빠르지 않아 2008년 성능 전쟁이라고 말하는 기간이 시작되었다. 후에 JIP가 나오게 되면서 자바 스크립트의 속도는 10배 정도가 빨라졌다. 성능을 향상시키기 위한 노력을 계속되었고 웹 어셈블리가 개발되었다
수행 작업[편집]
웹어셈블리(WASM)는 웹에서 사용할 수 있는 효율적인 저수준 바이트 코드다. 웹어셈블리의 현실적인 실행 방법은 두가지로 나눌 수 있다. Emsciptne으로 C언어 혹은 C++으로 포팅하거나 Rust로 작성하고 웹어셈블리를 출력하면 된다. [2] 웹어셈블리는 사용하면 자바스크립트가 아닌 C언어 혹은 C++등을 사용하여 프로그램을 작성한 다음 런타임 이전에 웹어셈블리로 컴파일이 가능하다. 이로서 우리는 실행이 매우 빠른 웹 앱을 얻을 수 있다.
실행[편집]
현재 WASM은 네이티브 코드보다 20%밖에 느리지 않다. 이것은 정말 놀라운 결과다. 이것은 샌드박스 환경으로 컴파일된 후 보안상 취약성이 없도록 하기 위해 매우 많은 제약 조건 하에서 실행되었음에도 불구하고 나타난 결과다. 실제 네이티브 코드에 비해서 속도 차이는 최소화 되어가고 있고 앞으로 WASM은 더더욱 빨라질 것이다.
웹어셈블리 툴[편집]
- 라이프(Life) : 클라우드 마켓 벌린의 라이프 프로젝트는 구글의 고(Go)언어로 제작된 교차 플랫폼 VM으로 구성된다. 웹어셈블리 레퍼런스 매뉴얼에 따라 수정됐고 일련의 최적화 기법을 사용한다.
- 와사비(Wassbi) : 와사비는 'WebAssembly analysis using binary instrumentation'을 의미한다. 프로그램 실행 중 프로그램 속성을 관찰하며, 동적 분석은 버그를 해결하고 성능 병목현상과 보안 문제를 확인하기 위해서 사용된다.
- 네뷸렛(Nebulet) : 현재 개발 중인 마이크로커널(Microkernel)로, 성능을 높이기 위해 링(Ring) 0 및 단일 주소 공간에서 웹어셈블리 모듈을 실행한다. 네뷸렛은 일부 작업 부하, 특히 서버와 관련된 작업에서 뛰어난 성능을 보여주고 있다. 하지만 링 0에서 모듈을 구동하면 보안 플래그가 올라갈 수 있으며 스펙터, 멜트다운, 실행 버그에 대한 우려가 증가할 수 있다.
- Wasmjit : 코어를 C90으로 작성한 임베디드형 Wasmjit 웹어셈블리 런타임은 주로 Emscripten 생성 웹어셈블리 모듈을 호스팅하는 리눅스 커널 모듈로 쓰이고 있다.. 이 구성에서는 링 0에서 실행되며 시스템 호출에 정상 기능 호출로 access한다. 개발자 라이언 헌터는 이것이 리눅스 커널에 포함되기를 바라고 있다. 헌터는 최근 Wasmjt로 엔진x(Nginx) 웹 서버를 구동했다.
- WAVM : WAVM(WebAssembly Virtual Machine)은 웹어셈블리용 단독형 VM이다. 표준 바이너리 형식뿐만 아니라 웹어셈블리 레퍼런스 해석기로 정의한 텍스트 형식을 로드할 수 있다. 텍스트 형식의 경우 WAVM은 레퍼런스 해석기가 사용하는 표준 스택(Stack) 기계 구문하고 AST 구문뿐만 아니라 모든 테스트 명령을 로드할 수 있다.
- 와빗(WebAssembly Binary Toolkit, WABT) : '와빗'이라고 발음하는 WABT 툴킷은 웹어셈블리 파일을 검사하거나 형식을 변환하는 툴이다.
- VS 코드용 웹어셈블리 툴킷(WebAssembly Toolkit for VS Code) : 마이크로소프트의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.[3]
목표[편집]
웹 어셈블리는 W3C웹어셈블리 커뮤니티 그룹에서 목표를 가지고 만들어 지고 있는 열린 표준이다.[4]
핵심 컨셉[편집]
- 모듈 : 실행 가능한 컴퓨터 코드로 브라우저에서 컴파일 된 어셈블리 바이러니 파일이다.
- 메모리 : 바이트 들의 선형배열인 사이즈 조절이 가능한 버퍼 배열이다.
- 테이블 : 레퍼런스들의 사이즈 조절을 할 수 있는 형식 지정된 배열이다.
- 인스턴스 : 모듈과 그 모듈이 사용하는 모든 상태의 쌍[4]
전망[편집]
국내에서 인터넷 사용이 본격화되기 시작한 시점은 1994년이다. 그 후 2012년을 기준으로 인터넷 이용률도 많이 늘었고 보급률도 많아졌다. 최근의 상황을 보면 다들 스마트폰에 많은 시간을 투자함으로써 인터넷도 많이 쓴다는 사실을 알 수 있다. 최근 정보를 알기 위해서는 디지털 공간에서 많은 정보를 공유하면서 새로운 정보를 얻게 되는 방식이다. 이러한 방식은 산업의 규모가 커질수록 관련 산업도 함께 성장한다는 특징을 갖고 있다. 웹 어셈블리도 앞으로 더 성장해 갈 전망이다. [5]
각주[편집]
- ↑ 〈웹어셈블리〉, 《네이버 지식백과》
- ↑ 〈웹의 네이티브화, 웹 어셈블리〉, 《네이버 블로그》
- ↑ Paul Krill, 〈"'웹의 미래' 최신 웹어셈블리 툴 8가지〉, 《CIO》, 2018-12-18
- ↑ 4.0 4.1 mdnwebdocs-bot, Jungbin-Kim, limkukhyun, mingrammer, kesuekim, 0xABXDEF, 〈어셈블리의 컨셉〉, 《MDN web docs》
- ↑ 퓨처메인 주식회사, 〈'웹의 미래' 최신 웹어셈블리 툴〉, 《FUTURE MAIN》
참고자료[편집]
- 〈웹어셈블리〉, 《네이버 지식백과》
- mdnwebdocs-bot, Jungbin-Kim, limkukhyun, mingrammer, kesuekim, 0xABXDEF, 〈어셈블리의 컨셉〉, 《MDN web docs》
- Paul Krill, 〈"'웹의 미래' 최신 웹어셈블리 툴 8가지〉, 《CIO》, 2018-12-18
- 퓨처메인 주식회사, 〈'웹의 미래' 최신 웹어셈블리 툴〉, 《FUTURE MAIN》, 2019-04-17
- IT 그리고 책, 〈웹의 네이티브화, 웹 어셈블리〉, 《네이버 블로그》, 2019-06-13
같이 보기[편집]