"웹어셈블리"의 두 판 사이의 차이
잔글 |
|||
(사용자 8명의 중간 판 51개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''웹어셈블리( | + | [[파일:웹어셈블리 로고.png|썸네일|200픽셀|'''웹어셈블리'''(Web Assembly)]] |
+ | [[파일:웹어셈블리 글자.png|썸네일|300픽셀|'''웹어셈블리'''(Web Assembly)]] | ||
+ | |||
+ | '''웹어셈블리'''<!--웹 어셈블리-->(Web Assembly) 또는 '''와즘'''<!--와슴-->(WASM)은 [[구글]], [[마이크로소프트]], [[애플]], [[모질라]]가 소속된 웹어셈블리 커뮤니티 그룹이 웹 성능을 향상시키기 위해 2015년부터 개발한 웹브라우저 [[런타임]]이자 표준 포맷이다. | ||
+ | |||
==개요== | ==개요== | ||
− | 기존에 [[C]], [[C++]] 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 [[C언어]]로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 | + | 기존에 [[C]], [[C++]] 등 언어로 작성된 소스 코드를 웹어셈블리로 변환하여 웹 응용 프로그램 개발에 재활용할 수 있다. 그리고 기계어에 가까운 포맷 표준으로 웹 응용 프로그램의 실행 성능과 하드웨어 이식성이 높다. 예를 들면, 얼굴 인식 웹 응용 프로그램을 개발할 경우 기존에 [[C언어]]로 개발한 소스 코드가 있어도 브라우저에서 실행할 수 있는 방법이 없어 자바스크립트로 새로 구현해야 했지만, 웹어셈블리를 이용하여 C 소스 코드를 웹어셈블리 코드로 변환하게 되면 [[자바스크립트]]에서 사용할 수 있다. 따라서 기존 소스 코드를 재활용할 수 있고 응용 프로그램 실행 성능도 개선될 수 있다. |
− | 특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, [[ | + | |
− | 국제 웹 표준화 단체인 [[월드 와이드 웹 컨소시엄]](W3C: World Wide Web Consortium)에서 2017년에 개발하였다. W3C 웹어셈블리 작업반에서 [[모질라]](Mozilla), [[마이크로소프트]](Microsoft), [[구글]](Google)과 [[애플]](Apple) 등 주요 브라우저 제작사와 관련 기업들이 협력하여 표준화를 추진한다. | + | 특히, 기존에 웹 응용 프로그램으로의 개발이 어렵고 성능도 높아야 하는 게임, [[가상현실]](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배 정도가 빨라졌다. 성능을 향상시키기 위한 노력을 계속되었고 웹 어셈블리가 개발되었다 | ||
+ | |||
+ | == 수행 작업 == | ||
+ | 웹어셈블리(WASM)는 웹에서 사용할 수 있는 효율적인 저수준 [[바이트 코드]]다. 웹어셈블리의 현실적인 실행 방법은 두가지로 나눌 수 있다. Emsciptne으로 [[C언어]] 혹은 [[C++]]으로 포팅하거나 Rust로 작성하고 웹어셈블리를 출력하면 된다. <ref>〈[https://dilrong.blog.me/221561226029 웹의 네이티브화, 웹 어셈블리]〉, 《네이버 블로그》</ref> 웹어셈블리는 사용하면 자바스크립트가 아닌 [[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) : [[마이크로소프트]]의 오픈 소스 코드 편집기 비쥬얼 스튜디오 코드의 확장기능이다. 원본 표현을 위해 웹어셈블리 바이너리 파일을 미리 보고 구문을 강조 표시할 수 있다. 이 확장기능의 주된 목적은 개발자가 웹어셈블리를 배울 수 있도록 돕는 것이다. 확장기능의 디버그 및 구문 강조를 개선해야 될 필요성이 있다.<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> | ||
+ | |||
+ | {{각주}} | ||
+ | |||
+ | == 참고자료 == | ||
+ | * 〈[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 | ||
+ | |||
+ | == 같이 보기 == | ||
+ | * [[이와즘]](eWASM) | ||
+ | * [[어셈블리]] | ||
+ | |||
+ | {{프로그래밍 언어|검토 필요}} |
2020년 2월 21일 (금) 10:37 기준 최신판
웹어셈블리(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
같이 보기[편집]