다이스 랩의 새로운 히포 웹어셈블리(Hippo WebAssembly) 플랫폼 출시가 중요한 것도 바로 이 지점이다. 다이스의 많은 툴처럼 내부 팀의 필요에 의해 만들어졌기 때문에, 브라우저 호스트든 독립 실행형 웹어셈블리 시스템 인터페이스(WASI)든 관계없이 WASM 코드를 신속하게 설치, 관리, 실행할 수 있다. 깃 서버와 함께 빌트인 채널을 사용해 한 환경에서 서로 다른 릴리스를 만들고 배포할 수 있으며, 프로덕션, 스테이징 및 개발 빌드를 별도로 유지하면서 히포 서버를 하나만 운영하는 것도 가능하다.
히포를 이용하면 여러 애플리케이션을 호스팅할 수 있다. 단, 웹어셈블리는 기본적으로 샌드박스가 적용되므로 호스트 시스템 또는 외부 장치에 액세스할 수 있는 명시적 권한이 필요하다. 코드도 다른 플랫폼으로 이식할 수 있다. 일단 웹어셈블리용으로 컴파일하면 윈도우, 리눅스, 맥OS는 물론 인텔, RISC-V, ARM에 상관없이 모든 웹어셈블리 시스템에서 실행할 수 있다. 즉, 히포는 코드를 한번 작성해 테스트하면 어디서든 실행할 수 있는 방법을 제공한다.
개발 PC에서 히포 설정하기
히포와 같은 툴은 클라우드 네이티브로 운영하는 것이 이상적이지만, 현재 개발자 릴리스는 데스크톱 시스템에서만 사용할 수 있다. 여기서는 우분투를 호스팅하는 WSL2의 최신 빌드를 실행하는 윈도우 PC를 기준으로 진행한다. 다이스는 히포를 로컬에서 실행하는 방법에 대한 설명과 맥OS 및 리눅스 시스템에서의 사용법에 대한 자세한 정보를 제공한다.반면 필자가 WSL2 우분투 20.04 LTS 시스템에서 히포를 실행할 때는 몇 가지 문제가 있었다. 먼저 웹어셈블리 애플리케이션 게이트웨이인 WAGI를 설치해야 했다. 이것은 깃허브 리포(repo)에서 호스팅 되는 다운로드 가능한 tarfile에 싱글 바이너리로 쉽게 해결할 수 있다. 일단 다운로드하고 압축을 풀고 사용자 바이너리 디렉터리로 이동하면 쉽게 실행된다. 다이스 툴을 다시 컴파일해야 한다면 필요할 수 있으므로 러스트(Rust)를 설치했다.
빌드 필수 툴킷의 복사본이 필요했기 때문에 이 단계가 WSL2에서 가장 어려웠던 것 같다. 우분투 20.04에는 이에 대한 올바른 종속성 집합이 없으므로 특정 키 라이브러리를 적절한 버전으로 다운그레이드 할 수 있도록 하는 대체 패키지 설치 프로그램이 필요했다. 스택 오버플로우 자료를 찾아보니 활용성, 즉 설치에 적합한 종속성을 선택하고 2개의 낮은 수준의 C 라이브러리를 대체할 수 있음을 확인했다. 설정 스크립트를 사용해 러스트용 빌드 필수 설치를 마침내 완료했다.
빈들(Bindle)이란 무엇인가
히포 설치의 일부로 러스트를 설치하는 주된 이유는 다이스의 웹어셈블리 패키지 툴인 빈들(Bindle) 때문이다. 빈들은 ‘총 객체 스토리지’ 시스템으로 정의할 수 있다. 빈들 관련 설명을 보면, '디지털 버전의 은식기를 수납하는 서랍'이라는 표현이 있다. 우리는 모두 은식기 서랍에 서로 다른 물건을 보관할 수 있지만, 기본적으로 은식기를 분류하고 보관하기 위해 그 서랍을 모두가 사용한다. 빈들은 최신 애플리케이션을 구성하는 아티팩트에 대해 거의 같은 기능을 한다. 사용 방법과 장소에 따라 애플리케이션이 어떻게 구성되는지 어느 정도 파악할 수 있다.라즈베리 파이와 같이 리소스가 제한된 에지 호스트 및 공용 클라우드의 심장부에 있는 고성능 서버에 희소 설치에 필요한 요소를 포함하는 애플리케이션에 대한 빈들 설명도 있다. 애플리케이션 호스트의 빈들 클라이언트는 요소와 종속성을 가져와 적절하게 이를 배포한다. 그 결과, 여러 빌드를 구축하지 않고도 올바른 환경에 올바른 코드를 제공하는 저장소와 스마트 설명을 사용해 애플리케이션 중심 배포 모델이 가능해진다.
빈들이 설치되면 기본값을 사용해 히포가 활용할 수 있는 로컬 빈들 서버를 설정할 수 있다. 다음으로 마이크로소프트에서 제공하는 WSL 지침에 따라 node.js를 설치하면 된다. 이를 위해서는 컬(curl)을 사용해 nvm을 다운로드한 다음 이를 실행해 노드의 최신 및 장기 지원 버전을 모두 설치해야 한다. 단, 노드 설치에 우분투 명령어를 사용하지 않는 것이 좋다. 노드를 설치하기 위해 스냅을 사용하는데, WSL2에서는 스냅이 제대로 지원되지 않는다.
히포 호스팅 된 러스트 웹어셈블리 애플리케이션 및 요와즘 요맨(yo-wasm Yeoman) 애플리케이션 비계(scaffolding) 툴을 위한 러스트의 wasm32-wasi 지원을 설치해야 한다. 그러면 히포 내에서 실행할 준비가 된 WASI 대상에게 러스트 코드를 컴파일할 수 있다.
여기까지 왔다면 이제 닷넷 5(.NET 5)를 설치할 수 있다. 닷넷 5 SDK 및 런타임을 모두 설치하기 전에 먼저 마이크로소프트의 데비안 패키지 리퍼지토리에 대한 지원을 설정한다. 닷넷 런타임에 대한 2가지 옵션이 있다. 하나는 ASP 닷넷 코어 지원이 포함된 것이고 다른 하나는 포함되지 않는 것이다. 히포는 모델 뷰 컨트롤러 웹 애플리케이션이므로 런타임의 ASP 닷넷 버전을 사용해야 한다.
히포 구축하고 실행하기
모든 필수 조건이 설치되면 히포를 구축할 수 있다. 먼저 히포 깃허브 리퍼지토리를 WSL 시스템의 로컬 디렉터리에 복제한다. 설치가 완료되면, BINDLE_URL 환경 변수를 추가해 로컬 빈들 서버를 지정해 앱을 구축하고 실행할 수 있다. 애플리케이션 개발 및 배포에 필요하므로 이 시점에서 히포의 CLI를 설치하는 것이 좋다.이제 히포 서버에 연결해 작동 여부를 테스트할 수 있다. 포트 5001의 로컬 호스트에서 찾을 수 있다. 최근 WSL 2 빌드를 실행 중이면 마이크로소프트가 WSL 2의 오랜 네트워킹 문제 중 하나를 마침내 해결하여 자체 IP 주소와 가상 네트워크 스위치를 그대로 유지하면서도 윈도우를 통해 가상 머신 네트워킹을 프록시 했기 때문에 로컬 호스트를 사용해 윈도우 데스크톱 브라우저에서 WSL 2 빌드에 연결할 수 있다. 네트워크 주소를 추출하고 공유하기 위해 스크립트가 더는 필요하지 않다.
서버에 연결하려면 먼저 계정을 등록해야 한다. 로컬에서 실행되므로 원하는 계정 세부 정보를 선택할 수 있다. 첫 번째 앱을 구축하는 데 세부 정보가 필요하므로 잘 기억해야 한다. 계정을 생성했으면 로그인한다. 새 애플리케이션 만들기(Create New Application) 버튼이 있는 보유 앱(Your Apps) 페이지로 이동하게 된다.
첫 히포 웹어셈블리 앱 만들기
웹 UI에서 히포용 앱을 구축할 수 있지만 지금은 명령행을 사용하는 것이 더 좋다. 요맨이 응용 비계를 구축하는 데 그것을 사용할 것이기 때문에 반드시 히포 CLI를 설치해야 한다. 시작하기 전에 히포 계정 및 암호와 엔드 포인트에 대한 환경 변수를 설정하라. 물론, 이는 좋은 보안 관행이 아니지만, 여기서는 아직 생산 준비가 되지 않은 소프트웨어를 사용해 격리된 PC에서 테스트 코드를 작성해 실행한다.기본적인 '헬로 월드' 애플리케이션을 만들려면 요-와즘 툴을 사용해 웹어셈블리 러스트 애플리케이션을 구축한다. 스크립트를 따라 적절한 값을 입력하면 히포 서버에 소스 코드를 구축하고 로드한다. 다음으로 러스트 카고 툴을 사용해 WASI 애플리케이션을 컴파일하고 테스트한다. 명령행에서 실행되면 히포의 CLI 툴을 사용해 히포 내에서 볼 수 있는 빈들로 밀어 넣을 수 있다. 프로젝트를 열고 빌드의 개발 환경을 선택한 다음 링크를 클릭해 코드를 실행한다.
히포에는 사용자가 좋아할 장점이 많다. 굳이 아쉬운 점을 찾자면 헤로쿠와 같은 놀이터로 시작하는 기능이 빠졌다는 것이다. 그렇다고 해도 히포는 확실히 개발 워크플로우의 일부로, 심지어 초기 단계에서도 사용할 수 있다. 타사 시스템에 의존할 필요가 없기 때문에 개발 PC에서 실행할 수 있다는 것도 이점이다. WSL 2 환경의 일부로 실행할 수 있는 충분한 영향을 미치지 않으므로 원격 개발 기능과 협력하여 윈도우에서 WSL의 러스트 코드를 편집할 수 있는 비주얼 스튜디오 코드와 같은 툴을 활용할 수 있다.
웹어셈블리에 관심이 있다면 히포야 말로 시작하기에 안성맞춤이다. 이를 통해 웹어셈블리 코드를 사용하는 작업이 더 간단해져 개발을 실행하는 데 필요한 여러 가지 요소를 한곳에 모을 수 있다. 아직 초기 릴리스지만, 웹어셈블리를 사용하는 모든 사용자에게 필수적인 툴로 꼽을 만하다. editor@itworld.co.kr