의견.png

"웹어셈블리"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
11번째 줄: 11번째 줄:
 
== 실행 ==  
 
== 실행 ==  
 
현재 WASM은 네이티브 코드보다 20%밖에 느리지 않다. 이것은 정말 놀라운 결과다. 이것은 샌드박스 환경으로 컴파일된 후 보안상 취약성이 없도록 하기 위해 매우 많은 제약 조건 하에서 실행되었음에도 불구하고 나타난 결과다. 실제 네이티브 코드에 비해서 속도 차이는 최소화 되어가고 있고 앞으로 WASM은 더더욱 빨라질 것이다.
 
현재 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) : [[마이크로소프트]]의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.
 +
<ref>Paul Krill, 〈[http://www.ciokorea.com/news/113388 "'웹의 미래' 최신 웹어셈블리 툴 8가지]〉, 《CIO》, 2018-12-18</ref>
 +
  
 
{{각주}}
 
{{각주}}

2019년 6월 26일 (수) 15:29 판

웹어셈블리(Web Assembly) 또는 와즘(WASM)은 구글, 마이크로소프트, 애플, 모질라가 소속된 웹어셈블리 커뮤니티 그룹이 웹 성능을 향상시키기 위해 2015년부터 개발한 웹브라우저 런타임이자 표준 포맷이다.

개요

기존에 C, C++ 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 C언어로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 변환하게되면 자바스크립트에서 사용할 수 있다. 따라서 기존 소스 코드를 재활용할 수 있고 응용 프로그램 실행 성능도 개선될 수 있다.

특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, 가상현실(VR), 증강현실(AR) 등 여러 분야에 웹어셈블리를 적용하여 생산성을 높일 수 있다. 국제 웹 표준화 단체인 월드 와이드 웹 컨소시엄(W3C: World Wide Web Consortium)에서 2017년에 개발하였다. W3C 웹어셈블리 작업반에서 모질라(Mozilla), 마이크로소프트(Microsoft), 구글(Google)과 애플(Apple) 등 주요 브라우저 제작사와 관련 기업들이 협력하여 표준화를 추진한다. [1]

수행 작업

웹어셈블리(WASM)는 웹에서 사용할 수 있는 효율적인 저수준 바이트 코드다. 웹어셈블리는 사용하면 자바스크립트가 아닌 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) : 마이크로소프트의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.

[2]


각주

  1. "웹어셈블리〉, 《네이버 지식백과》
  2. Paul Krill, 〈"'웹의 미래' 최신 웹어셈블리 툴 8가지〉, 《CIO》, 2018-12-18

참고자료

같이 보기


  의견.png 이 웹어셈블리 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.