WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์์ ๋ํ ์ฌ์ธต ๋ถ์. ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ์ฑ์ ํ์ ํ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ํ๊ณ๋ฅผ ์กฐ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค.
WebAssembly ์ธํฐํ์ด์ค ํ์ : ์ธ์ด์ ์ฅ๋ฒฝ์ ๋์ด ๊ธ๋ก๋ฒ ์ํธ ์ด์ฉ์ฑ ๊ตฌํ
์ค๋๋ ๊ณผ ๊ฐ์ด ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์์ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ค์ ์ ์ ๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ซํผ์ ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค. ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ํํ๊ฒ ํตํฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์ ํต์ ์ผ๋ก ๋ณต์กํ๊ณ ์ข ์ข ์ข์ ๊ฐ์ ์ฃผ๋ ์์ ์ด์์ต๋๋ค. ์ด๊ธฐ์ ์น์ ์ํ ์ด์ ๊ฐ๋ฅํ ์ปดํ์ผ ๋์์ผ๋ก ์ค๊ณ๋ WebAssembly(WASM)๋ ์ด๋ฌํ ๋ฌธ์ ์ ๋ํ ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ ์ํฉ๋๋ค. ํ์ง๋ง WASM์ ์์ ๋ช ๋ น์ด ์งํฉ์ ๋ณธ์ง์ ์ผ๋ก ์ ์์ค์ด์ด์ ํธ์คํธ ํ๊ฒฝ ๋ฐ ๋ค๋ฅธ ์ธ์ด์์ ์ง์ ์ ์ธ ์ํธ ์์ฉ์ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์์ด ๋ฑ์ฅํฉ๋๋ค. ์ด ์ ์์ ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ์ฌ ์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ํด๋ฆฌ๊ธ๋(polyglot)ํ ์ํํธ์จ์ด ์ํ๊ณ๋ฅผ ์กฐ์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
WebAssembly ์ธํฐํ์ด์ค ํ์ (์ข ์ข ์ธํฐํ์ด์ค ํ์ ๋๋ ๊ฐ๋จํ IT๋ก ์ถ์ฝ๋จ)์ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ค๋ช ํ๋ ํ์ ์์คํ ์ผ๋ก WebAssembly ํ์ค์ ํ์ฅํ๋ ค๋ ์ ์์ ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ด๋ ์๋์ ์ธ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ์ ์์กดํ์ง ์๊ณ WASM ๋ชจ๋์ด JavaScript๋ ๋ค๋ฅธ ์ธ์ด์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ(๋ฌธ์์ด, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)๋ฅผ ๊ตํํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๊ธฐ ๋ค๋ฅธ ์ง์ญ์์ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ณ ํตํฉํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ด์ ์๋ WASM๊ณผ JavaScript(๋๋ ๋ค๋ฅธ ํธ์คํธ ์ธ์ด) ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ด ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ด์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์์กดํด์ผ ํ์ต๋๋ค:
- ์ ํ ๋ฉ๋ชจ๋ฆฌ ์กฐ์: ๋ฐ์ดํฐ๋ฅผ WASM์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ์์ผ๋ก, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๋ ๋ง์ฌ๋ง ๋ฐ ์ธ๋ง์ฌ๋ง์ด ํ์ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ๋นํจ์จ์ ์ด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
- JavaScript ์ํธ ์ด์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋ฐ์ดํฐ ๋ณํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ฌ ์ข ์์ฑ๊ณผ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํฉ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ์ด ํ์คํ๋ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ตํํ ์ ์๋ ๊ณ ์์ค ํ์ ์์คํ ์ ๋์ ํ์ฌ ๋ ์ฐ์ํ๊ณ ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ ๋ฐ์ดํฐ ๋ณํ์ ํ์์ฑ์ ์์ ๊ณ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค. ์ด๋ ๋ชจ๋์ด ์ฐ๊ฒฐ๋๋ ๋ฐฉ์์ ํ์คํํ์ฌ ์ ์ธ๊ณ์ ์ธ ํ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ์ฃผ์ ์ด์
์ธํฐํ์ด์ค ํ์ ์ ๋์ ์ WebAssembly ์ํ๊ณ์ ์๋ง์ ์ด์ ์ ๊ฐ์ ธ๋ค์ฃผ๋ฉฐ, ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค. ์ด๋ฌํ ์ด์ ์ ์ ํธํ๋ ์ธ์ด๋ ํ๋ซํผ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ์ฉ๋ฉ๋๋ค.
1. ์ํํ ์ธ์ด ์ํธ ์ด์ฉ์ฑ
์ธํฐํ์ด์ค ํ์ ์ WebAssembly ๋ชจ๋๊ณผ JavaScript, Python, C# ๋ฑ ๋ค๋ฅธ ์ธ์ด ๊ฐ์ ์ํํ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ๋ฌ ์ธ์ด์ ๊ฐ์ ์ ํ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ Rust๋ C++๋ก ์์ฑ๋ WASM ๋ชจ๋์์ ์ํํ๊ณ , ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ JavaScript๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ๋ค์ํ ๊ธฐ์ ์ ๋ณด์ ํ ๊ธ๋ก๋ฒ ํ์๊ฒ ํนํ ์ ์ฉํ๋ฉฐ, ์ธ์ด ์ ๋ฌธ์ฑ์ ๊ด๊ณ์์ด ํจ๊ณผ์ ์ผ๋ก ๊ธฐ์ฌํ ์ ์๊ฒ ํฉ๋๋ค. ์ธ๋, ๋ ์ผ, ๋ฏธ๊ตญ์ ๊ฑธ์ณ ์๋ ํ์ด ๊ฐ์ ์ ํธํ๋ ์ธ์ด๋ก ๋ชจ๋์ ๊ฐ๋ฐํ๊ณ , ์ด ๋ชจ๋ ๊ฒ์ด WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ํตํด ์ํํ๊ฒ ํตํฉ๋๋ ํ๋ก์ ํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค.
2. ํฅ์๋ ์ฑ๋ฅ
์๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ์ ํ์์ฑ์ ์ ๊ฑฐํจ์ผ๋ก์จ ์ธํฐํ์ด์ค ํ์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ๋ฐ์ดํฐ๊ฐ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ง์ ๊ตํ๋ ์ ์์ด ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์๋๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ด๋ฌํ ์ฑ๋ฅ ํฅ์์ ํด๋ํฐ์ด๋ ์๋ฒ ๋๋ ์์คํ ๊ณผ ๊ฐ์ด ๋ฆฌ์์ค๊ฐ ์ ํ๋ ์ฅ์น์์ ํนํ ์ค์ํฉ๋๋ค. ํฅ์๋ ์ฑ๋ฅ์ ์ฌ์ฉ์์ ๋คํธ์ํฌ ๋์ญํญ์ด๋ ์ฅ์น ์ฑ๋ฅ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ์ ์ผ๋ก ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ง์ ์ด์ด์ง๋๋ค.
3. ๊ฐ๋ฐ ๋ณต์ก์ฑ ๊ฐ์
์ธํฐํ์ด์ค ํ์ ์ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค. ์ด๋ ํ์ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋์ ์์ ์ค์ด๊ณ ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ WASM ๋ชจ๋์ ๋ ์ฝ๊ฒ ํตํฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ ์์ค ๋ฐ์ดํฐ ๋ณํ ๋ฌธ์ ์ ์จ๋ฆํ๋ ๋์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ์์ฑ์ ์ง์คํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋จ์ํ๋ฅผ ํตํด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ฒ ํ๋กํ ํ์ดํ, ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ, ๋ ๋น ๋ฅธ ํ์ ์ ์ด์งํ๊ณ ๊ฐ๋ฐ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
4. ๊ฐํ๋ ๋ณด์
์ธํฐํ์ด์ค ํ์ ์ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ ์ ์๋๊ณ ํ์ ์ด ์์ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ๋ณด์ ๊ฐํ์ ๊ธฐ์ฌํฉ๋๋ค. ์ด๋ ์๋ชป๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ณด์ ์ทจ์ฝ์ ์ ์ํ์ ์ค์ฌ์ค๋๋ค. ํ์ ์์คํ ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตํ๋๋๋ก ๋ณด์ฅํ์ฌ ์ ์ฌ์ ์ธ ๊ณต๊ฒฉ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ํนํ ๊ธ์ต ๊ฑฐ๋ ๋ฐ ์๋ฃ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ฏผ๊ฐํ ์์ญ์์ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ํ๋ฉฐ, ์ธํฐํ์ด์ค ํ์ ์ ๋ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
5. ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ
WebAssembly๋ ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์ธํฐํ์ด์ค ํ์ ์ ๋ค์ํ ํธ์คํธ ํ๊ฒฝ๊ณผ ์ํธ ์์ฉํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ํธํ์ฑ์ ๋์ฑ ํฅ์์ํต๋๋ค. ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ WASM ๋ชจ๋์ ์น ๋ธ๋ผ์ฐ์ , ์๋ฒ, ์๋ฒ ๋๋ ์์คํ ๊ณผ ๊ฐ์ ๋ค์ํ ํ๋ซํผ์ ์ฝ๊ฒ ๋ฐฐํฌ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ์ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ์ฌ ๋ ๋์ ์ฌ์ฉ์์ธต์ ๋ ์ฝ๊ฒ ๋๋ฌํ ์ ์๋๋ก ํฉ๋๋ค. ๋ธ๋ผ์ง์ ๊ฐ๋ฐ์๊ฐ ๋ง๋ WASM ๋ชจ๋์ด ์ผ๋ณธ์ ์๋ฒ๋ ๋์ด์ง๋ฆฌ์์ ๋ชจ๋ฐ์ผ ์ฅ์น์์ ์๋ฒฝํ๊ฒ ์คํ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ ์ ์๋ ๊ฒ์ WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ํ๋ซํผ์ ๊ตฌ์ ๋ฐ์ง ์๋ ํน์ฑ ๋๋ถ์ ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ์๋ ๋ฐฉ์: ์ฌ์ธต ๋ถ์
์ธํฐํ์ด์ค ํ์ ์ ๊ฐ๋ ฅํจ์ ์ดํดํ๋ ค๋ฉด ๊ทธ ๊ธฐ๋ฐ์ด ๋๋ ๋ฉ์ปค๋์ฆ์ ์ดํด๋ณด๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
1. WIT(WebAssembly ์ธํฐํ์ด์ค ํ์ ) ์ ์ ์ธ์ด
์ธํฐํ์ด์ค ํ์ ์ WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ธฐ ์ํด WIT(WebAssembly Interface Type)๋ผ๋ ์๋ก์ด ์ธ์ด๋ฅผ ๋์ ํฉ๋๋ค. WIT๋ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ๊ฐ์ ๊ตํ๋ ๋ฐ์ดํฐ์ ํ์ ์ ์ง์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ณ ์์ค์ ์ ์ธ์ ์ธ์ด์ ๋๋ค. WIT๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ์ค๊ณ๋์์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
WIT ์ ์ ์์:
interface greeting {
greet: func(name: string) -> string
}
์ด WIT ์ ์๋ 'greet'๋ผ๋ ๋จ์ผ ํจ์๋ฅผ ๊ฐ์ง 'greeting'์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค. 'greet' ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฌธ์์ด(์ด๋ฆ์ ๋ํ๋)์ ๋ฐ๊ณ ๋ฌธ์์ด(์ธ์ฟ๋ง์ ๋ํ๋)์ ๋ฐํํฉ๋๋ค.
2. ์ด๋ํฐ
์ด๋ํฐ๋ ํธ์คํธ ์ธ์ด(์: JavaScript)์ ํ์ ์์คํ ๊ณผ ์ธํฐํ์ด์ค ํ์ ํํ ๊ฐ์ ๋ฐ์ดํฐ ๋ณํ์ ๋ด๋นํฉ๋๋ค. ์ด๋ํฐ๋ WIT ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ค์ ๋ฐ์ดํฐ ๋ณํ์ ๋ณต์ก์ฑ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ํฐ ๊ณ์ธต์ ๋ณธ์ง์ ์ผ๋ก ๋ฒ์ฉ ๋ฒ์ญ๊ธฐ ์ญํ ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ์ธ์ด ํ์์์ ๋ค๋ฅธ ์ธ์ด ํ์์ผ๋ก ๋ณํํ๊ณ , ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ๋ชจ๋ ๊ฐ์ ์ํํ ํต์ ์ ๋ณด์ฅํฉ๋๋ค.
3. Canonical ABI(์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ด๋๋ฆฌ ์ธํฐํ์ด์ค)
Canonical ABI๋ WASM ์ ํ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ์ ํ์ค ํํ์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ์ธ์ด๊ฐ ๊ฐ ์ธ์ด์ ํน์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ดํดํ ํ์ ์์ด ์ํธ ์ด์ฉ๋ ์ ์์ต๋๋ค. Canonical ABI๋ ๋ฐ์ดํฐ๊ฐ ์ผ๊ด๋๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๊ตํ๋๋๋ก ๋ณด์ฅํ์ฌ ์ ์ฌ์ ์ธ ์ค๋ฅ์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํฉ๋๋ค. ์ด ํ์คํ๋ ํํ์ ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ๋ชจ๋์ด ํจ๊ณผ์ ์ด๊ณ ์์ ์ ์ผ๋ก ํต์ ํ ์ ์๋๋ก ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ์ค์ ์ ์ฉ ์ฌ๋ก
์ธํฐํ์ด์ค ํ์ ์ ์ด์ ์ ์ค์ ์ฌ๋ก๋ฅผ ํตํด ๊ฐ์ฅ ์ ์ค๋ช ๋ฉ๋๋ค. ๋ค์์ ์ธํฐํ์ด์ค ํ์ ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ํฌ๊ฒ ๊ฐ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค์ ๋๋ค:
1. ๊ณ ์ฑ๋ฅ ์ฐ์ฐ์ ํฌํจํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ ๊ณผํ ์๋ฎฌ๋ ์ด์ ๊ณผ ๊ฐ์ ๋ณต์กํ ์ํ์ ๊ณ์ฐ์ด ํ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด ๋ณด์ญ์์ค. ์ด๋ฌํ ๊ณ์ฐ์ C++์ด๋ Rust๋ก ์์ฑ๋ WASM ๋ชจ๋์์ ์ํํ๊ณ , ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ JavaScript๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ฉด JavaScript ์ฝ๋๊ฐ ์๋ ๋ฐ์ดํฐ ๋ณํ ์์ด WASM ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ๋ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ค์์ค์ ํ ์ฐ๊ตฌํ์ด ๊ธฐํ ๋ชจ๋ธ์ ๊ฐ๋ฐํ ๋ WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์๋ฎฌ๋ ์ด์ ์ ๋ธ๋ผ์ฐ์ ๋ก ์คํ๋ก๋ํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ธ๊ณผ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
2. ํด๋ฆฌ๊ธ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ ์ฌ์ด๋ ํ๊ฒฝ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Python ๊ธฐ๋ฐ ์น ์๋ฒ๋ ์ธ์ฆ์ด๋ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Go๋ก ์์ฑ๋ WASM ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค์ด ์ํํ๊ฒ ํต์ ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๊ฐ๋ฐ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์์ต๋๋ค. ์ฑ๊ฐํฌ๋ฅด, ๋ฐ๋, ๋ด์์ ๊ฐ๋ฐ์๋ฅผ ๋ ํํ ํฌ ํ์ฌ๋ WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋๊ณ ํน์ ์์ ์ ์ต์ ํ๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
3. ๋ฆฌ์์ค ์ ์ฝ์ด ์๋ ์๋ฒ ๋๋ ์์คํ
์๋ฒ ๋๋ ์์คํ ์ ์ข ์ข ๋ฆฌ์์ค๊ฐ ์ ํ์ ์ด์ด์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ด ์ค์ํฉ๋๋ค. ์ธํฐํ์ด์ค ํ์ ์ ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ฝ๋๋ฅผ WASM์ผ๋ก ์์ฑํ๊ณ ์ด๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ๊ธฐ์กด ์ฝ๋์ ํตํฉํ ์ ์๊ฒ ํจ์ผ๋ก์จ ์๋ฒ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ผ๋์์ IoT ์ฅ์น๋ฅผ ๊ฐ๋ฐํ๋ ํ์ WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ์ฌ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฅ์น์์ ์ง์ ์คํํจ์ผ๋ก์จ ํด๋ผ์ฐ๋ ์ฐ๊ฒฐ์ ๋ํ ์์กด๋๋ฅผ ์ค์ด๊ณ ์๋ต ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ: ์ธํฐํ์ด์ค ํ์ ๊ธฐ๋ฐ ๊ตฌ์ถ
WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ธํฐํ์ด์ค ํ์ ์ ๊ธฐ๋ฐ ์์ ๊ตฌ์ถ๋ WebAssembly์ ํ ๋จ๊ณ ๋ ์งํํ ํํ์ ๋๋ค. ์ด๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ชจ๋์์ด๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์์คํ ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ธํฐํ์ด์ค ํ์ ์ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ํํ ํตํฉ๊ณผ ์ํธ ์ด์ฉ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ ์ํํธ์จ์ด๊ฐ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๊ตฌ์ถ๋๋ ๋ฏธ๋๋ฅผ ํฅํ ์ค์ํ ๋จ๊ณ์ ๋๋ค.
WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ปดํฌ๋ํธํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๋ถํดํฉ๋๋ค.
- ๊ตฌ์ฑ: ์ปดํฌ๋ํธ๋ฅผ ์กฐ๋ฆฝํ์ฌ ๋ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ญ๋๋ค.
- ๊ฒฉ๋ฆฌ: ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๊ฒฉ๋ฆฌํ์ฌ ๋ณด์๊ณผ ์ ๋ขฐ์ฑ์ ํฅ์์ํต๋๋ค.
- ๋ชจ๋์ฑ: ์ ์ง๋ณด์ ๋ฐ ์ ๋ฐ์ดํธ๊ฐ ๋ ์ฌ์ด ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ญ๋๋ค.
์ปดํฌ๋ํธ ๋ชจ๋ธ์ WebAssembly์ ์ ์ฌ๋ ฅ์ ๋์ฑ ๋ฐํ์์ผ ๊ฐ๋ฐ์๋ค์ด ๋ ๋ณต์กํ๊ณ ์ ๊ตํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๊ตฌ์ถํ ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ๊ธ๋ก๋ฒ ์ํ๊ณ๋ฅผ ์ด์งํ์ฌ ๊ฐ๋ฐ์๋ค์ด ํ์คํ๋๊ณ ์์ ํ ๋ฐฉ์์ผ๋ก ์ํํธ์จ์ด๋ฅผ ๊ณต์ ํ๊ณ ํ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ๋ฏธ๋: ๊ธ๋ก๋ฒ ๊ด์
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์์ WebAssembly์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ์คํํ๊ธฐ ์ํ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ์ด๋ ์ธ์ด ์ํธ ์ด์ฉ์ฑ ๊ฐ์ ์ด๋ผ๋ ์ค์ํ ์๊ตฌ๋ฅผ ํด๊ฒฐํ๊ณ , ๋ ํด๋ฆฌ๊ธ๋ํ๊ณ ํ๋ ฅ์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ๊ฐ๋ ๊ธธ์ ์ด์ด์ค๋๋ค. WebAssembly ์ํ๊ณ๊ฐ ๊ณ์ ์งํํจ์ ๋ฐ๋ผ, ์ธํฐํ์ด์ค ํ์ ์ ๊ฐ๋ฐ์๋ค์ด ๊ฐ๋ ฅํ๊ณ ํ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ์ ์ธ๊ณ์ ์กฐ์ง๊ณผ ๊ฐ๋ฐ์๋ค์ด ์ฐธ์ฌํ๋ ์ง์์ ์ธ ํ์คํ ๋ ธ๋ ฅ์ ๊ธ๋ก๋ฒ ๊ธฐ์ ํ๊ฒฝ์์ WebAssembly์ ์ญํ ์ ๊ณต๊ณ ํ ํ ๊ฒ์ ๋๋ค.
WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ์ ์ฌ์ ์ธ ๋ฏธ๋ ๋ฐ์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ ๋์ ์ฑํ: ๋ ๋ง์ ์ธ์ด์ ํ๋ซํผ์ด WebAssembly๋ฅผ ์ฑํํจ์ ๋ฐ๋ผ ์ธํฐํ์ด์ค ํ์ ์ ์ด์ ์ ๋์ฑ ๋๋๋ฌ์ง ๊ฒ์ ๋๋ค.
- ๊ฐ์ ๋ ๋๊ตฌ: ์ธํฐํ์ด์ค ํ์ ์ ์ง์ํ๋ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ ๊ฒ์ ๋๋ค.
- ํฅ์๋ ๋ณด์: ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ์ WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ๋ณด์์ ๋์ฑ ๊ฐํํ ๊ฒ์ ๋๋ค.
- ์๋ก์ด ์ฌ์ฉ ์ฌ๋ก: WebAssembly๋ ํด๋ผ์ฐ๋ ์ปดํจํ , ์ฃ์ง ์ปดํจํ , ๋ธ๋ก์ฒด์ธ ๊ธฐ์ ๊ณผ ๊ฐ์ ๋ถ์ผ์์ ๊ณ์ํด์ ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐพ์ ๊ฒ์ ๋๋ค.
์ธํฐํ์ด์ค ํ์ ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ๋ก ๊ฐํ๋ WebAssembly๋ ๋ฏธ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ธฐ๋ฐ ๊ธฐ์ ์ด ๋ ์ค๋น๊ฐ ๋์ด ์์ผ๋ฉฐ, ํ์ ์ ์ด๊ณ ์ํฅ๋ ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํด ํจ๊ป ์ผํ๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๋ฅผ ์ก์ฑํ ๊ฒ์ ๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ๋๋ ํ๋ ฅ์ ์ด๊ณ ๋ถ์ฐ๋์ด ์์ผ๋ฉฐ, WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ๊ทธ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์์ ์ธ์ด ์ํธ ์ด์ฉ์ฑ ๋ถ์ผ์์ ์๋นํ ๋ฐ์ ์ ์๋ฏธํฉ๋๋ค. WASM ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ์ผ๋ก์จ, ์ธํฐํ์ด์ค ํ์ ์ ์ํํ ์ธ์ด ํต์ , ํฅ์๋ ์ฑ๋ฅ, ๊ฐ์๋ ๊ฐ๋ฐ ๋ณต์ก์ฑ, ๊ฐํ๋ ๋ณด์ ๋ฐ ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ์ ํฌํจํ ์๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ์ ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํฉ๋๋ค. WebAssembly๊ฐ ๊ณ์ ์งํํจ์ ๋ฐ๋ผ, ์ธํฐํ์ด์ค ํ์ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ๊ธ๋ก๋ฒ ์ํ๊ณ๋ฅผ ์กฐ์ฑํ๋ฉฐ, ์ธ์ด์ ํ๋ซํผ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด์ ํ์ ์ ์ด์งํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ์ ์ ์์ฉํ๋ ๊ฒ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๊ณ ํ์ ์ ์ธ ์ธ์์ ๊ตฌ์ถํ๋ ํ ๊ฑธ์์ ๋๋ค.
WebAssembly์ ์ธํฐํ์ด์ค ํ์ ์ ๊ฐ๋ฐ ๋ฐ ์ฑํ์ ์ ์ธ๊ณ์ ๊ฐ๋ฐ์, ์ฐ๊ตฌ์, ์กฐ์ง์ด ์ฐธ์ฌํ๋ ํ๋ ฅ์ ์ธ ๋ ธ๋ ฅ์ ๋๋ค. ์ฝ๋ ๊ธฐ์ฌ, ๋ฌธ์ํ ๋๋ ์ปค๋ฎค๋ํฐ ์ฐธ์ฌ๋ฅผ ํตํด ์ด ๋ ธ๋ ฅ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๊ฐ์น ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. WebAssembly ์ฌ์์ ํ์ํ๊ณ ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํ์ฌ ์ง์ ์ผ๋ก ๊ธ๋ก๋ฒํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ํ๊ณ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ ์ฃผ์ญ์์ค.