jrcfore***
2020-10-24

웹어셈블리를 처음 접하는 분을 위한 안내서로, 자바스크립트에 의존하지 않고도 브라우저 기반의 고성능 애플리케이션을 만들 수 있는 방법을 알려줍니다. 네이티브 웹어셈블리 모듈을 작성하고, 자바스크립트 컴포넌트와 상호작용하고, 웹 워커와 pthread를 활용해 성능을 최대한 높이는 지식을 습득할 수 있습니다. 필요한 함수와 특성, 기법을 쉽게 찾아볼 수 있도록 섹션을 깔끔하게 정리하는 방법도 배웁니다.
필자(리뷰자)는거의 지난 15년간을 시스템 펌웨어나 혹은 파일시스템, 그리고게임 관련해서 개발해왔었다. 그러다 좋은 기회가 생겨 웹용 서비스 지향 회사에 취업을 하여 지금은 웹개발자로 전향한 케이스이다.
처음 웹을 개발할 때는 모든 게 혼란스러웠다. 컴파일러가 없이 인터프리터형태로(지금은 형태가 좀 바뀌어 스크립트도 부분적으로 컴파일한 옵티 멀 코드를 가진 상태로 수행되는것으로 알고 있다.) 프론트가 동작하는 것이 신기했고, 무엇보다스크립트 언어가 구동하는 방식이 신기했다.
물론 블로거 역시 다수의 자바 스크립트 언어 관련 책 리뷰를 포스팅했었고, 그동안 CSS와 HTML에 관해 나름 개인 프로젝트와 그와 관련한 다양한알고리즘 테스트 서비스를 구축해본 경험이 있어 의기양양한 면도 있었다.
하지만! 실재 실무에서 쓰이는 스크립트 언어는 필자가 상상했던 것보다복잡하였고, 책에서 언급되지 않은 최신 기술들 그리고 다양한 기능들이 다루우고 있었다. 그렇기에 필자가 처음 접한 실무 업무 때의 느낌은. 필자에게 익숙한세상으로 돌아가고 싶은 깊은 향수, 그리고 바람이 전부였다고 해도 과언이 아닐 것 같다.
그런데 언제부터인가? 웹 어셈블리라는 개념이 등장했다. 이 개념은 간단히 말해 C/C++로 비교하자면, 직접 ASM 수준의 코딩을 하는 것을 의미한다. 하지만 웹의 경우, 이렇게 기계언어 단까지 프로그래머가 다룰 필요는없었나 보다. 웹은 이보다 윗단인 C/C++ 등을 웹 어셈블리로칭하고 있었다. 그렇기에 필자는 이번 리뷰를 매우 즐겁게 할 수 있었고, 이를 통해 웹의 한층 더 복잡한 작동 원리와 웹 어셈블러의 작동원리에 관해 파악할 수 있었다.
【어떤 독자를 위한 책인가】
'웹어셈블리 인 액션' 일단 기본적인 C/C++에 관한 어느 정도 수준의 이해력이 있어야하고, CS의 어느 정도의 기본적인 지식 역시 요하는 책이다. 위의이러한 기본기 없이 이 책을 접하기엔 어느 정도 진입장벽이 있으므로, CS 전반의 기초 지식이 부족한분들에겐 권하지 않는다.
만약 위에서 말한 기초 지식이 어느 정도 갖춘 사람이라는 조건이 완성되었을 때 본인의 웹서비스에 관해 좀 더빠른 서비스를 꿈꾸거나 혹은 C/C++의 스타일 코딩을 웹에 한번 섞어서 적용해보고 싶은 사람이라면위의 도서를 읽어보길 권한다. 읽어본다는 것은 정확한 표현은 아닌 것 같고 학습하길 권장한다.
솔직히 필자도 웹에 관한 전반에 걸친 지식에 공백인 부분이 좀 있어서 이 책을 읽으며 새롭게 배우고 깨달은 부분이없잖아 있었다. 그렇기에 꼭 서비스 최적화나 C/C++ 적용을위해서가 아니더라도 자바스크립트 코드와 어떻게 C/C++ 코드가 통신을 하는지, 이를 위해서 웹의 구조에 어떤 부분이 변경되었고 최신 웹 서비스의 구조는 어떠한지를 다시 한번 돌아보고자 하는사람들에게 이 책을 권한다.
【책의 구성】 '웹어셈블리 인 액션'의책의 구성은 어떠한가.
이 책은 다음과 같이 총 4가지챕터와 브록들로 구성되어 있다.
Part 01
- 웹 어셈블리가 무엇인지에 관해 논한다
- 웹 어셈블리가 왜 등장하였고 어떤 점이 기존의 기술들 (JS, Node.JS)에 비해 좋은지 등의 배경을 설명한다.
- 웹 모듈의 전체적인 아키텍처에 관해 논한다.
- 웹 어셈블리 모듈을 만들기 위한- '엠스크립튼'이라는 도구에 대해서 살펴본다.
- 간단한 실습을 통해 위의 내용들을 복습한다.
Part 02
- 기존의 C++ 코드를어떤 식으로 웹 어셈블리 모듈로 변환하는지에 관해 다룬다.
- 연결 코드의 유무에 따른 모듈 생성 법을 배운다.
- 웹 어셈블리 모듈에서 자바스크립트 호출 법을 배운다.
- 함수 포인터를 이용한 통신 방법을 배운다.
Part 03
- 웹 어셈블리의 심화 챕터이다. 내용이앞장들에 비해 복잡할 수 있으므로 꼼꼼히 읽어보도록 하자.
- 동적 링킹의 개념에 관해 배우고C/C++로 작성한 코드들을 수동 링킹 하는 기술에 관해 다룬다.
- 동적 링킹인 dlopen 등을다루게 된다.
- 동적 모듈을 여러 개 생성하여 동적 링킹하는 방법 등을 다룬다.
- 웹 워커와 pThread를사용하는 방법에 관해서 다룬다. (이 부분이 굉장히 매력적인 부분입니다. - 챕터 9)
- Node.js 환경에서 웹 어셈블리 모듈을 사용하는 법을 다룬다.
Part 04
- 텍스트 포맷이 무엇인지 텍스트 포맷의 작동원리에 관해 다룬다.
- 이를 통해 그동안 배운 내용들을 기반으로 카드 짝 맞추기 게임을만든다.
- 위 과정 중에 트러블 슈팅과 버그 해결 등, 웹 디버거를 이용한 처리 방법을 다룬다.
- 각 플랫폼별 디버깅하는 방법에 관해서 배운다.
- 테스트 자동화 (테스트코드 작성) 방법에 관해 다룬다
- 웹 어셈블러의 앞으로의 전망에 관해 논한다.
기타
- 이 책을 학습하는데 필요한 학습환경 구축에 관해
- 엠스크립튼 헬퍼 함수 이용법
- 엠스크립튼 매크로 이용법
- 등
【웹어셈블리 인 액션을 읽으며…….】
시대가 정말 많이 변했다는 것을 느낀다.15년 전에 웹은 노가다의 산물이었다. 그 당시엔FE/BE 그런 개념도 딱히 없었다. 그저 HTML 과 CSS 그리고 자바로 된 spring 기초 버전이 전부였던 것으로기억하고 있다. (자바 전에는 무엇이었을지.. 아마 C/C++로 만들어진 원초적 서버이지 않았을까? 예상해본다) 그런데 이제는 웹에 C/C++을 붙이고, 다이내믹한 웹이 대세를 이루는 시대가 되었다. 과히 웹을 안 쓰는곳은 이제 IT 업계에서는 찾아보기 힘들 정도이다.
결국 프로그래밍도 사람이 사는 세상이다. 무슨 말인고 하니, 사람에게 익숙한 부분으로 모든 것이 회귀한다는 것이다. 웹도 처음엔매우 간단했다. HTML의 태깅과 마크업은 정말 단순했다. 그러다어느 순간 javaScript가 생겨났고 이를 기반으로 수많은 기능들이 태생했다. Node.js, Vue.js, react.js 등등..
그렇지만 위의 기술들을 새로 배우고 접한다는 것은 개발자에겐 피로한 일일지도 모른다는 생각이 든다. 그렇기에 전체는 아니어도 부분 모듈로써 웹 어셈블리 생겨났고, 이를통해 고전 개발자. 즉 옛 언어인 C/C++에 익숙한 개발자들도웹의 세상에 참여할 수 있게 되었다. (물론 웹 어셈은 성능적 향상을 꾀하기 위해 제안된 기술인 걸로알고 있다.)
신기하지 않은가? 최신 기술이라고 하지만 결국은 옛것과 다시 하나가되어가고 있다. 어찌 보면 최고의 기술은 옛것, 결국 처음우리 인간의 손에 의해 제안된 기술일 수 있을 것이란 생각이 든다.
그렇기에 여러분께 강조하고 싶은 것이 하나 있다.
기초에 충실하자!