메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

중요한 전환점이 될 기술 웹 어셈블리

hji7***

|

2020-10-24

웹어셈블리 인 액션

웹어셈블리를 처음 접하는 분을 위한 안내서로, 자바스크립트에 의존하지 않고도 브라우저 기반의 고성능 애플리케이션을 만들 수 있는 방법을 알려줍니다. 네이티브 웹어셈블리 모듈을 작성하고, 자바스크립트 컴포넌트와 상호작용하고, 웹 워커와 pthread를 활용해 성능을 최대한 높이는 지식을 습득할 수 있습니다. 필요한 함수와 특성, 기법을 쉽게 찾아볼 수 있도록 섹션을 깔끔하게 정리하는 방법도 배웁니다.

  • 저자 : 제러드 갤런트
  • 번역 : 이일웅
  • 출간 : 2020-10-05

웹어셈블리라는 말은 풍문처럼 많이 들었지만, 책을 본적은 없었기 때문에, 이 책을 보게 되었습니다. 

이 책은 웹어셈블리에 대한 간략한 소개를 하고 재빠르게 C/C++을 사용해서 웹어셈블리 모듈을 어떻게 만들어 내는지 소개하고 있는데요. 저는 10년전까지만 해도 C/C++를 사용해서 일을 했었기 때문에, 상당히 친근한... 느낌을 받았습니다. 특히 C/C++를 쓰다보면, 중요하게 설명하고 있는 모듈관련 기능들이 웹어셈블리로 녹아들어가는 건, 좀 난감하기까지 하더군요. 

재미있는 건, 웹어셈블리 모듈로 컴파일하는 언어가 C/C++만이 아니라는 겁니다. Rust, typescript, java, go, python, c# .. .특히 C#을 기반으로 하는 블레이저는 요즘 한참 뜬다고 하더군요. 


 

 

다양한 언어로 솔루션을 만들어내는 아키텍처는 사실, 20년전쯤 많이 주목받았던 기술이 있습니다.  바로, CORBA입니다. 물론 요즘도 쓰이는 곳이 있다고는 하는데 ( 솔직히 어디서 쓰는지 저는 보지못했습니다. ) 

현재 인터넷 브라우저가 사용하는 아키텍처 인 "브로커 패턴"을 그대로 어플리케이션 구현에 사용했던 CORBA는 다양한 언어로 CORBA 모듈을 만들면 이것을 연결시켜서 소프트웨어를 서비스 형으로 제공하려는 구상을 가지고 있었던 기술이었습니다. 

예전에 CORBA가 왜 망했는지에 대한 기사를 볼 기회가 있었는데요. 한마디로 쓰기 너무 어려워서 였습니다. 그리고 비쌌고요. 어떤 회사에서 이 기술을 쓰려면 개발 시작할 때부터 돈을 좀 내야 했었나봅니다. 그리고 내부적으로 정치적 문제도 있었다는 군요. 

하여튼, 살짝 주춤하던 시기에 닷컴 버블이 터지고 맙니다. 즉, IT 업계에 밀려들어가던 자금 줄이 끈어진 셈이죠. 아시겠지만, 돈줄 끈기면 그 기술을 사장됩니다. 

결국, 지금은 아는 사람도 별로 없는 기술이 되어 버렸습니다. 

그런데, 어느 순간 CORBA로 하려던걸 웹으로 하는 쪽으로 방향이 결정되었습니다. 누가 그렇게 결정한 건 아닌것 같은데... 그냥 지금 현재는 그런 상태입니다. 

하지만 자바스크립트는 느리다는 문제가 있습니다. 즉, 사용자의 요구에 맞게 좀 빠른 속도가 필요한 어플리케이션을 만들어내기는 한계가 있는 거죠. ( 요즘 컴퓨팅 파워는 그 한계가 정말 있나.. 싶기도 하지만 ... )

예를 들어서 게임이나, 캐드 솔루션 같은건 솔직히 웹에서 돌리기 민망하죠. 그래서 WebGL이 나왔는데, 역부족입니다.  그래서 웹어셈블리가 필요하지 않았을까 싶군요. 

CORBA는 전체 그림을 먼저 그리고 기술 표준을 만든다음 시장에 강제하는 방향으로 변화를 만들려고 했다면, 현재 웹기술은 그냥 시장이 흘러가는 방향대로 필요한 기술이 하나씩 생기고 다같이 써보다가 좋으면 계속 쓰는 쪽으로 가고 있는 듯하네요. 


 

 

이 책에서도 많이 나오지만, 웹어셈블리가 자바스크립트보다 빠른 가장 근본적인 이유는 변수형 때문입니다.  

"변수형을 미리 알고 시작하기 때문에 자바스크립트 엔진은 코드를 모니터링할 필요 없이 그냥 웹어셈블리 바이너리를 기계어로 컴파일할 있습니다. (본문중에서)"

어차피 프로그래밍언어로 코딩한 코드는 기계가 알아듣는 코드로 바뀌어야 하는데요. 기계는 동적인 변수를 이해하지 못합니다. 즉 컴파일러나, 인터프리터가 그걸 판가름해서 기계가 알게 해줘야 하는 거죠. 

그런데 코딩 할때부터 변수타입을 결정해주면 어떨까요? 그럼, 당연히 이게 무슨 타입인지 인터프리터가 쫓아다니지 않아도 되니 빠르게 될 겁니다. 

그럼, 왜, 자바스크립트는 변수 타입을 그렇게 쓰게 했을까요? 그냥 좋아보여서는 아닐겁니다. 이건 프로그래밍 패러다임과 연관이 있습니다.  함수형 프로그래밍 패러다임에 해당하는 언어들이 대부분 변수의 타입을 쓰지 않는데요.  함수만으로 코딩을 하고 싶은데 변수의 선언부가 꼭 끼어들어야 한다면, 간결한 코드를 만들기 힘들어질 겁니다. 하지만 이는 코드를 한꺼번에 컴파일해서 기계어로 보내는 걸 힘들게 만드는 단점이 되는 거죠. ( 느려진 원인이죠 )

그럼 속도를 위해서 함수형 프로그래밍 패러다임을 버려야 할까요? 그렇지 않을 것 같습니다. 함수형 프로그래밍 자체가 근래에 만들어진 것이 아니고, 컴퓨팅 파워가 말도 안되는 시절부터 존재했던 것입니다.  다시 말하면, 컴퓨팅 파워가 계속 좋아지면 어떻게 해서든 함수형 프로그래밍 쪽으로 갈 거란 말이됩니다. 

이유가 있겠죠. 코드를 아주 간결하게 만들수 있도록 해주는 개념이고, 코드가 간결해 질 수록 버그는 줄어든다는 건 학계 정설이죠. ( 믿거나 말거나 ) 게다가 사용자 인터페이스, 사용자 경험 이런걸 진화시키기 위해서는 그쪽 코드는 수시로 바꾸고 빨리 바꾸고 여하튼 사람이 뭔가 많이 해야 합니다. 

결국, 우리는 자바스크립트를 "함수형 프로그래밍"으로 사용하여 개발자가 많이 손봐야 할 코드를 만들고, 웹어셈블리로는 개발자보다는 컴퓨터 쪽에 더 가까운 코드를 만드는데 쓰게 되지 않을까 싶습니다. 


 

 

결론은, 둘다 알아야 한다가 되지 않을까 싶네요. 

그래서, 책은 나중에 생각 봐야 같습니다. 그리고, Rust 아님 다른 언어로 웹어셈블리하는 책을 봐야 겠군요

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?