Offcanvas

BI / How To / 개발자 / 검색|인터넷 / 빅 데이터 / 신기술|미래 / 애플리케이션

웹어셈블리 인기에 날개달까?··· 주목할 만한 언어 프로젝트 11가지

2021.06.29 Paul Krill  |  InfoWorld
눈부시게 빠른 웹 앱에서부터 브라우저 내에서의 파이썬 데이터 과학에 이른다. 다음의 프로그래밍 언어 및 컴파일러 프로젝트들은 웹어셈블리의 약속에 대한 색다른 구현을 도모하고 있다. 
 
Image Credit : Getty Images Bank

오늘날의 웹 애플리케이션은 네이티브 데스크톱 애플리케이션의 속도와 반응성과 거리가 멀다. 웹 애플리케이션이 데스크톱에 버금가는 속도와 반응성을 가질 수는 없을까? 이는 웹어셈블리(WebAssembly)의 약속이다.
 
웹어셈블리는 간소한 바이너리 포맷으로 된 기본적인 어셈블리형 언어로서, 웹 브라우저 환경에서 네이티브에 가깝게 실행된다. 동시에 웹어셈블리는 C/C++, C#, 러스트(Rust), 고(Go), 코틀린(Kotlin), 스위프트(Swift), 그리고 그 밖의 프로그래밍 언어를 위한 이식형 컴파일 표적을 제공한다.

웹 애플리케이션 성능을 개선할 뿐 아니라 자바스크립트 이외의 언어가 브라우저 앱의 개발에 쓰이는 것을 허용하는 웹어셈블리는 구글, 모질라, 애플, 마이크로소프트의 지지를 받고 있다. 이들 모두가 자사 브라우저 엔진에서 이 기술을 지원한다.

웹어셈블리는 이의 위력을 활용하는 각종 신규 기술의 개발로 이어졌다. 전적으로 새로운 프로그래밍 언어들이 여기에 속한다. 웹어셈블리에 전념한 언어 프로젝트 10가지를 소개한다. 

바이너리엔 (Bynaryen)
바이너리엔(Binaryen)은 웹어셈블리를 위한 컴파일러 툴체인 인프라 라이브러리이다. 바이너리엔은 C++로 작성됐고, 쉽고 효율적이고 신속한 웹어셈블리로의 컴파일을 염두에 두고 개발됐다. 이는 단일 헤더에 C API를 가지고 있고, 자바스크립트로부터 사용될 수 있다. 입력은 웹어셈블리 형식으로 수용되지만, 일반적인 컨트롤 그래프 역시 이를 선호하는 컴파일러들을 위해 수용된다.

바이너리엔의 내부 중간 코드(IR, Intermediate Representation)는 간소한 데이터 구조를 이용하고 병렬 코드젠(코드 자동 생성) 및 최적화를 위해 모든 CPU 코어를 활용한다. 또한 IR은 기본적으로 웹어셈블리의 부분집합이기 때문에 웹어셈블리까지 쉽게 컴파일 된다. 웹어셈블리 고유의 최적화는 코드 크기 및 속도를 개선하여 바이너리엔을 그 자체로 컴파일러 백엔드로서 유용하게 만든다. 

바이너리엔은 깃허브에서 다운로드할 수 있다. 

블레이저 웹어셈블리(Blazor WebAssembly)
블레이저 웹어셈블리(Blazor WebAssembly)는 .NET에 의해 양방향, 클라이언트 측의 단일 페이지 웹 앱을 제작하고, 웹어셈블리 기반 .NET 런타임 상에서 모바일 브라우저를 포함한 최신 브라우저로 이들 앱을 호스팅하는 프레임워크이다. 플러그인이나 다른 브라우저로의 리컴파일이 필요 없다. 런타임은 .NET 코드가 웹어셈블리의 자바스크립트 API를 통해 브라우저 기능에 액세스할 수 있게 해준다.

블레이저 웹어셈블리 앱이 브라우저에서 실행될 때 C# 코드 파일과 레이저 파일이 .NET 어셈블리로 컴파일 된다. 이는 .NET 런타임과 함께 브라우저로 다운로드 된다. 그리고 .NET 코드는 브라우저의 자바스크립트 샌드박스 내의 웹어셈블리 상에서 실행되기 때문에 클라이언트 기기의 악의적 행위에 대해 보호받는다. 블레이저 웹어셈블리 앱은 독립적으로, 또는 서버 측 지원과 함께 전개될 수 있다. 

블레이저를 시작하기 위한 설명서는 <dot.microsoft.com>에서 찾을 수 있다. 

치어프(Cheerp)
리닝 테크놀로지스(Leaning Technologies)의 치어프(Cheerp)는 웹을 위한 엔터프라이즈 등급의 C/C++ 컴파일러다. C 및 C++를 (C++17까지) 웹어셈블리, 자바스크립트, 또는 둘의 조합으로 컴파일한다. 치어프는 LLVM/클랭 인프라로 통합된다. 이 과정에서 성능을 향상시키고 컴파일 결과물의 크기를 최소화하려는 의도의 맞춤식 최적화가 동반된다. 

치어프는 기본적으로 기존의 C/C++ 라이브러리 및 애플리케이션을 HTML5에 이식하는 데 사용되지만, 웹 애플리케이션과 웹어셈블리 컴포넌트를 작성하는 데에도 쓰일 수 있다. 치어프는 오픈소스 및 상용 라이선스 하에서 제공된다.  

치어프는 <leaningtech.com>에서 다운로드할 수 있다. 

치어프제이(CheerpJ) 
 ‘웹을 위한 자바 컴파일러’로 알려진 이 LLVM 기반 컴파일러는 자바 클라이언트 애플리케이션을 웹어셈블리, 자바스크립트, HTML로 변환시켜 자바 클라이언트 애플리케이션이 최신 브라우저에서 실행될 수 있게 만든다. 

치어프제이(CheerpJ)는 3가지 컴포넌트, 다시 말해 AOT 컴파일러, 웹어셈블리 및 자바스크립트 런타임, 자바 스크립트 DOM 상호운용성 API를 이용해 자바로부터 DOM에 액세스한다. 치어프제이와 함께 JAR 아카이브는 AOT 컴파일러를 이용해 컴파일 될 수 있다. 치어프제이는 서버 측 지원을 필요로 하지 않는다.

치어프와 마찬가지로 치어프제이는 리닝 테크놀로지스의 제품이다. <leaningtech.com>에서 다운로드할 수 있다. 

엠스크립튼(Emscripten)
이 오픈소스 컴파일러 툴체인은 C 및 C++, 또는 LLVM 컴파일러 기술을 이용하는 여타 언어를 웹어셈블리로 컴파일하여 웹, 노드.js, 또는 웹어세머(Wasmer) 등의 웹어셈(Wasm) 런타임 상에서 전개한다. 또한 엠스크립튼 컴파일러(emcc)는 컴파일 된 코드에 API 지원을 제공하는 자바스크립트를 내보낸다.

엠스크립튼은 현실의 코드베이스 몇몇을 웹어셈블리로 변환하는 데 사용됐다. 예를 들어 언리얼 엔진 4 게임 엔진, 유니티 3D 플랫폼 등의 상용 코드베이스 같은 것들이다. 엠스크립튼은 C 및 C++ 표준 라이브러리, C++ 예외, 오픈GL/웹GL 그래픽 명령을 지원한다. 엠스크립튼 툴체인을 설치하는 데 쓰이는 엠스크립튼 SDK는 리눅스, 맥OS, 윈도우에서 사용할 수 있다.

엠스크립튼은 <emscriptem.org>로부터 다운로드할 수 있다.
 
포레스트(Forest) 
포레스트(Forest)는 웹어셈블리로 컴파일 되는 함수형 프로그래밍 언어다. 포레스트의 목표는 복합적이고 양방향이고 함수형인 웹 앱을 기존의 오버헤드 없이 용이하게 생성하는 언어를 제공하는 것이라고 개발자인 닉 존스톤은 말했다. 

현재 ‘프리-알파, 실험적, 개념적 리서치 소프트웨어’ 단계인 포레스트는 정적 타이핑, 패턴 매칭, 변경 불능의 데이터 구조, 다중 구문, 자동 코드 포맷팅을 특장점으로 한다. 개발 중인 첫 번째 구문은 엘름과 하스켈 함수형 언어에서 착안됐다. 

포레스트 언어의 설계 원리는 용이한 협업, 노력이 적은 테스팅, 구조 및 어의에 대한 합의 등이다. 그러면서도 구문에 대한 반대를 수용한다. 존스톤은 포레스트를 복잡한 게임을 구축할 수 있을 만큼 빠른 언어로 만들려고 노력한다. 이를 통해 일반적인 웹 앱이 “눈부시게 빠를 것”으로 약속되고 있다.

포레스트는 깃허브에서 다운로드할 수 있다. 

그레인(Grain)
그레인 프로젝트 웹 사이트에 따르면 그레인(Grain) 언어는 학술적 및 함수적 언어의 특장점들을 21세기로 가져온다. 바이너리엔 툴체인 및 컴파일러 인프라에 의해 웹어셈블리로 컴파일 되는 그레인은 브라우저, 서버, 그리고 잠재적으로 어느 곳에서나 실행될 수 있다. 런타임 타입 오류가 없고 타입 어노테이션에 대한 필요가 없다. 그레인 툴체인은 CLI, 컴파일러, 런타임, 스탠다드 라이브러리를 특징으로 하고, 싱글 바이너리로 출하된다. 

개발자는 노드.js, 얀을 통해 그레인을 소스로부터 작성해야 하고, 바이너리는 리눅스, 맥OS, 윈도우에 이용할 수 있다. 

그레인을 시작하기 위한 설명서는 <grain-lang.org>에서 찾을 수 있다. 

제이웹어셈블리(JWebAssembly)
아이넷 소프트웨어(I-Net Software)가 만든 제이웹어셈블리(JWebAssembly: 자바 웹어셈블리)는 웹어셈블리 컴파일러에 대한 자바 바이트코드이고, 자바 클래스 파일을 입력물로 하여 웹어셈블리 바이너리 포맷(.wasm 파일) 또는 텍스트 포맷(.wat 파일)을 출력한다. 목표는 웹어셈블리로 브라우저에서 네이티브하게 실행되는 것이다. 

이론적으로 제이웹어셈블리는 자바바이트 코드로 컴파일 되는 어떤 언어든지 컴파일할 수 있다. 예를 들어 클로져(Clojure), 그루비(Groovy), 제이루비(JRuby), 코틀린(Kotlin), 스칼라(Scala) 등이다. 이에 관한 테스트가 예정되어 있다. 

제이웹어셈블리는 아직 실무에 투입될 단계가 아니다. 제이웹어셈블리 1.0 릴리즈를 위한 모든 준비가 끝났지만, 아직 테스팅이 남아 있다. 버전 1.0 로드맵은 자바 바이트코드 해석 프로그램, 테스트 프레임워크, 그레이들(Gradle) 플러그 인 등의 기능을 요구한다. 아이넷 소프트웨어는 올해 제이웹어셈블리 1.0을 출하할 예정이다. 

제이웹어셈블리는 깃허브에서 다운로드할 수 있다. 

파이어다이드(Pyodide)
파이어다이드(Pyodide) 프로젝트는 최근 모질라로부터 독립한 프로젝트로서, 파이썬 및 파이썬 과학 스택을 웹어셈블리로 컴파일하여, 파이썬 3.8 런타임, 넘파이(NumPy), 사이파이(SciPy), 매트플랏립(Matplotlib), 사이킷-런(Scikit-run), 그리고 여타 수십 가지 패키지를 브라우저로 가져온다. 

파이어다이드는 자바스크립트와 파이썬 사이의 오브젝트의 투명한 변환을 제공하고, 파이썬에게 웹 API로의 액세스를 허용한다. 파이어다이드는 2018년 브라우저에서 데이터 과학을 실행하기 위한 아이오다이드(Iodide) 프로젝트의 일부로서 개시됐다. 파이어다이드는 브라우저의 REPL로부터 시험될 수 있다. 

파이어다이드의 다운로드와 이용에 관한 설명서는 <pyodide.org>에서 찾을 수 있다. 

티VM(TeaVM)
AOT 자바 바이트코드 컴파일러인 티VM(TeaVM)은 브라우저에서 실행할 수 있는 웹어셈블리와 자바스크립트를 내보낸다. 그러나 웹어셈블리 지원은 현재 실험 단계임을 유의해야 한다. 구글 웹 툴킷(GWT)의 닮은 꼴인 티VM은 개발자가 애플리케이션을 자바로 작성하고 자바스크립트로 전개할 수 있게 해준다. 

티VM은 GWT와 달리 소스 코드가 아닌 컴파일 된 클래스 파일과 작용한다. 아울러 티VM은 기존의 컴파일러, 다시 말해 자바 컴파일러(javac), 코틀린 컴파일러(Kotlinc), 스칼라 컴파일러(scalac) 등에 의존한다. 따라서 자바뿐만 아니라 코틀린 및 스칼라 코드 역시 컴파일할 수 있다. 티VM은 기본적으로 웹 개발 툴이다. 이는 자바나 코틀린의 대량 코드베이스를 자바스크립트로 변환하도록 설계되지 않았다. 티VM의 부속 프로젝트인 플레이버(Flavour)는 단일 페이지 웹 애플리케이션을 작성하기 위한 프레임워크 역할을 한다. 

티VM의 다운로드와 이용에 관한 설명서는 깃허브에서 찾을 수 있다. 

우노 플랫폼(Uno Platform)
자마린(Xamarin) 모바일 앱 플랫폼의 대안인 우노 플랫폼(Uno Platform)은 웹 어셈블리, 웹, 윈도우, 맥OS, 리눅스, iOS, 안드로이드 용도의 싱글 코드베이스 애플리케이션을 구축하기 위한 UI 플랫폼이고 C# 및 XAML을 이용한다. 

우노는 .NET5에서 모노-웹어셈(Mono-WASM) 런타임을 이용해 모든 대표적인 웹 브라우저에서 C# 코드를 실행할 수 있고, 윈UI와 UWP(Universal Windows Platform) 앱이 웹어셈블리 상에서 네이티브하게 실행될 수 있게 해주는 가교 역할을 한다. 우노로 웹 앱을 제작할 때 개발자는 비주얼 스튜디오나 비주얼 스튜디오 코드를 이용할 수 있다.

설명서는 유노 플랫폼 웹사이트에서 찾을 수 있다. 
 
ciokr@idg.co.kr
추천 테크라이브러리

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2022 International Data Group. All rights reserved.