News Feed

웹어셈블리가 개발자를 매료시키는 이유

컨텐츠 정보

  • 조회 767

본문

어셈블리 언어의 개념은 컴퓨팅만큼이나 오래됐다. 일반적으로 어셈블리는 물리적 중앙 처리장치 내부에서 데이터를 이동하는 특정 명령어를 의미한다. 컴퓨터의 모든 것은 1과 0으로 이루어져 있지만, 그 위에 있는 계층은 어셈블리 코드이다. “사람이 읽을 수 있다”고 말하는 것은 다소 과장된 표현이지만, 어셈블리를 보고 무슨 일이 일어나고 있는지 정확히 이해할 수 있는 사람도 있고, 어셈블리를 사용해 세부 튜닝을 할 수 있는 사람도 있다.

일반적으로 컴파일러를 사용해 C++ 또는 오브젝트 파스칼 같은 고수준 언어를 베어메탈에서 실행되는 어셈블리 언어로 변환한다. 각 프로세서마다 고유한 어셈블리 언어가 있으므로 인텔 프로세서의 실행 파일은 Arm 기반 시스템에서 실행되지 않으며, 그 반대도 마찬가지다. 어셈블리는 일반적으로 특정 물리 하드웨어에 종속되어 있다.

그러나 웹어셈블리(WebAssembly, Wasm, 와슴이라고 읽는다)는 다르다. Wasm의 기본 개념은 어디에서나 실행할 수 있다는 것이다. 하드웨어 기반 어셈블리 언어와는 근본적으로 다른 부분이다. Wasm은 처음부터 이식성을 고려해 설계되었으며, 다양한 환경에서 안전하게 실행할 수 있도록 만들어졌다.

어셈블리 위에 쌓인 추상화

컴퓨팅의 발전은 이전보다 더 복잡한 계층 위에 추상화 계층을 구축하는 것이었다. 1과 0은 어셈블리 언어가 되었다. 어셈블리는 포트란, 코볼, C가 되었다. 이런 언어는 어셈블리로 컴파일됐다. 그런 다음 그래픽 사용자 인터페이스를 구동하는 윈도우와 같은 API 수준을 추가했다.

그리고 자바 가상머신(JVM)과 .NET 런타임과 같은 추상화 개념이 등장하면서, 개발자는 원시 기계 코드와 더욱 멀어졌다. 이들 추상화 개념은 실행 가능한 개념을 이론적으로 어떤 운영체제에서든 실행될 수 있는 것으로 만들었다.

그 이후에는 브라우저에서 실행되는 코드로 더욱 추상화했다. 요즘에는 브라우저가 운영체제의 기능을 거의 수행하기 때문에, 개발자가 기본 운영체제에 의존하는 정도가 최소화됐다. 예를 들어, 크롬은 윈도우, 안드로이드, iOS, 맥OS에서 실행되며, 자체적으로 제어되는 샌드박스 내에서 코드를 실행한다. 이것은 JVM이나 .NET 런타임보다 더 심층적인 추상화이다.

그래서 필자는 Wasm에 매료됐다. Wasm은 “한 번만 작성하면 어디에서나 실행할 수 있다”는 요구에 실제로 부응할 수 있는 잠재력을 가지고 있다. 이것이 바로 자바의 큰 희망이었지만, “한 번만 작성하면 어디에서나 디버깅해야 한다”는 말로 바뀌는 데 그리 오래 걸리지 않았다.

아직은 Wasm이 “모든 곳에서 실행되는” 것은 아니지만, 브라우저를 넘어 꾸준히 그 사용 범위가 확대되고 있다. 특히 서버사이트 환경에 더 널리 채택될 것으로 보인다. 현재로서는 Wasm은 게임이나 암호화와 같이 연산이 많이 필요한 작업에 가장 유용하다. 브라우저는 점점 더 많은 애플리케이션의 대상이 되고 있기 때문에, Wasm이 더 널리 사용될 것이라는 것은 당연한 일이다.

러스트, C/C++, 고(Go)가 아마도 가장 잘 알려진 Wasm 지원 언어일 것이다. 그러나 어떤 언어든 Wasm으로 컴파일할 수 있다. 매일 우리가 작성하는 코드가 브라우저에서 실행될 가능성이 점점 더 높아지고 있으며, 웹 개발을 대상으로 하는 언어라면 Wasm을 지원하는 자연스러운 후보가 될 것이다.

마지막 단계

아마도 현재 가장 큰 장벽은 웹어셈블리에 파일이나 네트워크 시스템과 같은 시스템 수준의 자원에 접근할 수 있는 공식적인 방법이 없다는 점일 것이다. WASI(WebAssembly System Interface)가 있지만, 서버사이드 환경에서 널리 지원되지는 않고 있다. 또한, 웹어셈블리에는 가비지 컬렉션이라는 개념이 없기 때문에 자바나 C#과 같은 언어에 대한 지원이 어렵다. 리액트(React) 같은 웹 프레임워크에 바인딩하는 것은 여전히 상당히 번거롭고 자바스크립트와의 인터페이스가 필요하다. 결론적으로, 웹 언어로 사용되기 위해서는 아직 갈 길이 멀다.

하지만, 그 잠재력은 어마어마하다. Wasm과 WASI가 보편화되고, DOM에 대한 바인딩이 웹 사용자 인터페이스를 가능하게 하며, 어떤 프로그래밍 언어로든 웹 애플리케이션을 구축할 수 있는 잠재력이 현실이 되는 세상을 상상해 보자.

중기적으로, Wasm의 유용성은 계속 증가할 것이고 자바스크립트를 보완하는 능력도 증가할 것이다. 물론 문제가 있다. 적어도 단기적으로는 자바스크립트가 웹의 공용어로 계속 사용될 것이다. 그러나 브라우저에서 윈도우가 다른 언어에 한 역할을 Wasm이 할 수 있게 되는 것은 시간문제일 것이다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank