3. WASM(웹 어셈블리)

[오류 정정]

WASM의 성능을 서술하는 부분에서 수치가 좀 부정확합니다.

자세한 내용은 나중에 또다른 글로 써보겠습니다

 

[기타 아주 유용한 글]

[번역] 웹어셈블리에 주목하라 - Jisu Yuk

[Wasm] WebAssembly 란 무엇인가? - Ringo

 

종류 프로그래밍 언어 및 바이트코드
개발 W3C(재단), Intel(기업), Red Hat(기업), Fastly(기업), Mozilla(단체) 등
발표일 2017년 3월

 

WASM(즉 웹 어셈블리) (위키피디아, 홈페이지, MDN) 는 웹 브라우저에서 실행 가능한 바이트코드 웹 표준이다. 웹 어셈블리의 전체 이름인 WebAssembly는 'Web에서 실행 가능한 어셈블리 코드' 라는 의미를 가지고있으며, 최근의 웹에서의 기능이 다양화되는 추세에 따라, 기존의 웹에서 실행 가능한 언어인 Javascript의 성능적 한계를 극복하기 위해 탄생했다. 따라서 웹 어셈블리를 이용하면 높은 성능을 이끌어내는 웹 어플리케이션을 만들어낼 수 있다.

 

일반적인 언어들과 다르다

웹 어셈블리는 여타 프로그래밍 언어와 같이 직접 코드를 작성하지 않는다. 대신 다른 언어에서 프로그램을 작성한 후, 언어에 맞는 전용 컴파일러를 이용하여 최종적으로 '.wasm' 형태의 파일을 얻을 수 있다. 이러한 과정을 거쳐야만 하는 이유는 웹 어셈블리가 다양한 언어에서 작성 가능하도록 고안되었으며, Low Level한 바이트코드의 형태를 띄고 있기 때문이다. Low Level함에서 얻을 수 있는 이점은 후술한다. 결국 웹 어셈블리가 추구하는 철학은 '편리한 형태의 프로그래밍 언어' 보다는 '기계들 사이에 전해져서 사용되는 직접적인 실행파일'에 가깝다.

 

성능 + 유연성 + 안전함

웹 어셈블리는 기존의 컴파일러를 통해 해석을 거쳐야 했던 Javascript와 다르게, Low Level한 형태로서 기계가 해석하기 쉬운 형태이다. 이를 통하여 컴퓨터에서 직접 '.exe' 형태의 운영체제 실행 파일을 생성해서 실행했을 때와 비교해서 최소 55% 최대 150%의 속도 저하를 겪는 정도의 성능을 이끌어낼 수 있다. 그럼에도 이는 여전히 Javascript와 비교해서는 웹 어셈블리가 월등하게 높은 수준의 성능으로, 이상적인 최적화시에 웹 어셈블리는 Javascript보다 최대 15배의 성능을 낸다.
웹 어셈블리는 웹 브라우저에서 작동하는 Low Level 언어라는 점에서도 중요하다. 일반적인 Low Level 언어들은 OS에 종속되어 특정 기능을 특정 OS에서만 쓸 수 있는 경우가 발생하여, 결국 각 OS마다 실행 파일을 개별적으로 생성하고 배포해야 한다. 하지만 웹 어셈블리는 공통된 웹 표준으로서, OS에 상관 없이 어떠한 브라우저라도 설치되어 있으면 실행할 수 있다. 이는 개발의 번거로움을 크게 줄이면서도, 웹 브라우저라는 가벼운 실행 환경에서, 실행 파일 수준의 성능을 이끌어낼 수 있음에 의미가 크다.
또한 웹 어셈블리는 격리 구조인 '샌드박스' 내에서 실행되게 되어 메모리 할당 영역과 기능이 제한된다. 이는 웹에서 작동하는 웹 어셈블리에서 안전성을 우선하는 것으로 설계하였기 때문이다. 이런 구조로 웹 어셈블리는 실행 과정에 매우 취약한 각종 메모리 오류와 허용되지 않은 작업을 방지할 수 있다.