검수요청.png검수요청.png

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

위키원
이동: 둘러보기, 검색
잔글
 
(사용자 5명의 중간 판 31개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 +
[[파일:웹어셈블리 로고.png|썸네일|200픽셀|'''웹어셈블리'''(Web Assembly)]]
 +
[[파일:웹어셈블리 글자.png|썸네일|300픽셀|'''웹어셈블리'''(Web Assembly)]]
 +
 
'''웹어셈블리'''<!--웹 어셈블리-->(Web Assembly) 또는 '''와즘'''<!--와슴-->(WASM)은 [[구글]], [[마이크로소프트]], [[애플]], [[모질라]]가 소속된 웹어셈블리 커뮤니티 그룹이 웹 성능을 향상시키기 위해 2015년부터 개발한 웹브라우저 [[런타임]]이자 표준 포맷이다.
 
'''웹어셈블리'''<!--웹 어셈블리-->(Web Assembly) 또는 '''와즘'''<!--와슴-->(WASM)은 [[구글]], [[마이크로소프트]], [[애플]], [[모질라]]가 소속된 웹어셈블리 커뮤니티 그룹이 웹 성능을 향상시키기 위해 2015년부터 개발한 웹브라우저 [[런타임]]이자 표준 포맷이다.
  
 
==개요==
 
==개요==
기존에 [[C]], [[C++]] 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 [[C언어]]로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 변환하게되면 [[자바스크립트]]에서 사용할 수 있다. 따라서 기존 소스 코드를 재활용할 수 있고 응용 프로그램 실행 성능도 개선될 수 있다.
+
기존에 [[C]], [[C++]] 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 [[C언어]]로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 변환하게 되면 [[자바스크립트]]에서 사용할 수 있다. 따라서 기존 소스 코드를 재활용할 수 있고 응용 프로그램 실행 성능도 개선될 수 있다.
  
특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, [[가상현실]](VR), [[증강현실]](AR) 등 여러 분야에 웹어셈블리를 적용하여 생산성을 높일 수 있다. 국제 웹 표준화 단체인 [[월드 와이드 웹 컨소시엄]](W3C: World Wide Web Consortium)에서 2017년에 개발하였다. W3C 웹어셈블리 작업반에서 [[모질라]](Mozilla), [[마이크로소프트]](Microsoft), [[구글]](Google)과 [[애플]](Apple) 등 주요 브라우저 제작사와 관련 기업들이 협력하여 표준화를 추진한다. <ref>〈[https://terms.naver.com/entry.nhn?docId=5670022&cid=42346&categoryId=42346 "웹어셈블리]〉, 《네이버 지식백과》</ref>
+
특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, [[가상현실]](VR), [[증강현실]](AR) 등 여러 분야에 웹어셈블리를 적용하여 생산성을 높일 수 있다. 국제 웹 표준화 단체인 [[월드 와이드 웹 컨소시엄]](W3C: World Wide Web Consortium)에서 2017년에 개발하였다. W3C 웹어셈블리 작업반에서 [[모질라]](Mozilla), [[마이크로소프트]](Microsoft), [[구글]](Google)과 [[애플]](Apple) 등 주요 브라우저 제작사와 관련 기업들이 협력하여 표준화를 추진한다. <ref>〈[https://terms.naver.com/entry.nhn?docId=5670022&cid=42346&categoryId=42346 웹어셈블리]〉, 《네이버 지식백과》</ref>
  
 
== 역사 ==
 
== 역사 ==
자바 스크립트가 만들어진 건 1995년이다. 자바 스크립트는 속도가 빠르지 않아 2008년 성능전쟁이라고 말하는 기간이 시작되었다. 후에 JIP가 나오게 되면서 자바 스크립트의 속도는 10배정도가 빨라졌다. 성능을 향상 시키기 위한 노력을 계속 되었고 웹 어셈블리가 개발되었다.
+
자바 스크립트가 만들어진 건 1995년이다. 자바 스크립트는 속도가 빠르지 않아 2008년 성능 전쟁이라고 말하는 기간이 시작되었다. 후에 JIP가 나오게 되면서 자바 스크립트의 속도는 10배 정도가 빨라졌다. 성능을 향상시키기 위한 노력을 계속되었고 웹 어셈블리가 개발되었다
  
 
== 수행 작업 ==  
 
== 수행 작업 ==  
웹어셈블리(WASM)는 웹에서 사용할 수 있는 효율적인 저수준 바이트 코드다. 웹어셈블리는 사용하면 자바스크립트가 아닌 [[C언어]] 혹은 [[C++]]등을 사용하여 프로그램을 작성한 다음 런타임 이전에 웹어셈블리로 컴파일이 가능하다. 이로서 우리는 실행이 매우 빠른 웹 앱을 얻을 수 있다.
+
웹어셈블리(WASM)는 웹에서 사용할 수 있는 효율적인 저수준 [[바이트 코드]]다. 웹어셈블리의 현실적인 실행 방법은 두가지로 나눌 수 있다. Emsciptne으로 [[C언어]] 혹은 [[C++]]으로 포팅하거나 Rust로 작성하고 웹어셈블리를 출력하면 된다. <ref>〈[https://dilrong.blog.me/221561226029 웹의 네이티브화, 웹 어셈블리]〉, 《네이버 블로그》</ref> 웹어셈블리는 사용하면 자바스크립트가 아닌 [[C언어]] 혹은 [[C++]]등을 사용하여 프로그램을 작성한 다음 런타임 이전에 웹어셈블리로 [[컴파일]]이 가능하다. 이로서 우리는 실행이 매우 빠른 웹 앱을 얻을 수 있다.
  
 
== 실행 ==  
 
== 실행 ==  
현재 WASM은 네이티브 코드보다 20%밖에 느리지 않다. 이것은 정말 놀라운 결과다. 이것은 샌드박스 환경으로 컴파일된 후 보안상 취약성이 없도록 하기 위해 매우 많은 제약 조건 하에서 실행되었음에도 불구하고 나타난 결과다. 실제 네이티브 코드에 비해서 속도 차이는 최소화 되어가고 있고 앞으로 WASM은 더더욱 빨라질 것이다.
+
현재 WASM은 네이티브 코드보다 20%밖에 느리지 않다. 이것은 정말 놀라운 결과다. 이것은 샌드박스 환경으로 [[컴파일]]된 후 보안상 취약성이 없도록 하기 위해 매우 많은 제약 조건 하에서 실행되었음에도 불구하고 나타난 결과다. 실제 네이티브 코드에 비해서 속도 차이는 최소화 되어가고 있고 앞으로 WASM은 더더욱 빨라질 것이다.
  
 
== 웹어셈블리 툴 ==  
 
== 웹어셈블리 툴 ==  
22번째 줄: 25번째 줄:
 
* WAVM : WAVM(WebAssembly Virtual Machine)은 웹어셈블리용 단독형 VM이다. 표준 바이너리 형식뿐만 아니라 웹어셈블리 레퍼런스 해석기로 정의한 텍스트 형식을 로드할 수 있다. 텍스트 형식의 경우 WAVM은 레퍼런스 해석기가 사용하는 표준 스택(Stack) 기계 구문하고 AST 구문뿐만 아니라 모든 테스트 명령을 로드할 수 있다.
 
* WAVM : WAVM(WebAssembly Virtual Machine)은 웹어셈블리용 단독형 VM이다. 표준 바이너리 형식뿐만 아니라 웹어셈블리 레퍼런스 해석기로 정의한 텍스트 형식을 로드할 수 있다. 텍스트 형식의 경우 WAVM은 레퍼런스 해석기가 사용하는 표준 스택(Stack) 기계 구문하고 AST 구문뿐만 아니라 모든 테스트 명령을 로드할 수 있다.
 
* 와빗(WebAssembly Binary Toolkit, WABT) : '와빗'이라고 발음하는 WABT 툴킷은 웹어셈블리 파일을 검사하거나 형식을 변환하는 툴이다.
 
* 와빗(WebAssembly Binary Toolkit, WABT) : '와빗'이라고 발음하는 WABT 툴킷은 웹어셈블리 파일을 검사하거나 형식을 변환하는 툴이다.
* VS 코드용 웹어셈블리 툴킷(WebAssembly Toolkit for VS Code) : [[마이크로소프트]]의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.
+
* VS 코드용 웹어셈블리 툴킷(WebAssembly Toolkit for VS Code) : [[마이크로소프트]]의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.<ref>Paul Krill, 〈[http://www.ciokorea.com/news/113388 "'웹의 미래' 최신 웹어셈블리 툴 8가지]〉, 《CIO》, 2018-12-18</ref>
<ref>Paul Krill, 〈[http://www.ciokorea.com/news/113388 "'웹의 미래' 최신 웹어셈블리 툴 8가지]〉, 《CIO》, 2018-12-18</ref>
+
 
 +
== 목표 ==
 +
웹 어셈블리는 W3C웹어셈블리 커뮤니티 그룹에서 목표를 가지고 만들어 지고 있는 열린 표준이다.<ref name="어셈블리컨셉">mdnwebdocs-bot, Jungbin-Kim, limkukhyun, mingrammer, kesuekim, 0xABXDEF, 〈[https://developer.mozilla.org/ko/docs/WebAssembly/Concepts 어셈블리의 컨셉]〉, 《MDN web docs》 </ref>
 +
 
 +
*빠르고, 효과적이고, 이식성이 좋을 것, 읽기 쉽고 [[디버깅]]이 가능할 것, 안전함을 유지할 것, [[웹]]을 망가뜨리지 않을 것
 +
 
 +
== 핵심 컨셉 ==
 +
*모듈 : 실행 가능한 컴퓨터 코드로 브라우저에서 컴파일 된 어셈블리 바이러니 파일이다.
 +
*메모리 : 바이트 들의 선형배열인 사이즈 조절이 가능한 버퍼 배열이다.
 +
*테이블 : 레퍼런스들의 사이즈 조절을 할 수 있는 형식 지정된 배열이다.
 +
*인스턴스 : 모듈과 그 모듈이 사용하는 모든 상태의 쌍<ref name="어셈블리컨셉"></ref>
  
 +
== 전망 ==
 +
국내에서 인터넷 사용이 본격화되기 시작한 시점은 1994년이다. 그 후 2012년을 기준으로 인터넷 이용률도 많이 늘었고 보급률도 많아졌다. 최근의 상황을 보면 다들 스마트폰에 많은 시간을 투자함으로써 인터넷도 많이 쓴다는 사실을 알 수 있다. 최근 정보를 알기 위해서는 디지털 공간에서 많은 정보를 공유하면서 새로운 정보를 얻게 되는 방식이다. 이러한 방식은 산업의 규모가 커질수록 관련 산업도 함께 성장한다는 특징을 갖고 있다. 웹 어셈블리도 앞으로 더 성장해 갈 전망이다. <ref>퓨처메인 주식회사, 〈[https://blog.naver.com/futuremain/221516066972 '웹의 미래' 최신 웹어셈블리 툴]〉, 《FUTURE MAIN》 </ref>
  
 
{{각주}}
 
{{각주}}
30번째 줄: 45번째 줄:
 
== 참고자료 ==  
 
== 참고자료 ==  
 
* 〈[https://terms.naver.com/entry.nhn?docId=5670022&cid=42346&categoryId=42346 웹어셈블리]〉, 《네이버 지식백과》
 
* 〈[https://terms.naver.com/entry.nhn?docId=5670022&cid=42346&categoryId=42346 웹어셈블리]〉, 《네이버 지식백과》
 +
* mdnwebdocs-bot, Jungbin-Kim, limkukhyun, mingrammer, kesuekim, 0xABXDEF, 〈[https://developer.mozilla.org/ko/docs/WebAssembly/Concepts 어셈블리의 컨셉]〉, 《MDN web docs》
 +
* Paul Krill, 〈[http://www.ciokorea.com/news/113388 "'웹의 미래' 최신 웹어셈블리 툴 8가지]〉, 《CIO》, 2018-12-18
 +
* 퓨처메인 주식회사, 〈[https://blog.naver.com/futuremain/221516066972 '웹의 미래' 최신 웹어셈블리 툴]〉, 《FUTURE MAIN》, 2019-04-17
 +
* IT 그리고 책, 〈[https://dilrong.blog.me/221561226029 웹의 네이티브화, 웹 어셈블리]〉, 《네이버 블로그》, 2019-06-13
  
 
== 같이 보기 ==
 
== 같이 보기 ==
35번째 줄: 54번째 줄:
 
* [[어셈블리]]
 
* [[어셈블리]]
  
{{프로그래밍 언어|토막글}}
+
{{프로그래밍 언어|검토 필요}}

2020년 2월 21일 (금) 10:37 기준 최신판

웹어셈블리(Web Assembly)
웹어셈블리(Web Assembly)

웹어셈블리(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]

각주[편집]

  1. 웹어셈블리〉, 《네이버 지식백과》
  2. 웹의 네이티브화, 웹 어셈블리〉, 《네이버 블로그》
  3. Paul Krill, 〈"'웹의 미래' 최신 웹어셈블리 툴 8가지〉, 《CIO》, 2018-12-18
  4. 4.0 4.1 mdnwebdocs-bot, Jungbin-Kim, limkukhyun, mingrammer, kesuekim, 0xABXDEF, 〈어셈블리의 컨셉〉, 《MDN web docs》
  5. 퓨처메인 주식회사, 〈'웹의 미래' 최신 웹어셈블리 툴〉, 《FUTURE MAIN》

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 웹어셈블리 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.