당신의 성공적인 비즈니스를 위한

웹어셈블리.jpg

웹어셈블리

 

 

[질문]
웹어셈블리(Web Assembly) 뜻과 개념에 대해서 자세히 설명해주세요. 웹어셈블리라고 하는 용어에 대해서 알고 싶습니다.

[답변]
안녕하세요. IT전문 컨설턴트 입니다.  

20년 전에 웹어셈블리라는 용어가 업계에 들어온 이후 오래간만에 들어보는 용어입니다. 최근들어서 다시 소스 보안 및 속도 부분에 있어서의 장점으로 부각되고 있는 상황입니다. 특히 피그마, 포토샵등에서 사용되면서 좋은 시장반응을 가져오고 있지만, 기술상의 난이도가 높아서 실제 업무상으로는 많이 사용되지는 않습니다. 

단순히 용어상으로는 Web+Assembly로 해석할수 있습니다. 

우리가 흔히 사용하는 웹은 인터프리터라는 방식의 기술을 기본적으로 사용하고 있습니다. 특히  html이나 스크립트 계열의 언어들은 우리가 책을 읽듯이 위에서부터 아래로 해석되는 방식으로 소스코드를 웹브라우저앤진에서 해석해서 사용자에게 노출하게 됩니다. 반면 앱의 경으는 컴파일러(어셈블러) 방식을 많이 사용합니다. 해당 앱이 설치된이후 로딩이 끝난 다음 실행하는 방식이죠. 이런이유에서 로딩이 100%되지 않는다면 실행되지 않는 단점을 가지고 있지만, 한번실행한 이후에는 빠르게 실행되기때문에 스마트폰에서는 표준으로 사용되고 있습니다. 


문제는 웹애서 왜 인터프리터방식을 사용하느냐 하는 점입니다.  3세대에이어 4세대로 분류되는 현재 웹시스템에서 기존 2세대와는 다른 3세대 언어적인 차이를 인지할 필요가 있습니다. 2세대 까지는 동시에 많은 유저들이 사이트를 접속할 일은 많지 않았습니다. 여러사람이 접속해서 서비스를 요청하게 되었을때, 3세대 부터는 인터프리터의 방식을 통해서 패킷을 쪼개서 전송하는 기법을 사용하게 됩니다. 이런 경우 많은 유저들이 요청이 있더라도 다소 지연되는 느낌은 들겠지만, 서비스는 정상적으로 사용이 가능하죠. 반대로 컴파일러 방식으로 웹을 구현하게 되면, 유저들은 로딩이 완료되기 전까지 서비스를 이용할수 없으니, 패킷을 나눠주더라도 기다리는 시간을 버티지 못할 가능성이 높습니다. 


이런 이유에서 웹은 인터프리터를 기반으로하지만, 위에서도 말씀드린바 대로 속도와 보안등의 이슈가 발생할수 있는경우에 한하여 컴파일화(어셈블리화)된 모듈을 서버에서 제공하는 방법으로 해결하게 됩니다. 물론 컴파일화와 어셈블리화는 조금은 다른개념입니다. 어셈블리화가 바이트코드(기계어수준)으로 컴파일된 개념이라 인지하시면 이해에 도움이 될듯 합니다. 



조금더 전문적으로 설명을 드리자면, 어셈블리(WebAssembly, WASM)는 웹 페이지에서 고성능 애플리케이션을 가능하게 하는 이식 가능한 이진 코드 포맷을 정의하는 개방형 표준이라 할수 있습니다. C, C++, VB, Rust 등의 언어로 작성된 코드를 컴파일하여 브라우저에서 직접 실행할 수 있는 효율적인 저수준 바이트코드이며, 네이티브에 가까운 성능을 제공하는 것을 목표로 하고 있습니다. 



이런 웹어셈블리는 다양한 종류가 나눠져 있습니다. 

고성능 어셈블리 : JavaScript보다 빠른 실행 속도를 제공하며, 복잡한 계산이나 그래픽 처리 등에 적합합니다. 

이식성: 웹어셈블리: 다양한 플랫폼에서 실행될 수 있으며, 여러 언어를 지원

보안: 웹어셈블리 : 샌드박스 환경에서 실행되어 시스템 자원에 직접 접근할 수 없어 보안성이 높습니다. 

호환성: 웹어셈블리 : JavaScript와 함께 실행될 수 있으며, 서로 보완하는 역할을 할수 있습니다. 요렇게 다양하게 분리를 하고 있습니다. 



웹어셈블리는 일반적으로 다음의 과정을 거쳐 작동한다:

구현: 개발자는 C, C++, Rust 등의 언어로 원하는 로직을 구현한다.

컴파일: LLVM 등의 컴파일러를 사용하여 소스 코드를 웹어셈블리 바이트코드로 컴파일한다.

실행: 웹 브라우저는 컴파일된 웹어셈블리 모듈을 로드하고 실행한다.



웹어셈블리가 브라우저에서 실행되기 위해 필요한 몇 가지 핵심 개념은 다음과 같다:

모듈(Module): 브라우저에서 실행 가능한 기계어 코드로 컴파일된 웹어셈블리 바이너리

메모리(Memory): 웹어셈블리의 저수준 메모리 접근 명령어에 의해 읽고 쓰여지는 바이트들의 선형 배열

테이블(Table): 함수 레퍼런스들의 배열

인스턴스(Instance): 모듈과 그 모듈이 사용하는 모든 상태의 쌍



웹어셈블리는 다양한 분야에서 활용될 수 있다:

웹 게임: 고성능을 요구하는 웹 게임 개발에 활용

가상현실(VR) 및 증강현실(AR): VR/AR 애플리케이션의 성능 향상에 기여

이미지 및 비디오 편집: 브라우저 내에서 이미지 및 비디오 처리 작업 수행

과학 및 공학 시뮬레이션: 복잡한 시뮬레이션 작업을 웹에서 실행

서버리스 함수: 서버리스 환경에서 빠른 시작 시간과 효율적인 리소스 사용을 가능하게 함.



실제 사례

어도비 포토샵(Adobe Photoshop): 웹 기반 버전에서 웹어셈블리를 활용하여 성능을 개선.

피그마(Figma): 디자인 툴의 성능 향상을 위해 웹어셈블리를 사용.

오토캐드(AutoCAD): 웹 기반 CAD 서비스 제공.



[IT컨설턴트의 생각]

웹은 다양한 기술을 사용하고 있으며, 빠르게 급변하고 있습니다. 

현재 3~4세대 개발언어를 기반으로 시스템이 구축되고 있으며, 1년에도 수십개의 개발언어 및 개발도구가 시장에 쏟아져 나오고 있습니다. 단순 패키징을 통해서 비슷한 기능을 흉내내는 수준이나, 도구의 도움으로 손쉽게 빌드하는 기술이 필요한 상황이 아니라면, 위험한 선택일수 있습니다. 개발언어는 한번 결정하면 지속적으로 해당언어를 기반으로 구축하고, 관리해오는것이 일반화 되어있습니다. 지금 도입하는 개발언어가 과연 언제까지 사용될수 있을까요?. 도구의 도움을 통한다면 더 심각한 상황이 될수도 있습니다. 편리성이냐 안정정이냐 하는 이슈뿐만아니라, 보안성, 속도, 인력수급, 스킬친화도 등의 문제에 있어서도 신중한 접근이 필요합니다. 

특정 기술을 가지고 시장에 적용하는것도 이슈상으로는 도움이될수는 있지만, 궁극적인 해결은 될수 없습니다. 구축하려는 비즈니스에 맞는 개발전략과 개발방법론, 개발언어산정 등을 통해서 경쟁력 있는 웹시스템 구축이야말로 성공을 위한 필수 선택입니다. IT전문 컨설턴트의 도움을 통해서 시행착오를 줄일수 있는 전략을 고민해 보세요.