娇色导航

????

??? ??

Peter Wayner
Contributing writer

??? ???? 11?? ??? ??

??? ????? ???? ???, ??? ?? ? ?? ???? ???? ?? ??? ????. ??, ?? ??, ?? ?? ??? ?? ?? ?? ?? ??? ??? ??? ???? ? ?? ??? ????.

자바, 자바스크립트, CSS가 등장하면서 모든 것이 바뀌었다. 약간의 튜링 완전(Turing-complete) 기능을 추가하는 것이 시작이었다. 영리한 프로그래머는 한때 정적인 단어와 그림을 넣어두는 컨테이너였던 브라우저 안에 워드 프로세서와 게임, 그 외의 여러가지를 복제해 넣는 방법을 찾아냈다.

그러나 온갖 창의성에도 불구하고 브라우저에서 실행되는 애플리케이션은 여전히 네이티브 코드에 비해 속도가 느리고 리소스도 많이 사용했다. 이 문제를 해결하기 위해 웹어셈블리가 등장했다. 코드가 사전 컴파일되어 제공되므로 아무것도 JIT(Just-In-Time) 처리할 필요가 없다. 크기는 훨씬 더 작아서 대역폭 비용과 네트워크 지연이 줄어든다. 저수준 범용 솔루션을 제공하므로 개발자는 자바스크립트 수준으로 맞추거나 코드를 트랜스파일할 필요조차 없이 브라우저에 코드를 제공할 수 있다.

여기가 끝이 아니다. 개발자들은 웹어셈블리를 사용해서 움직이는 웹페이지를 제공하고 광고에 활기를 불어넣는 것 말고도 더 많은 일을 할 방법을 찾고 있다. 웹어셈블리, 또는 줄여서 와즘(Wasm)은 모든 스택의 툴과 인프라에 자리를 잡고 있는 기반 기술이다. 최근에 발견한 가장 흥미로운 사례 몇 가지를 살펴보자.

웹어셈블리의 새로운 사용례 11가지

기발한 솔루션 목록은 계속 늘어나는 중이다. 처음에는 느리게 늘어났지만 지금은 웹어셈블리의 놀라온 애플리케이션은 수백 가지에 이른다. 이 중 하나를 통해 다음 프로젝트의 영감을 얻을 수도 있을 것이다.

애플릿의 부활

자바 코드가 브라우저 안에서 애플릿으로 실행되던 시절의 향수에 젖은 이야기를 들어본 적이 있는가? 아마 없을 것이다. 이 네이티브 기능은 제대로 제공된 적이 없고 몇 년 전에 거의 사라졌다. 그러나 지금 웹어셈블리로 컴파일된 JVM 버전인 CheerpJ로 그 때의 마법을 되찾을 수 있다. 마치 과거로 돌아가서 영화 매트릭스 또는 굿윌헌팅을 보는 기분이다. 게다가 비디오 테이프를 반납하기 전에 앞으로 되감아야 하는 90년대의 번거로움도 없다.

음성 디코딩

브라우저는 장난감 코드용이라는 생각에 아직도 갇혀 있다면 와즘 개발자가 과거의 제약에 신경 쓰지 않는 좋은 사례인 어민 AI(Ermine AI)를 보자. 이 툴은 음성 인식을 위한 전체 AI 모델을 번들로 제공한다. 모델은 로컬로 실행되는데, 브라우저 코드의 나머지 부분이 레거시 <blink> 태그를 서비스하는 사이에 실행되는 것으로 추정된다. 모델의 웹페이지에는 모든 요소를 다운로드하는 데 시간이 걸리므로 시작 시간이 다소 느릴 수 있다는 경고문이 있다.

모듈성 규칙

물론 컨테이너는 서버에 소프트웨어를 배포하는 데 유용하지만 다른 용도로는 어떨까? Container2Wasm은 아직 실험 단계지만 모든 파일을 웹어셈블리 바이너리를 실행할 수 있는 어디에서나 실행 가능한 하나의 와즘 블롭으로 변환해준다. 코드에 에뮬레이션의 도움이 필요한 경우를 위해 x86 또는 RISK-V 에뮬레이터도 번들로 제공한다.

와즘 노트북

많은 데이터 과학자들은 주피터와 같은 프로젝트에서 지원되는 노트북으로 결과를 제공한다. 여기에는 코드와 데이터, 텍스트가 하나로 묶여 있으므로 결과를 읽는 사람이 손쉽게 소프트웨어를 사용해볼 수도 있다. 명령을 실행하거나 함수를 호출하려면 해당 버튼만 클릭하면 된다. 결과를 읽는 사람들이 참여하는 개방된 동적인 환경에서 소프트웨어를 공유하기 위한 이상적인 방법이다.

노트북 구성은 일반적으로 서버에 의존해 계산을 수행한다. 즉, 관리자가 서버를 설정하고 파이썬을 실행해야 한다. 이제 마리모(Marimo), 스핑크스(Sphinx)와 같은 와즘 기반 툴킷을 사용하면 브라우저에서 바로 파이썬 코드를 실행할 수 있으므로 이 작업이 더욱 쉬워진다. 와즘 버전의 파이썬인 파이오다이드(Pyodide)만 있으면 된다. 서버를 구성하기가 훨씬 더 쉽고 모든 사람의 계산을 대신 처리할 필요도 없다.

데이터 분석

데이터 과학자가 자주 하는 또 다른 일은 R을 사용해 데이터를 분석한 다음 스위브(Sweve)와 같은 툴을 사용해 포맷하는 것이다. 일반적으로 이를 위해서는 R을 로컬 컴퓨터나 서버에 설치한다. 이제는 웹R(WebR), R-유니버스와 같은 와즘 기반 툴이 R 코드를 브라우저에서 실행 가능한 와즘으로 곧바로 변환해준다. 분석 결과를 보는 사람은 누구나 R 언어를 설치하거나 적절한 버전이 있는지 확인할 필요 없이 코드를 실행할 수 있다.

고전 비디오 게임

어린 시절 즐겼던 게임에 대한 추억은 누구에게나 있다. 좋은 소식은 여전히 주말 내내 그 고전 게임을 하면서 시간을 보낼 수 있다는 것이다. 오래된 C 또는 파스칼 코드를 다시 컴파일하려고 애쓸 필요도 없다. 와즘-4와 같은 프로젝트는 모든 고전 비행 시뮬레이터와 어드벤처 게임을 브라우저에서 즐길 수 있게 해준다. 8비트 또는 와이어프레임 그래픽으로 그려진 2차원 세계를 좋아하지 않을 사람이 있을까?

서비스형 함수

마이크로서비스와 서버리스 솔루션을 지원하는 주요 클라우드 서비스의 상당수는 자연스럽게 와즘 지원에도 관심을 갖는다. 완전히 컴파일된 상태에 가까우므로 빠르게 시작할 수 있는 소량의 코드를 패키징하기에 이상적인 방법이기 때문이다. 퍼미온, 클라우드플레어, 와스머와 같은 클라우드 제공업체는 다양한 방식으로 웹어셈블리 모듈을 지원한다. 외즘엣지(WasmEdge)와 같은 툴과 모듈을 번들로 묶어 노드 런타임 기능을 사용해 실행해서 웹어셈블리 코드를 실행하는 업체도 있다.

더 크고 가까운 데이터베이스

전통적인 모델에서 데이터베이스는 별도의 시스템에서, 가급적이면 장갑을 두른 코로케이션의 보호되는 자체 가상 공간에서 실행되는 신성한 프로세스다. 지금도 마찬가지라고 할 수도 있지만 개발자들은 생각을 바꾸기 시작했다. 완전하고 기능이 풍부한 데이터베이스를 브라우저 안에 집어넣어 코드가 모든 기능을 사용할 수 있도록 해도 되지 않을까? 물론 W3은 웹스토리지(WebStorage) API와 같은 키-값 시스템이나 인덱스드DB(IndexedDB)와 같은 더 빠르고 심층적인 모델을 제공했지만 둘 다 제한적이다. PG라이트(PGLite), 덕DB(DuckDB), SQL라이트 3(SQLite 3)와 같은 프로젝트는 훨씬 더 큰 데이터 컬렉션을 저장하고 훨씬 더 광범위한 SQL 함수를 사용해 분석할 수 있다. 더 빠르고, 저수준 API를 제공하므로 다른 와즘 프로젝트에 연결할 수도 있다.

데이터베이스에 내장

더 크고 더 강력한 데이터베이스를 웹 페이지에 추가하기 위한 단순한 전달 메커니즘이 와즘의 전부는 아니다. 몇몇 개발자들은 이 비전을 뒤집어 와즘 코드를 데이터베이스 안에 내장해 사용자 정의 함수(UDF)를 추가하고 있다. 예를 들어 싱글스토어(SingleStore)는 개발자가 UDF와 그 사촌인 테이블-값 함수를 추가할 수 있게 해준다. 인피니온(InfinyOn), 레드판다(Redpanda)와 같은 다른 데이터 스트리밍 툴은 정보가 시스템을 통해 흐르는 동안 와즘 함수를 사용해 정보를 변환할 수 있게 해준다. 와즘은 데이터가 저장되는 모든 곳에 새로운 계산 기능을 내장하기 위한 지배적인 형식이 될 수도 있다.

지능의 발전

웹어셈블리는 생성형 AI의 일부인 LLM이나 신경망 내부 깊숙이 내장하기에는 적합하지 않을 수 있지만 그렇다고 스택에 자리가 없다는 의미는 아니다. 예를 들어 와즘엣지(WasmEdge)에는 텐서플로우용으로 두 개, 파이토치용으로 하나의 플러그인 시스템이 있으므로 코드에서 AI 계산과 깔끔하게 상호작용할 수 있다. 딜립소(Dylibso)는 챗GPT와 같은 AI를 엑스티즘(Extism) 모듈과 연결하는 실험을 했다. 즉, 와즘은 코드를 AI와 연결하는 데 필요한 툴이 될 수도 있다.

풍부한 플러그인

웹어셈블리는 데이터베이스나 AI만을 위한 기술이 아니다. 많은 소프트웨어 패키지는 최종 사용자가 손쉽게 기능을 추가해서 기본 기능 모음을 확장할 수 있기를 원한다. 이를 위해서는 보안 결함을 유발하거나 효율성을 낮추지 않으면서 새로운 코드를 이전 코드와 혼합할 수 있게 해주는 API를 개발해야 한다. 와즘은 이 작업을 하기에 딱 맞는 시스템인 것으로 입증됐다. 애초에 웹페이지에서 이와 거의 동일한 작업을 하도록 만들어졌기 때문이다. 보안, 간결성, 효율성이 잘 설계돼 있다.

많은 소프트웨어 패키지가 이미 이 기능을 제공한다. 간단히 훑어보면 아파치 프로젝트부터 젠데스크 데이터 마이그레이션에 이르기까지 많은 곳에서 찾을 수 있다. 프로그래머는 모든 주요 언어와 SDK 및 PDK 라이브러리에서 일반적이지 않은 언어를 지원하기 위해 엑스티즘과 같은 기본 툴에 의존한다. 와스미(Wasmi)는 또 다른 옵션으로, 제한된 시스템 또는 임베디드 시스템에 초점을 맞춘다. 바인딩 생성의 경우 프로그래머는 fp-bindgen, wasm-bindgen, 또는 wit-bindgen을 사용해서 처리한다.

결론

웹어셈블리로 할 수 있는 일에 한계가 있을까? 거의 없다. 그게 핵심이다. 와즘은 사용자가 소프트웨어에서 원하는 것을 얻을 수 있도록 문을 열어준다. 와즘의 모듈성은 빠른 속도와 강력한 기능과 보편성을 부여한다.
editor@itworld.co.kr 

Peter Wayner
Contributing writer

Peter Wayner is the author of more than 16 books on diverse topics, including open source software ("Free for All"), autonomous cars ("Future Ride"), privacy-enhanced computation ("Translucent Databases"), digital transactions ("Digital Cash"), and steganography ("Disappearing Cryptography").

? ??? ?? ???