Offcanvas

개발자 / 모바일 / 애플리케이션

"네이티브에 가까운 성능" 웹어셈블리 활용한 언어 프로젝트 12선

2021.08.30 Paul Krill  |  InfoWorld
오늘날 웹 애플리케이션은 네이티브 데스크톱 애플리케이션만큼 빠르고 반응적이지 않다. 하지만 그렇게 될 수 있다면 어떨까? 이게 바로 ‘웹어셈블리(WebAssembly)’가 약속하는 바다. 

‘웹어셈블리’는 컴팩트 바이너리 형식의 저수준 어셈블리형 언어다. 웹 브라우저에서 네이티브에 가까운 성능으로 실행된다. 또한 웹어셈블리는 C/C++, C#, 러스트(Rust), 고(Go), 코틀린(Kotlin), 스위프트(Swift) 등의 프로그래밍 언어에 이식 가능한 컴파일 타깃을 제공한다. 

웹어셈블리는 웹 애플리케이션 성능을 향상할 뿐만 아니라 브라우저 앱 개발에서 자바스크립트 이외의 언어를 사용할 수 있도록 한다는 점에서 환영받아 왔다. 구글, 모질라, 애플, 마이크로소프트 등 거의 모든 메이저 브라우저 회사가 이 기술을 지원하고 있다. 

더 나아가 웹어셈블리는 그 위력을 활용하는 여러 신기술 개발로 이어졌고, 여기에는 완전히 새로운 프로그래밍 언어도 포함된다. 웹어셈블리를 바탕으로 한 12가지 언어 프로젝트를 살펴본다. 
 
ⓒGetty Images

1. 바이너리엔(Binaryen) 
‘바이너리엔’은 웹어셈블리용 컴파일러 툴체인 인프라 라이브러리다. C++로 작성된 바이너리엔은 쉽고 효과적이며 빠르게 웹어셈블리로 컴파일할 수 있도록 설계됐다. 

이는 단일 헤더에 C API가 있으며, 자바스크립트에서 사용할 수 있다. 입력은 웹어셈블리와 유사한 형식으로 허용되지만 이를 채택한 컴파일러의 경우 일반 제어 그래프도 허용된다. 

바이너리엔의 내부 IR은 컴팩트 데이터 구조를 사용하고, 병렬 코드 생성 및 최적화를 위해 모든 CPU 코어를 사용한다. 또한 IR은 본질적으로 웹어셈블리의 하위 집합이기 때문에 웹어셈블리로 쉽게 컴파일된다. 웹어셈블리에 특화된 최적화는 코드 크기와 속도를 모두 향상시켜 바이너리엔을 컴파일러 백엔드로 사용할 수 있도록 지원한다. 

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

2. 블레이저 웹어셈블리(Blazor WebAssembly)
‘블레이저 웹어셈블리’는 닷넷(.NET)을 사용하여 인터랙티브 클라이언트측 단일 페이지 웹 앱을 구축하고, 이러한 앱을 웹어셈블리 기반 닷넷 런타임의 최신 브라우저(모바일 브라우저 포함)에서 호스팅하기 위한 프레임워크다. 플러그인을 사용하거나 다른 언어로 코드를 다시 컴파일할 필요가 없다. 이 런타임에서 닷넷 코드는 웹어셈블리의 자바스크립트 API를 통해 브라우저 기능에 액세스할 수 있다. 

블레이저 웹어셈블리 앱이 브라우저에서 실행되면 C# 코드 파일과 레이저(Razor) 파일이 닷넷 어셈블리로 컴파일되고, 이는 닷넷 런타임과 함께 브라우저에 다운로드된다. 그리고 닷넷 코드는 브라우저의 자바스크립트 샌드박스에 있는 웹어셈블리에서 실행되기 때문에 클라이언트 시스템의 악의적 행위로부터 보호된다. 블레이저 웹어셈블리 앱은 독립실행형으로 또는 서버 측 지원과 함께 배포될 수 있다. 

블레이저 설치 및 사용 설명서는 이곳(dotnet.microsoft.com)에서 찾을 수 있다. 

3. 치어프(Cheerp)
리닝 테크놀로지스(Leaning Technologies)의 ‘치어프’는 엔터프라이즈급 웹용 C/C++ 컴파일러다. C 및 C++(C++ 17까지)를 웹어셈블리, 자바스크립트 또는 이 둘의 조합으로 컴파일한다. 치어프는 LLVM/Clang 인프라에 통합돼 있으며 맞춤형 최적화를 제공해 성능을 개선하고 컴파일된 아웃풋의 크기를 최소화한다. 

처음에는 기존 C/C++ 라이브러리 및 애플리케이션을 HTML5로 포팅하는 데 주로 사용됐다. 웹 애플리케이션 및 웹어셈블리 컴포넌트를 코딩하는 데도 쓰일 수 있다. 치어프는 오픈소스 및 상용 라이선스로 제공된다. 

치어프는 이곳(leaningtech.com)에서 다운로드할 수 있다. 

4. 치어프제이(CheerpJ)
‘웹용 자바 컴파일러’라고도 불리는 이 LLVM 기반 컴파일러는 자바 클라이언트 애플리케이션을 웹어셈블리, 자바스크립트, HTML로 변환해 자바 클라이언트 애플리케이션을 최신 브라우저에서 실행할 수 있게 해준다. 

치어프제이는 3가지 구성요소(AOT 컴파일러, 웹어셈블리 및 자바스크립트 런타임, 자바스크립트 DOM 상호운용성 API)를 사용해 자바에서 DOM에 액세스한다. 치어프제이를 사용하면 AOT 컴파일러를 통해 JAR 아카이브를 컴파일할 수 있다. 치어프제이는 서버 측 지원을 필요로 하지 않는다. 

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

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

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

엔스크립튼은 이곳(emscripten.org)에서 다운로드할 수 있다. 

6. 포레스트(Forest) 
‘포레스트’는 웹어셈블리로 컴파일되는 함수형 프로그래밍 언어다. 포레스트의 개발자 닉 존스턴은 (전통적인 오버헤드 없이) 복합적이고 인터랙티브하며 기능적인 웹 앱을 쉽게 만들 수 있도록 하는 언어를 제공하는 것이 목표라고 말했다. 

현재 포레스터는 ‘프리-알파, 실험적, 개념 연구 소프트웨어’로 알려져 있고, 정적 타이핑, 패턴 매칭, 변경할 수 없는 데이터 구조, 다중 구문, 자동 코드 형식 지정 등을 제공한다. 현재 개발 중인 첫 번째 구문은 엘름(Elm)과 헤스켈(Haskell)에서 착안됐다. 

포레스트의 설계 원칙은 협업 용이성, 최대한 고통 없는 테스트, 구조 및 의미에 관한 합의를 포함한다. 존스턴은 포레스트를 복잡한 게임을 빌드할 수 있을 정도로 충분히 빠른 언어로 만들려고 한다면서, 그렇다면 일반적인 웹 앱은 ‘눈부시게 빠를 것’이라고 전했다. 

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

7. 그레인(Grain) 
프로젝트 웹사이트에 따르면 ‘그레인’ 언어는 학문적 및 함수형 언어의 특성을 21세기로 가져온다. 그레인은 바이너리엔 툴체인 및 컴파일러 인프라를 통해 웹어셈블리로 컴파일되며, 브라우저, 서버, 그리고 잠재적으로 어디에서나 실행될 수 있다. 

런타임 유형 오류가 없고, 유형 주석이 필요하지 않다. 그레인 툴체인은 단일 바이너리로 제공되는 CLI, 컴파일러, 런타임, 표준 라이브러리를 제공한다. 소스에서 그레인을 빌드하려면 노드.js와 얀(Yarn)이 필요하며, 바이너리는 리눅스, 맥OS, 윈도우에서 사용할 수 있다. 

그레인 설치 및 사용 설명서는 이곳(grain-lang.org)에서 확인할 수 있다. 

8. 자바 웹어셈블리 
아이-넷 소프트웨어(I-Net Software)의 ‘자바 웹어셈블리’는 자바 클래스 파일을 입력으로 사용해 웹어셈블리 바이너리 형식(.wasm 파일) 또는 텍스트 형식(.wat 파일)을 출력으로 생성하는 웹어셈블리 컴파일러로의 자바 바이트코드다. 

목표는 웹어셈블리를 사용하여 브라우저에서 네이티브하게 실행하는 것이다. 이론적으로 자바 웹어셈블리는 클로져(Clojure), 그루비(Groovy), 제이루비(JRuby), 코틀린(Kotlin), 스칼라(Scala) 등 자바 바이트코드로 컴파일되는 어떤 언어든 컴파일할 수 있다. 

자바 웹어셈블리는 아직 프로덕션 레디 상태가 아니다. 자바 웹어셈블리 1.0 출시를 위한 모든 준비는 끝났지만 아직 테스트가 남아있다. 버전 1.0 로드맵은 자바 바이트코드 파서, 테스트 프레임워크, 그래들 플러그인 등의 기능이 필요하다. 아이넷-소프트웨어는 올해 자바 웹어셈블리를 출시할 예정이다. 

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

9. 파이오다이드(Pyodide) 
최근 모질라에서 분리돼 독립 프로젝트가 된 ‘파이오다이드’는 파이썬, 파이썬 과학 스택을 웹어셈블리로 컴파일하여 파이썬 3.8 런타임, 넘파이(Numpy), 사이파이(SciPy), 매트플롯립(Matplotlib), 사이킷-런(Scikit-learn) 및 기타 수십 가지 패키지를 브라우저에 제공한다. 

또한 파이오다이드는 자바스크립트와 파이썬 간 투명한 개체 변환을 지원하고, 파이썬이 웹 API에 액세스할 수 있도록 한다. 이는 지난 2018년 브라우저에서 데이터 과학을 수행하기 위한 아이오다이드(Iodide) 프로젝트의 일환으로 시작됐다. 파이오다이드는 브라우저 내의 REPL 환경에서 실행할 수 있다. 

파이오다이드 설치 및 사용 지침은 이곳(pyodide.org)에서 확인할 수 있다. 

10. 티브이엠(TeaVM) 
자바 바이트코드용 AOT(Ahead-of-Time) 컴파일러 ‘티브이엠’은 브라우저에서 실행할 수 있는 웹어셈블리와 자바스크립트를 내보낸다(단 웹어셈블리 지원은 현재 실험적 기능으로 제공되고 있다). 

이와 유사한 GWT와 마찬가지로, 티브이엠을 사용하면 자바로 애플리케이션을 작성한 다음 자바스크립트로 배포할 수 있다. GWT와 달리 티브이엠은 소스코드가 아닌 컴파일된 클래스 파일과 함께 작동한다. 또한 티브이엠은 자바 컴파일러(javac), 코틀린 컴파일러(kotlinc), 스칼라 컴파일러(scalac) 등 기존 컴파일러를 사용해 자바뿐만 아니라 코틀린, 스칼라 코드 역시 컴파일할 수 있다. 

이는 기본적으로 웹 개발 도구다. 자바나 코틀린에서 대규모 코드베이스를 가져와 자바스크립트를 생성하도록 설계되지 않았다. 티브이엠의 하위 프로젝트 플레이버(Flavour)는 단일 페이지 웹 애플리케이션을 작성하는 프레임워크다. 

티브이엠 다운로드 및 사용 설명서는 깃허브에서 찾을 수 있다. 

11. 우노 플랫폼(Uno Platform)
자마린(Xamarin) 모바일 앱 플랫폼의 대안 ‘우노 플랫폼’은 닷넷 팀이 C# 또는 XAML을 사용하여 웹어세블리, 웹, 윈도우, 맥OS, 리눅스, iOS 및 안드로이드용 단일 코드베이스 애플리케이션을 구축할 수 있는 UI 플랫폼이다. 

우노는 닷넷 5 모노-웹어셈블리 런타임(Mono-WASM runtime)을 활용해 주요 웹 브라우저에서 C# 코드를 실행할 수 있고, 윈UI 및 UWP 앱이 웹어셈블리에서 네이티브하게 실행될 수 있도록 연결고리 역할을 한다. 우노로 웹 앱을 제작할 때는 비주얼 스튜디오나 비주얼 스튜디오 코드를 사용할 수 있다. 

설치 및 사용 설명서는 우노 플랫폼 웹사이트에서 찾을 수 있다. 

12. 웹어셈블리 클라우드 
코스모닉(Cosmonic)에서 개발한 ‘웹어셈블리 클라우드’는 멀티 클라우드, 엣지, 브라우저 환경에 연결되는 구성 가능한 포터블 애플리케이션을 개발할 때 웹어셈블리를 사용하는 애플리케이션 런타임이다. 

이 기술은 네이티브에 가까운 성능을 제공하는 것으로 알려졌다. 특정 기본 기능에서 비즈니스 로직을 분리하는 행위자 모델을 제공한다. 개발자는 (자신이) 선택한 언어로 마이크로서비스를 한번 작성하면 어디서든 이를 배포할 수 있다. 현재 지원되는 언어는 러스트(Rust), 타이니고(TinyGo), 어셈블리스크립트(AssemblyScript) 등이다. 웹어셈블리 클라우드는 CNCF 샌드박스 프로젝트로 승인됐다. 

설치 및 사용 설명서는 이곳(wasmcloud.dev)에서 확인할 수 있다.
 
ciokr@idg.co.kr
 
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

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

Copyright © 2024 International Data Group. All rights reserved.