Wasmer ํ๋ก์ ํธ๋ ๋ค๋ฅธ ์ด์ ์ฒด์ ์์ ์คํ๋ ์ ์๋ ๋ฒ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ์คํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ WebAssembly ๋ชจ๋์ ์คํํ๊ธฐ ์ํ ๋ฐํ์์ ๊ฐ๋ฐํ๋ ๋ ๋ฒ์งธ ์ฃผ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ถ์ํ์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ด์์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํ์ ์์ค WebAssembly ์ค๊ฐ ์ฝ๋๋ก ์ปดํ์ผํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค. ์ด ์ค๊ฐ ์ฝ๋๋ ๋ชจ๋ OS์์ ์คํ๋๊ฑฐ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ก๊ทธ๋จ์ ํฌํจ๋ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ WebAssembly ์์ฌ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒฝ๋ ์ปจํ ์ด๋์ ๋๋ค. ์ด๋ฌํ ์ปจํ ์ด๋๋ ์ด์ ์ฒด์ ์ ๋ฌถ์ฌ ์์ง ์์ผ๋ฉฐ ์๋ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. Emscripten ํดํท์ ์ฌ์ฉํ์ฌ WebAssembly๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. WebAssembly๋ฅผ ํ์ฌ ํ๋ซํผ์ ๊ธฐ๊ณ ์ฝ๋๋ก ๋ณํํ๊ธฐ ์ํด ๋ค์ํ ์ปดํ์ผ ๋ฐฑ์๋(Singlepass, Cranelift, LLVM)์ ์์ง(JIT ๋๋ ๊ธฐ๊ณ ์ฝ๋ ์์ฑ ์ฌ์ฉ)์ ์ฐ๊ฒฐ์ ์ง์ํฉ๋๋ค.
์์คํ ์ ๋ํ ์ก์ธ์ค ์ ์ด ๋ฐ ์ํธ ์์ฉ์ ์ด์ ์ฒด์ ์์ ์ ๊ณตํ๋ ํ์ผ, ์์ผ ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ ์์ ์ ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ WASI(WebAssembly System Interface) API๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ณต๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋๋ฐ์ค ํ๊ฒฝ์ ๊ธฐ๋ณธ ์์คํ ์์ ๊ฒฉ๋ฆฌ๋๋ฉฐ ์ ์ธ๋ ๊ธฐ๋ฅ(๊ฐ ๋ฆฌ์์ค(ํ์ผ, ๋๋ ํฐ๋ฆฌ, ์์ผ, ์์คํ ํธ์ถ ๋ฑ)์ ๋ํ ์์ ์ ๋ํ ๊ธฐ๋ฅ ๊ด๋ฆฌ ๊ธฐ๋ฐ ๋ณด์ ๋ฉ์ปค๋์ฆ), ์ ์ฒญ์๋ ์ ์ ํ ๊ถํ์ด ๋ถ์ฌ๋์ด์ผ ํฉ๋๋ค.)
WebAssembly ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ค๋ฉด ์ธ๋ถ ์ข ์์ฑ ์์ด ์ ๊ณต๋๋ Wasmer ๋ฐํ์์ ์์คํ ์ ์ค์นํ๊ณ ("curl https://get.wasmer.io -sSfL | sh") ํ์ํ ํ์ผ("wasmer test")์ ์คํํ๋ฉด ๋ฉ๋๋ค. .wasmโ). ํ๋ก๊ทธ๋จ์ WAPM ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ ์ ์๋ ์ผ๋ฐ WebAssembly ๋ชจ๋ ํํ๋ก ๋ฐฐํฌ๋ฉ๋๋ค. Wasmer๋ Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir ๋ฐ Java ํ๋ก๊ทธ๋จ์ WebAssembly ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ ์ ๊ณต๋ฉ๋๋ค.
ํ๋ซํผ์ ์ฌ์ฉํ๋ฉด ๋ค์ดํฐ๋ธ ์ด์ ๋ธ๋ฆฌ์ ๊ฐ๊น์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. WebAssembly ๋ชจ๋์ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด ์์ง์ ์ฌ์ฉํ๋ฉด ๋ค์ดํฐ๋ธ ์ฝ๋(๋ฏธ๋ฆฌ ์ปดํ์ผ๋ .so, .dylib ๋ฐ .dll ๊ฐ์ฒด ํ์ผ์ ์์ฑํ๊ธฐ ์ํ "wasmer compile -native")๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์ฝ๋๋ ์คํํ๋ ๋ฐ ์ต์ํ์ ๋ฐํ์์ด ํ์ํ์ง๋ง ๋ค์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ์งํฉ๋๋ค. ์๋๋ฐ์ค ๊ฒฉ๋ฆฌ. ๋ด์ฅ๋ Wasmer๋ก ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ถ๊ฐ ๊ธฐ๋ฅ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ํด Rust API ๋ฐ Wasm-C-API๊ฐ ์ ๊ณต๋ฉ๋๋ค.
Wasmer ๋ฒ์ ๋ฒํธ์ ์ค์ํ ๋ณ๊ฒฝ์ ๋ด๋ถ API์ ๋ํ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ ์ฌํญ ๋์ ๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ๊ฐ๋ฐ์์ ๋ฐ๋ฅด๋ฉด ์ด๋ ํ๋ซํผ ์ฌ์ฉ์์ 99%์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ํธํ์ฑ์ ๊นจ๋ ๋ณ๊ฒฝ ์ฌํญ ์ค์๋ ์ง๋ ฌํ๋ Wasm ๋ชจ๋ ํ์์ ๋ณ๊ฒฝ๋ ์์ต๋๋ค(Wasmer 1.0์์ ์ง๋ ฌํ๋ ๋ชจ๋์ Wasmer 2.0์์ ์ฌ์ฉํ ์ ์์ต๋๋ค). ๊ธฐํ ๋ณ๊ฒฝ์ฌํญ:
- SIMD(Single Instruction, Multiple Data) ๋ช ๋ น์ด๋ฅผ ์ง์ํ์ฌ ๋ฐ์ดํฐ ์์ ์ ๋ณ๋ ฌํ๋ฅผ ํ์ฉํฉ๋๋ค. SIMD๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ ์ ์๋ ์์ญ์๋ ๊ธฐ๊ณ ํ์ต, ๋น๋์ค ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ, ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๋ฌผ๋ฆฌ์ ํ๋ก์ธ์ค ์๋ฎฌ๋ ์ด์ , ๊ทธ๋ํฝ ์กฐ์ ๋ฑ์ด ์์ต๋๋ค.
- ์ฐธ์กฐ ์ ํ์ ์ง์ํ์ฌ Wasm ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ด๋ ๊ธฐ๋ณธ ํ๊ฒฝ์ ์ ๋ณด์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค.
- ์๋นํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ก์ต๋๋ค. ๋ถ๋ ์์์ ์ซ์๋ฅผ ์ฌ์ฉํ๋ LLVM ๋ฐํ์ ์๋๊ฐ ์ฝ 50% ์ฆ๊ฐํ์ต๋๋ค. ์ปค๋์ ์ก์ธ์คํด์ผ ํ๋ ์ํฉ์ ์ค์์ผ๋ก์จ ํจ์ ํธ์ถ์ด ํฌ๊ฒ ๊ฐ์ํ๋์์ต๋๋ค. Cranelift ์ฝ๋ ์์ฑ๊ธฐ ์ฑ๋ฅ์ด 40% ํฅ์๋์์ต๋๋ค. ๋ฐ์ดํฐ ์ญ์ง๋ ฌํ ์๊ฐ์ด ๋จ์ถ๋์์ต๋๋ค.
- ๋ณธ์ง์ ๋ณด๋ค ์ ํํ๊ฒ ๋ฐ์ํ๊ธฐ ์ํด ์์ง ์ด๋ฆ์ JIT โ Universal, Native โ Dylib(Dynamic Library), Object File โ StaticLib(Static Library)๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์ถ์ฒ : opennet.ru