웹어셈블리란 무엇인가?
웹이 발전하면서 많은 어플리케이션이 웹으로 넘어왔지만, 웹 브라우저들은 아직도 자바스크립트라는 프로그래밍 언어만을 지원한다. 이는 얼핏 보기에 코드 한번에 모든 브라우저에서 작동한다고 생각될 수 있지만, 웹 브라우저 제작사마다 구현 방식이 조금씩 다르기 때문에 일일이 테스트를 해봐야 작동 여부를 정확히 확인할 수 있다.
또 C, C++, Rust와 같은 프로그래밍 언어에 비교하면 성능도 떨어지기 때문에 웹 브라우저 제작사들은 이를 해결할 방안을 모색하기 시작했다. 그리하여 구글, 마이크로소프트, 애플, 모질라가 개발한 것이 바로 웹어셈블리(Web Assembly, WASM)다.
- WASM은 거의 대부분의 브라우저에서 네이티브 속도로 실행 가능한 저수준 어셈블리와 같은 언어다.
- WASM 파일은 빠르게 전송하고 내려받을 수 있도록 간결하게 압축된 형태로 설계되었고, 신속한 파싱과 실행이 가능한 방향으로 설계됐다.
- WASM은 C+, Rust 등 다른 언어로 작성된 코드를 웹에서 실행할 수 있도록 처음부터 컴파일 타깃으로 설계됐다.
- WASM은 주로 웹 브라우저에서 사용하지만 브라우저가 아닌 환경에서도 사용 가능하다.
웹어셈블리는 어떤 문제를 해결할 수 있는가?
성능 개선 (최적화)
기존의 웹 개발에 쓰이던 자바스크립트는 인터프리터 언어이다. 때문에 매번 인터프리터가 코드를 실행할 때마다 명령어를 기계어로 변환하는 작업이 이루어지며, 이 과정에 많은 시간을 사용할 수 없기 때문에 최적화가 어렵다. 또한, 최근의 웹 페이지들은 단순 텍스트, 이미지들보다 복잡하고 데스크톱 애플리케이션만큼 시각적으로 화려한 사이트들이 많아져 더 성능 최적화가 중요하다.
- 자바스크립트보다 속도가 빠르다
웹어셈블리로 컴파일한 코드는 바이너리 형태의 바이트코드이기 때문에 용량이 작고 전송 및 다운로드 속도가 빠르다. 또한, 브라우저에서 웹어셈블리 파일을 내려받는 도중에 코드를 기계어로 컴파일하는 스트리밍 컴파일 기술도 도입되어서 시동 시간이 더 단축되었다. - 브라우저에서 자바스크립트 이외의 언어를 사용할 수 있다.
웹어셈블리는 자바스크립트 언어에 국한되지 않기 때문에 자바스크립트의 작동 방식을 신경쓰지 않고 독립적으로 개발할 수 있다. - 코드 재활용이 가능하다.
자바스크립트 이외의 언어로 작성된 코드를 웹어셈블리로 컴파일하여 기존 코드를 재활용할 수 있다.
웹어셈블리는 어떻게 작동하는가?
자바스크립트 코드에서 아래와 같은 코드를 작성했다고 가정해보자. 자바스크립트의 변수는 동적이라 변수 a, b와 add 함수의 변수형은 런타임에 코드를 모니터링 하는 방법밖에는 없다.
function add(a, b){
return (a + b);
}
하지만 WASM는 바이너리 포맷으로 미리 컴파일을 하기 때문에 코드를 모니터링하지 않아도 된다.
웹어셈블리는 왜 안전한가?
런타임과 격리되어 테스트를 거치면서 자바스크립트 VM을 공유하는 최초의 언어이기 때문이다. 자바스크립트로 접근할 수 없는 것은 WASM 모듈에서도 접근이 불가능하다.
웹어셈블리 모듈을 개발할 수 있는 언어는 무엇인가?
WASM 개발 초기에는 C/C++에 집중되었지만, 현재는 Rust나 어셈블리스크립트, GO 등의 언어도 지원하기 시작했다.
간단 요약
- 바이너리 포맷이기 때문에 크기가 작고 속도가 빠르다.
- 파싱 및 검증이 빠르고 병렬 컴파일이 가능하다.
- 컴파일 스트리밍 덕분에 WASM 모듈을 내려받으면서 컴파일이 가능하다. 다운로드가 끝나면 바로 인스턴스를 생성할 수 있다.
- 자바스크립트 VM이 아닌 머신 레벨에서 호출되므로 큰 프로젝트일수록 성능 향상을 노릴 수 있다.
- 매번 코드를 실행할 때마다 동일하게 실행된다.
- WASM은 자바스크립트 언어와 분리하여 빠르게 업데이트가 가능하다.
- 자바스크립트가 아닌 언어로 개발해도 브라우저에서 사용할 수 있다.
- WASM 프레임워크를 브라우저가 아닌 환경에서도 사용할 수 있게 구성을 한다면 재활용이 가능하다.
'Archive' 카테고리의 다른 글
유니티 리소스 구할 수 있는 곳 리스트 (0) | 2022.09.30 |
---|---|
Permutation (0) | 2022.09.15 |
Binary Exponentiation (0) | 2022.09.11 |
홍정모랩 파이썬 추월코스 후기 (0) | 2022.09.10 |
2501 약수 구하기 (0) | 2021.02.13 |