본문 바로가기
개발/WebAssembly

WebAssembly(웹어셈블리) 란? 기능 및 사용법 C/C++, Rust 등을 웹에서 사용할 수 있다고?

by jinhyuk._.c 2022. 11. 17.

서론

C / C++ 를 통해 개발을 하면서 웹을 하고싶다는 생각을 많이 했었습니다.

임베디드프로그램이나  보안프로그램을 개발하면서 C / C++ 를 많이 사용하였고 그 외의 언어들은 많이 사용해보질 못하였습니다. 그러다가 자바스크립트 엔진을 개발하면서 웹에 대해 관심을 갖기 시작하였고, 웹을 공부하던중 직장내의 컨퍼런스를 통해 웹에서 더나은 성능을 낼수 있도록 하는  '웹어셈블리' 라는 것을 알게되었습니다.

 

C / C++을 웹소켓 통신 방식이나 JNI 등등으로 사용하는게 아닌 웹어셈블리로 만들어서 사용한다는 것이 정말 신기하였고 공부를 하며 알게된 내용들을 기록하고 공유하기 위해 이곳에 알게된 내용들을 공유합니다.

 

 

WebAssembly(웹어셈블리)  란 무엇인가요?

WebAssembly는 최신의 웹 브라우저(크롬, 오페라 등등)에서 실행할 수 있는 새로운 유형의 코드입니다. 네이티브에 가까운 성능으로 동작을 하고 바이너리 포맷을 제공하는 어셈블리 언어로, C/C++, Rust 등의 언어로 작성된 프로그램을 웹 브라우저에서 사용할 수 있게 해줍니다.

 

즉, 여러가지 언어로 만들어진 코드들을 웹에서 실행할수 있게 해주고 웹언어가 아닌 C/C++ , Rust 언어로 만들어진 앱을 웹브라우저에서 실행할 수 있도록 해줍니다.

 

WebAssembly는 javascript API를 사용하여 둘사이에서 함수나 기능을 사용할 수 있습니다. 그리고 WebAssembly 코드를 작성하는 것이 아닌 WebAssembly 모듈을 웹(Node.js 등등)앱으로 가져와 javascript를 통해 사용할 수 있다는 편리함도 있습니다.

 

 

WebAssembly(웹어셈블리) 의 기능

1. 빠르고 효과적이고 이식성이 좋습니다.

웹어셈블리는 컴퓨터에서 사용하는 어셈블리언어와 비슷하여 여러종류의 브라우저 위에서 거의 네이티브에 가까운 속도로 실행될 수 있습니다.

 

2. 보기 쉽고 디버깅이 가능합니다.

웹어셈플리는 고급언어가 아닌 저급언어에 가깝지만 손으로 작성하고, 볼수 있고, 디버깅을 할 수 있습니다.

 

3. 안전합니다.

웹브라우저에서 실행이 될때 안전하게 실행되도록 설계되었습니다.

 

4. 웹에 악영향이 없습니다.

다른 웹기술과 마찰없이 사용할 수 있고 하위호환성을 관리 할 수 있도록 설계되었습니다.

 

 

WebAssembly(웹어셈블리) 사용법

 

1. Emscripten 라는 도구로 C / C++ 앱 만들어서 사용하기

Emscripten 도구를 사용하면 C / C++ 소스코드를 가져와서 .wasm 형식의 확장자를 가진 모듈로 컴파일을 하고, 이 모듈을 불러와서 자바스크립트 코드를 넣어서 HTML 문서에서 코드의 실행결과를 볼수 있습니다.

 

2. 어셈블리 수준에서 바로 WebAssembly 를 작성하거나 생성하기

웹어셈플리 텍스트를 바이너리로 바꿔서 직접 작성한 텍스트를 바이너리로 바꿔서 작성이 가능합니다.

 

3. Rust 앱을 만들어서 WebAssembly 를 통해 사용하기

필요한 툴을 설치하고, Rust 프로그램을 WebAssembly npm 패키지로 컴파일 하여 WebAssembly를 만든후 사용할 수 있습니다.

 

4. TypeScript와 비슷한 WebAssemblyScript를 사용하여 WebAssembly 컴파일 하기

 

 

 

 

오늘의 포스팅 정리

 

오늘은 WebAssembly(웹어셈블리)에 대해서 알아보았습니다.

 

WebAssembly가 무엇인지 알고 기능 및 사용법을 알게되었습니다.

 

다음 포스팅에서는 WebAssembly를 사용법대로 만들어 보겠습니다.

반응형

댓글