Wasm์์ ์ง์ ํ ์ธ์ด ์ํธ์ด์ฉ์ฑ์ ๊ธฐ๋ฐ์ธ WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ํ์ํด ๋ณด์ธ์. ์ ๋๋ฒ์ค ์ปดํฌ๋ํธ, ๊ต์ฐจ ์ธ์ด ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ, ์ฃ์ง, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
WebAssembly ์ธํฐํ์ด์ค ํ์ : ์ํํ ์ธ์ด ์ํธ์ด์ฉ์ฑ๊ณผ ์ปดํจํ ์ ๋ฏธ๋๋ฅผ ์ด๋ค
๊ด๋ํ๊ณ ์ํธ ์ฐ๊ฒฐ๋ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์, ์ง์ ์ผ๋ก ๋ณดํธ์ ์ธ ์ฝ๋โ์ด๋์๋ ์คํ๋๊ณ , ์ด๋ค ์ธ์ด๋ก๋ ์์ฑ๋๋ฉฐ, ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํํ๊ฒ ์ํธ์์ฉํ ์ ์๋ ๋ก์งโ์ ๋ํ ๊ฟ์ ์ค๋ซ๋์ ์ถ๊ตฌ๋์ด ์์ต๋๋ค. WebAssembly(Wasm)๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ์์ ํ๊ณ , ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ, ์ด์ ๊ฐ๋ฅํ ์ปดํ์ผ ๋์์ผ๋ก ๋ฑ์ฅํ ํ๊ธฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ด๊ธฐ ๊ฐ๋ฅ์ฑ์ ๊ฐ๋ ฅํ์ง๋ง, ์ค์ํ ๊ฒฉ์ฐจ๋ฅผ ๋จ๊ฒผ์ต๋๋ค. ๋ฐ๋ก Wasm ๋ชจ๋์ด ์๋ก ๋๋ ํธ์คํธ ํ๊ฒฝ๊ณผ ํจ๊ณผ์ ์ด๊ณ ์ธ๊ฐ๊ณตํ์ ์ผ๋ก ํต์ ํ๋ ๋ฅ๋ ฅ, ํนํ ๋ค์ํ ์ธ์ด ๊ฒฝ๊ณ๋ฅผ ๋์ด ๋ณต์กํ ๋ฐ์ดํฐ ํ์ ์ ๋ค๋ฃฐ ๋์ ๋ฌธ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ WebAssembly ์ธํฐํ์ด์ค ํ์ ์ด ๋ฑ์ฅํ์ฌ, Wasm์ ๋จ์ํ ์ปดํ์ผ ๋์์์ ์ ๊ตํ๊ณ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ปดํฌ๋ํธ ํ๋ซํผ์ผ๋ก ๊ทผ๋ณธ์ ์ผ๋ก ๋ณํ์์ผฐ์ต๋๋ค. ์ด๊ฒ์ ๋นํ ๋ฐ ์๋ ์ธ์ด ์ํธ์ด์ฉ์ฑ์ ์คํํ๋ ํต์ฌ์ด๋ฉฐ, ์ํํธ์จ์ด ์์ง๋์ด๋ง์์ ์ง์ ์ผ๋ก ๋ชจ๋ํ๋๊ณ ํด๋ฆฌ๊ธ๋(polyglot)์ ์ธ ๋ฏธ๋๋ฅผ ํฅํ ๊ธธ์ ์ด์ด์ค๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋๋ WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์ธ๊ณ๋ฅผ ๊น์ด ํ๊ณ ๋ค์ด, ํต์ฌ ๊ฐ๋ , WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์์์ ์ค์ถ์ ์ธ ์ญํ , ๋ค์ํ ์์ญ์ ๊ฑธ์น ์ค์ ์ ์ฉ ์ฌ๋ก, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ์น๋ ์ฌ์คํ ์ํฅ์ ํ๊ตฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ํ์ ๋ค์ด ์ด๋ป๊ฒ ๋ณดํธ์ ์ธ ๋ฒ์ญ๊ฐ ์ญํ ์ ํ์ฌ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ๋ ํ๋ ฅ ์๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ํจ์จ์ ์ธ ์์คํ ์ ๊ตฌ์ถํ ์ ์๊ฒ ํ๋์ง ๋ฐํ๋ผ ๊ฒ์ ๋๋ค.
WebAssembly์ ์งํ: ๋จ์ํ ์ปดํ์ผ๋ฌ ๋์์ ๋์ด์
WebAssembly์ ์ฌ์ ์ ํ๋์ ๊ฐ๋ ฅํ๊ณ ์ค๋๋ ฅ ์๋ ๋น์ ์ผ๋ก ์์๋์์ต๋๋ค: ์น์ ์ํ ๊ณ ์ฑ๋ฅ, ์ํ, ๋ณด์ ๋ฐ์ด๋๋ฆฌ ํ์์ ์ ๊ณตํ๋ ๊ฒ. JavaScript์ ๋ฅ๋ ฅ์ ๋์ด์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ๋ถ๋ถ์ ๊ฐ์ํํ ํ์์ฑ์์ ํ์ํ Wasm์ ๋น ๋ฅด๊ฒ ๊ทธ ๊ฐ์น๋ฅผ ์ฆ๋ช ํ์ต๋๋ค. ๊ทธ '์ต์ ๊ธฐ๋ฅ ์ ํ'(MVP)์ 32๋นํธ ๋ฐ 64๋นํธ ์ ์์ ๋ถ๋ ์์์ ์ซ์์ ๊ฐ์ ๋จ์ํ ๊ธฐ๋ณธ ํ์ ์ ์ฌ์ฉํ์ฌ ์ ์์ค ์์น ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์คํํ๋ ๋ฐ ์ค์ ์ ๋์์ต๋๋ค. C, C++, Rust์ ๊ฐ์ ์ธ์ด๋ ์ฝ๋๋ฅผ Wasm์ผ๋ก ์ปดํ์ผํ์ฌ ์น ๋ธ๋ผ์ฐ์ ๋ด์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ MVP์ ์ ์์ค ๊ณ์ฐ์์์ ๊ฐ์ ์ ๋์์ ๊ทธ ํ๊ณ๋ฅผ ๋๋ฌ๋์ต๋๋ค. ์ธ๋ถ ์ธ๊ณโ๋ธ๋ผ์ฐ์ ์ JavaScript ํธ์คํธ๋ ์๋ฒ์ ์ด์ ์ฒด์ ๋ โ์ ์ํธ์์ฉํ๋ ค๋ฉด ์๋นํ ์์ ์์ฉ๊ตฌ(boilerplate) ์ฝ๋๊ฐ ํ์ํ์ต๋๋ค. JavaScript์ Wasm ๊ฐ, ๋๋ ๋ Wasm ๋ชจ๋ ๊ฐ์ ๋ฌธ์์ด, ๋ฐฐ์ด, ๊ฐ์ฒด์ ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์์น์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ํตํด ์๋์ผ๋ก ์ง๋ ฌํํ๊ณ ์ญ์ง๋ ฌํํ๋ ์์ ์ ํฌํจํ์ต๋๋ค. ์ข ์ข "์ํผ๋์ค ๋ถ์ผ์น"๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ด ๊ณผ์ ์ ๋ฒ๊ฑฐ๋กญ๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ๋นํจ์จ์ ์ด์ด์ Wasm์ ๋ณดํธ์ ์ธ ์ปดํฌ๋ํธ ๋ชจ๋ธ๋ก ๋ง๋ค๋ ค๋ ๋น์ ์ ์ฌ๊ฐํ๊ฒ ์ ํดํ์ต๋๋ค.
WebAssembly ์์คํ ์ธํฐํ์ด์ค(WASI)์ ๋์ ์ ์ค์ํ ์ง์ ์ ์ด๋ฃจ์์ต๋๋ค. WASI๋ ํ์คํ๋ ์์คํ ํธ์ถ ์งํฉ์ ์ ๊ณตํ์ฌ Wasm ๋ชจ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์ ์ฒด์ ์ ์ํธ์์ฉํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ํ๋ซํผ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ฐฉ์์ผ๋ก ํธ์คํธ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ ์ ์๊ฒ ํ์ต๋๋ค. ์ด๋ก์จ Wasm์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ด ์๋ฒ ์ฌ์ด๋ ๋ฐ ์ฃ์ง ์ปดํจํ ์ผ๋ก ๊ทธ ์์ญ์ ํ์ฅํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ WASI๊ฐ ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ธ์ด ๊ฒฝ๊ณ๋ฅผ ๋์ด ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ๊ทผ๋ณธ์ ์ธ ๊ณผ์ ๋ ์ฌ์ ํ ๋จ์ ์์์ต๋๋ค. WASI๋ Wasm ๋ชจ๋์ด ํ์ผ์ ์ฝ๊ฑฐ๋ ๋คํธ์ํฌ ์์ฒญ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ง๋ง, Rust๋ก ์ปดํ์ผ๋ Wasm ๋ชจ๋์ด Go๋ก ์ปดํ์ผ๋ Wasm ๋ชจ๋์ ์ง์ ํธ์ถํ์ฌ, ๋ฒ๊ฑฐ๋ก์ด ์๋ ์ธํฐํ์ด์ค ์์ ์์ด ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ๊ตฌ์กฐํ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ํ์คํ๋๊ณ ์ธ๊ฐ๊ณตํ์ ์ธ ๋ฐฉ๋ฒ์ ๋ณธ์ง์ ์ผ๋ก ์ ๊ณตํ์ง๋ ์์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก WebAssembly ์ธํฐํ์ด์ค ํ์ ์ด ๋ ๋์ WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ ํจ๊ป ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ์ ๋๋ค. ์ด๋ค์ ์ ์์ค Wasm ๊ธฐ๋ณธ ํ์ ๊ณผ ๊ณ ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌ์กฐ ์ฌ์ด์ ๊ฒฉ์ฐจ๋ฅผ ๋ฉ์ฐ๊ณ , ๋ง์นจ๋ด Wasm์ ์ง์ ์ผ๋ก ์ํธ์ด์ฉ ๊ฐ๋ฅํ ๋ณดํธ์ ๋ฐํ์์ผ๋ก์์ ์ ์ฌ๋ ฅ์ ์คํํฉ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ์ดํด: Wasm์ ์ํ ๋ก์ ํ ์คํค
์ธํฐํ์ด์ค ํ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก, WebAssembly ์ธํฐํ์ด์ค ํ์ ์ Wasm ๋ชจ๋๊ณผ ๊ทธ ํธ์คํธ ์ฌ์ด, ๋๋ ๋ Wasm ๋ชจ๋ ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ๋ฐ์ดํฐ ํ์ ์ ์ค๋ช ํ๋ ํ์คํ๋๊ณ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ์์ธก์ด ๋ชจ๊ตญ์ด์ ๊ด๊ณ์์ด ์ดํดํ ์ ์๋ ๋ณดํธ์ ์ธ ๋ฒ์ญ๊ฐ๋ ์ ํํ ๊ณ์ฝ์ ์์ํด ๋ณด์ธ์. ์ด๊ฒ์ด ๋ฐ๋ก ์ธํฐํ์ด์ค ํ์ ์ด WebAssembly์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
Wasm ๊ฐ์ ๋จธ์ ์๋์ ํ์์ ์ด์ง๋ง ์ ์์ค์ด๋ฉฐ ํ๋ถํ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ์๋ ์ข
์ข
๋ถ์ถฉ๋ถํ ํต์ฌ Wasm ํ์
(i32
, i64
, f32
, f64
)๊ณผ ๋ฌ๋ฆฌ, ์ธํฐํ์ด์ค ํ์
์ ๋ ํ๋ถํ ๋ฐ์ดํฐ ํ์
์งํฉ์ ๋์
ํฉ๋๋ค:
- ์ค์นผ๋ผ: ๋ถ๋ฆฌ์ธ, ๋ค์ํ ๋๋น(8, 16, 32, 64๋นํธ)์ ์ ์, ๋ถ๋ ์์์ ์ซ์์ ๊ฐ์ ๊ธฐ๋ณธ ํ์ .
- ๋ฌธ์์ด: ์ผ๋ฐ์ ์ผ๋ก UTF-8๋ก ์ธ์ฝ๋ฉ๋ ํ ์คํธ ๋ฐ์ดํฐ.
- ๋ฆฌ์คํธ/๋ฐฐ์ด: ํน์ ํ์ ์ ์์ ์ํ์ค.
- ๋ ์ฝ๋(๊ตฌ์กฐ์ฒด): ๊ฐ๊ฐ ๊ณ ์ ํ ํ์ ์ ๊ฐ์ง ๋ช ๋ช ๋ ํ๋์ ์์ ์๋ ์ปฌ๋ ์ .
- ๋ฐฐ๋ฆฌ์ธํธ(์ฐ๊ด ๋ฐ์ดํฐ๊ฐ ์๋ ์ด๊ฑฐํ): ์ฌ๋ฌ ๊ฐ๋ฅ์ฑ ์ค ํ๋์ผ ์ ์๋ ํ์ ์ผ๋ก, ๊ฐ ๊ฐ๋ฅ์ฑ์ ์์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ๋ค์ํ ๋ฐ์ดํฐ ์ํ๋ ์ค๋ฅ ํ์ ์ ํํํ๋ ๋ฐ ๊ฐ๋ ฅํฉ๋๋ค.
- ์ด๊ฑฐํ: ์ฐ๊ด ๋ฐ์ดํฐ ์์ด ๊ณ ์ ๋ ๋ช ๋ช ๋ ๊ฐ ์งํฉ ์ค ํ๋์ผ ์ ์๋ ํ์ .
- ์ต์
(๋ ๊ฐ๋ฅ ํ์
): ๊ฐ์ด ์์ ์๋ ์๊ณ ์์ ์๋ ์๋ ํ์
์ผ๋ก, Java์
Optional
, Rust์Option
, Haskell์Maybe
์ ์ ์ฌํฉ๋๋ค. - ๊ฒฐ๊ณผ(์ค๋ฅ ์ฒ๋ฆฌ): ์ฑ๊ณต์ ์ธ ๊ฐ ๋๋ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋ ํ์ ์ผ๋ก, ์คํจํ ์ ์๋ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ํธ๋ค: ํธ์คํธ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค์ ๋ํ ๋ถํฌ๋ช ํ ์ฐธ์กฐ๋ก, ๋ด๋ถ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ ธ์ถํ์ง ์๊ณ ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ด ๋ ํ๋ถํ ํ์
์์คํ
์ ํตํด ๊ฐ๋ฐ์๋ Wasm ๋ชจ๋์ ๋ํ ์ ํํ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค(API)๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ณต์กํ ๋ฐ์ดํฐ์ ๋ํด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์์ค ์์น ํํ์ ์ฌ์ฉํ๋ ๋ฒ๊ฑฐ๋ก์ด ๊ดํ์์ ๋ฒ์ด๋ ์ ์์ต๋๋ค. ๋ฌธ์์ด์ ๋ํ ํฌ์ธํฐ์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ i32
๊ฐ์ ์ ๋ฌํ๋ ๋์ , ์ด์ ๋ ๋จ์ํ ์ธํฐํ์ด์ค ํ์
string
์ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, Wasm ๋ฐํ์์ ์์ฑ๋ ์ธ์ด ๋ฐ์ธ๋ฉ๊ณผ ํจ๊ป ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๋ณํ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ ์ธ์ด ์ํธ์ด์ฉ์ฑ์ ํ์์ ์ธ๊ฐ?
์ธํฐํ์ด์ค ํ์
์ ๋ณธ์ง์ ๋ณดํธ์ ์ธ ์ค๊ฐ์ ์ญํ ์ ํ๋ ๋ฅ๋ ฅ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ํ์
์ผ๋ก ์ ์๋ ํจ์๊ฐ ํธ์ถ๋๋ฉด, Wasm ๋ฐํ์๊ณผ ๊ด๋ จ ๋๊ตฌ๋ ๊ณ ์์ค ์ธ์ด๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ(์: Python ๋ฆฌ์คํธ, Rust Vec<String>
, JavaScript ๋ฐฐ์ด)์ ํ์ค Wasm ์ธํฐํ์ด์ค ํ์
ํํ ์ฌ์ด์ ํ์ํ ๋ณํ์ ์ํํฉ๋๋ค. ์ด ์ํํ ๋ณํ ๊ณผ์ ์ด ์ง์ ํ ์ธ์ด ์ํธ์ด์ฉ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค:
- ๊ต์ฐจ ์ธ์ด Wasm ๋ชจ๋ ํต์ : ํ Wasm ๋ชจ๋์ Rust๋ก ์ปดํ์ผ๋์ด ๊ณ ์ฑ๋ฅ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ , ๋ค๋ฅธ ๋ชจ๋์ Go๋ก ์ปดํ์ผ๋์ด ๋คํธ์ํฌ ํต์ ์ ๊ด๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ชจ๋๋ค์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ด๋ ์๋ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์์ด๋ ๋ณต์กํ JSON๊ณผ ์ ์ฌํ ๊ฐ์ฒด๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ๋ฆฌ์คํธ์ ๊ฐ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉฐ ์๋ก์ ํจ์๋ฅผ ์ง์ ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ ํน์ ์์ ์ ๊ฐ์ฅ ์ ํฉํ ์ธ์ด๋ฅผ ์ ํํ ์ ์๋ ๊ณ ๋๋ก ๋ชจ๋ํ๋ ์ํคํ ์ฒ๋ฅผ ์ด์งํฉ๋๋ค.
- ์ธ๊ฐ๊ณตํ์ ์ธ ํธ์คํธ-Wasm ์ํธ์์ฉ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ด๋ JavaScript๊ฐ ๊ฐ์ฒด, ๋ฐฐ์ด, ๋ฌธ์์ด์ Wasm ๋ชจ๋์ ์ง์ ์ ๋ฌํ๊ณ ํ๋ถํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ์ ์ ์์์ ์๋ฏธํ๋ฉฐ, JavaScript ๊ฐ๊ณผ Wasm ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์๋ ๋ณํ ์์ฉ๊ตฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์ ํฌ๊ฒ ๋จ์ํํ๊ณ , ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ค์ด๋ฉฐ, ๋ฐ์ดํฐ ์ ์ก์ ์ต์ ํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์๋ฒ ์ฌ์ด๋ Wasm์ ๊ฒฝ์ฐ, Node.js, Python ๋๋ Rust ํธ์คํธ ํ๊ฒฝ์ ๋ค์ดํฐ๋ธ ์ธ์ด ํ์ ์ ์ฌ์ฉํ์ฌ Wasm ์ปดํฌ๋ํธ์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
- ์์ฉ๊ตฌ ๊ฐ์ ๋ฐ ๊ฐ๋ฐ์ ๊ฒฝํ ํฅ์: ๊ฐ๋ฐ์๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ง๋ฃจํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๊ธ๋ฃจ ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ์ธํฐํ์ด์ค ํ์ ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ์๋ ํ์ ๋ณํ์ ์ ์์ค ์ธ๋ถ ์ฌํญ์ ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฐฐ๊ด ์์ ๋ณด๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
- ์์ ์ฑ ๋ฐ ํ์
๊ฒ์ฌ ๊ฐํ: ์ ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ธํฐํ์ด์ค ํ์
์ ๋ชจ๋ ๊ฒฝ๊ณ์์ ์ ์ ํ์
๊ฒ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ฆ, Wasm ๋ชจ๋์ด
record { name: string, age: u32 }
๋ฅผ ๊ธฐ๋ํ๋ ํจ์๋ฅผ ๋ด๋ณด๋ด๋ฉด, ์ด๋ฅผ ํธ์ถํ๋ ํธ์คํธ๋ ๋ค๋ฅธ Wasm ๋ชจ๋์ ํด๋น ๊ตฌ์กฐ๋ฅผ ์ค์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋์ง ํ์ ๊ฒ์ฌ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ฐํ์์ด ์๋ ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ์ฌ ๋ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์์คํ ์ ๋ง๋ญ๋๋ค. - WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ ํ์ฑํ: ์ธํฐํ์ด์ค ํ์ ์ WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด ๊ตฌ์ถ๋๋ ๊ธฐ๋ฐ์ ๋๋ค. ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๊ณ ๊ตํํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด, ์์ค ์ธ์ด์ ๊ด๊ณ์์ด ๋์ ์ผ๋ก ์ฐ๊ฒฐ๋๊ณ ๊ต์ฒด๋ ์ ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ Wasm ์ปดํฌ๋ํธ์ ๋น์ ์ ์คํ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
๋ณธ์ง์ ์ผ๋ก, ์ธํฐํ์ด์ค ํ์ ์ WebAssembly๋ฅผ ๊ฐ๋ ฅํ ๋ฐ์ดํธ์ฝ๋ ํ์์์ ์ํธ์ด์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ๋ค์ํ ์ํ๊ณ๋ฅผ ํธ์คํ ํ ์ ์๋ ์ง์ ํ ๋ณดํธ์ ๋ฐํ์์ผ๋ก ๊ฒฉ์์ํค๋ ๋น ์ง ๊ณ ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ํต์ฌ ๊ฐ๋
์ธํฐํ์ด์ค ํ์ ์ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ด ์๋๋ผ, WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ผ๋ ๋ ๋์ ๋น์ ์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ์ด ๋ชจ๋ธ์ WebAssembly๋ฅผ ๊ฐ๋ณ ๋ชจ๋์ ๋์ด ํ์ฅํ์ฌ, ์ฌ๋ฌ Wasm ๋ชจ๋์ ๋ ํฌ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์โ์ปดํฌ๋ํธโ๋ก ๊ฒฐํฉํ์ฌ ์ํํ๊ฒ ์ํธ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
์ปดํฌ๋ํธ ๋ชจ๋ธ: ๋ ๋์ ์์ค์ ์ถ์ํ
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ธํฐํ์ด์ค ํ์ ์์ ๊ตฌ์ถ๋ ์ฌ์์ผ๋ก, Wasm ๋ชจ๋์ด ์ธํฐํ์ด์ค ํ์ ์ ์, ๋ฆฌ์์ค ๋ฐ ์ข ์์ฑ๊ณผ ํจ๊ป ๋ฒ๋ค๋ก ๋ฌถ์ฌ ์๊ธ์์กฑ์ ์ด๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋จ์๋ฅผ ํ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ์ปดํฌ๋ํธ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ ๊ฐ๋ ฅํ๊ณ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ๋ค์์ ๋ช ์ํฉ๋๋ค:
- ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ: ํ๋ ์ด์์ ํต์ฌ Wasm ๋ชจ๋ ๋ชจ์์ผ๋ก, ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ค์ ๊ธฐ๋ฅ(๊ฐ์ ธ์ค๋ ๊ฒ)๊ณผ ์ ๊ณตํ๋ ๊ฒ(๋ด๋ณด๋ด๋ ๊ฒ)์ ๋ํ ์ค๋ช ์ด ํฌํจ๋ฉ๋๋ค.
- ์ปดํฌ๋ํธ๊ฐ ํต์ ํ๋ ๋ฐฉ๋ฒ: ์ ์๋ ์ธํฐํ์ด์ค(์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ์ฌ ๋ช ์๋จ)๋ฅผ ํตํด ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๊ตํ ๋ฐ ํจ์ ํธ์ถ์ ํ์ฉํฉ๋๋ค.
- ์ปดํฌ๋ํธ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ฐฉ๋ฒ: ๋ฐํ์ ์์คํ ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ด๋ณด๋ด๊ธฐ๋ก ์ปดํฌ๋ํธ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ง์กฑ์์ผ ์ปดํฌ๋ํธ๋ค์ ํจ๊ป ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋ถ๋ถ๋ค๋ก๋ถํฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๋ค.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ปดํฌ๋ํธ ๊ฐ ๋๋ ์ปดํฌ๋ํธ์ ํธ์คํธ ๊ฐ์ ์ ๋ฌ๋๋ ๋ฆฌ์์ค(ํ์ผ ํธ๋ค, ๋คํธ์ํฌ ์ฐ๊ฒฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฑ)๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ํฌํจํฉ๋๋ค.
์ด ๋ชจ๋ธ์ ํตํด ๊ฐ๋ฐ์๋ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด๋ ์์ฑ๋ ํน์ ์ธ์ด๋ณด๋ค๋ ์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค์ ๋์์ ์ด์ ์ ๋ง์ถฐ ๋ ๋์ ์์ค์ ์ถ์ํ์์ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํด Rust๋ก ์์ฑ๋ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ ๋ถ์์ ์ํ Python ๊ธฐ๋ฐ ์ปดํฌ๋ํธ์์ ์ฝ๊ฒ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด ์ํํ ํตํฉ์ ์ฒ๋ฆฌํฉ๋๋ค.
"wit"(WebAssembly ์ธํฐํ์ด์ค ๋๊ตฌ)์ ์ญํ
์ด๋ฌํ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ธฐ ์ํด, WebAssembly ์ปค๋ฎค๋ํฐ๋ WIT(WebAssembly Interface Tools)๋ก ์๋ ค์ง ์ ์ฉ ์ธํฐํ์ด์ค ์ ์ ์ธ์ด(IDL)๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. WIT ํ์ผ์ Wasm ์ปดํฌ๋ํธ๊ฐ ๋ด๋ณด๋ด๊ฑฐ๋ ๊ฐ์ ธ์ฌ ๊ฒ์ผ๋ก ์์๋๋ ํจ์, ๋ฐ์ดํฐ ํ์ ๋ฐ ๋ฆฌ์์ค์ ๋ํ ํ ์คํธ ๊ธฐ๋ฐ ์ค๋ช ์ ๋๋ค. ์ด๋ค์ ์ปดํฌ๋ํธ์ ๊ทธ ์ฌ์ฉ์ ์ฌ์ด์ ์ต์ข ๊ณ์ฝ ์ญํ ์ ํฉ๋๋ค.
WIT ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค(๊ฐ๋จํ ์์):
interface types-example {
record User {
id: u64,
name: string,
email: option<string>,
}
list<User>;
add-user: func(user: User) -> result<u64, string>;
get-user: func(id: u64) -> option<User>;
delete-user: func(id: u64) -> bool;
}
world my-component {
export types-example;
}
์ด ์์์ types-example
๋ User
๋ ์ฝ๋, ์ฌ์ฉ์ ๋ชฉ๋ก, ๊ทธ๋ฆฌ๊ณ ์ธ ๊ฐ์ง ํจ์๋ฅผ ๊ฐ์ง ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค: add-user
(์ฑ๊ณต ์ ์ฌ์ฉ์ ID ๋ฐํ, ์คํจ ์ ๋ฌธ์์ด ์ค๋ฅ ๋ฐํ), get-user
(์ ํ์ ์ฌ์ฉ์ ๋ฐํ), ๊ทธ๋ฆฌ๊ณ delete-user
์
๋๋ค. ๊ทธ๋ฐ ๋ค์ world my-component
๋ ์ด ์ปดํฌ๋ํธ๊ฐ types-example
์ธํฐํ์ด์ค๋ฅผ ๋ด๋ณด๋ธ๋ค๊ณ ๋ช
์ํฉ๋๋ค. ์ด ๊ตฌ์กฐํ๋ ์ ์๋ ์ปดํฌ๋ํธ์ ์ํธ์์ฉํ๋ ๋ชจ๋ ๋น์ฌ์์๊ฒ ๋จ์ผ ์ง์ค ๊ณต๊ธ์(single source of truth)์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
WIT ํ์ผ์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ํ ๊ธ๋ฃจ ์ฝ๋์ ๋ฐ์ธ๋ฉ์ ์์ฑํ๋ ๋๊ตฌ์ ์ ๋ ฅ์ด ๋ฉ๋๋ค. ์ด๋ ๋จ์ผ WIT ์ ์๋ฅผ ์ฌ์ฉํ์ฌ JavaScript์ฉ ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋, Rust์ฉ ์๋ฒ ์ธก ์คํ , ์ฌ์ง์ด Python์ฉ ๋ํผ ํจ์๊น์ง ์์ฑํ์ฌ ์ ์ฒด ์ํ๊ณ์ ๊ฑธ์ณ ํ์ ์์ ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ธ์ด ๋ฐ์ธ๋ฉ ๋ฐ ๋๊ตฌ
์ธํฐํ์ด์ค ํ์
๊ณผ WIT์ ์ง์ ํ ํ์ ์ด๋ฌํ ์ถ์์ ์ธ ์ธํฐํ์ด์ค ์ ์๋ฅผ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ตฌ์ฒด์ ์ด๊ณ ๊ด์ฉ์ ์ธ ์ฝ๋๋ก ๋ณํํ๋ ์ ๊ตํ ๋๊ตฌ์ ์ํด ๋ฐํ๋ฉ๋๋ค. wit-bindgen
๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ฌ๊ธฐ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ค์ WIT ํ์ผ์ ์ฝ๊ณ ์ข
์ข
"๊ธ๋ฃจ ์ฝ๋"๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ธ์ด๋ณ ๋ฐ์ธ๋ฉ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด:
types-example
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ Wasm ์ปดํฌ๋ํธ๋ฅผ Rust๋ก ์์ฑํ๋ ๊ฒฝ์ฐ,wit-bindgen
์ ์ง์ ๊ตฌํํ ์ ์๋ Rust ํธ๋ ์ดํธ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ Rust ๋ฌธ์์ด, ๊ตฌ์กฐ์ฒด, ์ต์ ์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ํด Wasm ์ธํฐํ์ด์ค ํ์ ํํ์ผ๋ก ๋ณํํ๊ณ , ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํด ๊ทธ ๋ฐ๋๋ก ๋ณํํ๋ ์ ์์ค ์ธ๋ถ ์ฌํญ์ ์ฒ๋ฆฌํฉ๋๋ค.- ์ด Wasm ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ๊ธฐ ์ํด JavaScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,
wit-bindgen
(๋๋ ์ ์ฌํ ๋๊ตฌ)์ ๋ค์ดํฐ๋ธ JavaScript ๊ฐ์ฒด, ๋ฐฐ์ด, ๋ฌธ์์ด์ ๋ฐ๊ณ ๋ฐํํ๋ JavaScript ํจ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ์ด๋ค์ Wasm ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ํํ๊ฒ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ด์ ์ ํ์ํ๋ ์๋TextEncoder
/TextDecoder
๋ฐ ๋ฒํผ ๊ด๋ฆฌ๋ฅผ ์ถ์ํํฉ๋๋ค. - Go, Python, C#, Java ๋ฑ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ํ ์ ์ฌํ ๋ฐ์ธ๋ฉ ์์ฑ๊ธฐ๊ฐ ๋ฑ์ฅํ๊ณ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ์ธ์ด์ ๊ฐ๋ฐ์๊ฐ Wasm์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ๋ํ ๊น์ ์ง์ ์์ด๋ ์ต์ํ๊ณ ํ์ ์์ ํ API๋ก Wasm ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์ฑํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ๋ฐ์ธ๋ฉ์ ์๋ ์์ฑ์ ๊ฒ์ ์ฒด์ธ์ ์ ๋๋ค. ์ด๋ ์์ฒญ๋ ์์ ์๋์ ์ด๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์์ ์ ์ ๊ฑฐํ๊ณ , ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๋ํญ ๊ฐ์ํํ๋ฉฐ, ์ธํฐํ์ด์ค๊ฐ ๋ค๋ฅธ ์ธ์ด ํ๊ฒฝ์์ ์ผ๊ด๋๊ฒ ๊ตฌํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด ๊ฐ์์ ์ธ์ด์ ์ต์ ํ๋๊ณ Wasm ๊ฒฝ๊ณ์์ ์ํํ๊ฒ ์ํธ์์ฉํ๋ ์ง์ ํ ํด๋ฆฌ๊ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ํต์ฌ ๋๋ ฅ์ ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ์ค์ ์ ์ํฅ๊ณผ ์ฌ์ฉ ์ฌ๋ก
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ์ํฅ์ ์ ํต์ ์ธ ์น ๊ฐ๋ฐ์์๋ถํฐ ํด๋ผ์ฐ๋ ์ปดํจํ ๋ฐ ๊ทธ ์ด์์ ์๋ก์ด ํจ๋ฌ๋ค์์ ์ด๋ฅด๊ธฐ๊น์ง ์๋ง์ ์์ญ์ ๊ฑธ์ณ ํ์ฅ๋ฉ๋๋ค. ์ด๊ฒ์ ๋จ์ํ ์ด๋ก ์ ๊ตฌ์ฑ๋ฌผ์ด ์๋๋ผ ์ฐจ์ธ๋ ์ํํธ์จ์ด ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ธฐ์ด ๊ธฐ์ ์ ๋๋ค.
๊ต์ฐจ ์ธ์ด ๊ฐ๋ฐ ๋ฐ ํด๋ฆฌ๊ธ๋ ์ ํ๋ฆฌ์ผ์ด์
์ธํฐํ์ด์ค ํ์ ์ ๊ฐ์ฅ ์ฆ๊ฐ์ ์ด๊ณ ์ฌ์คํ ์ด์ ์ค ํ๋๋ ์ง์ ํ ํด๋ฆฌ๊ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค. ๊ฐ๋ฐ์๋ ๋ ์ด์ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๋จ์ผ ์ธ์ด๋ก ์ ํ๋์ง ์์ต๋๋ค. ๋์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ํ ์ ์์ต๋๋ค:
- ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค ํ์ฉ: C/C++๋ก ์์ฑ๋ ๋ ๊ฑฐ์ ์ฝ๋๋ ์ฑ๋ฅ์ด ์ค์ํ ์์ ์ ์ํด Rust๋ก ์์ฑ๋ ์ ๋ชจ๋์ ํตํฉํฉ๋๋ค.
- ์ ๋ฌด์ ์ ํฉํ ๋๊ตฌ ์ ํ: ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ ๋ด์์ ๋ฐ์ดํฐ ๊ณผํ ์ปดํฌ๋ํธ์๋ Python์, ๋คํธ์ํน์๋ Go๋ฅผ, ๊ณ ์ฑ๋ฅ ์ปดํจํ ์๋ Rust๋ฅผ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ก์ง์๋ JavaScript๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๋จ์ํ: ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ Wasm ์ปดํฌ๋ํธ๋ก ๋ถํดํ๋ฉฐ, ๊ฐ ์ปดํฌ๋ํธ๋ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋๊ณ ์ ์ ์๋ ์ธํฐํ์ด์ค ํ์ ์ ํตํด ํต์ ํฉ๋๋ค. ์ด๋ ํ์ ์์จ์ฑ์ ํฅ์์ํค๊ณ , ์ข ์์ฑ์ ์ค์ด๋ฉฐ, ์์คํ ์ ๋ณต์๋ ฅ์ ํฅ์์ํต๋๋ค.
๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ํ๋ซํผ์์ ์ ํ ์ถ์ฒ์ Python Wasm ์ปดํฌ๋ํธ์ ์ํด ์์ฑ๋๊ณ , ์ฌ๊ณ ๊ด๋ฆฌ๋ Rust Wasm ์ปดํฌ๋ํธ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ, ๊ฒฐ์ ์ฒ๋ฆฌ๋ Java Wasm ์ปดํฌ๋ํธ๊ฐ ์ํํ๊ณ , ์ด ๋ชจ๋ ๊ฒ์ด Node.js ํธ์คํธ์ ์ํด ์กฐ์ ๋๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ์ธํฐํ์ด์ค ํ์ ์ ์ด๋ฌํ ๋ค์ํ ์ธ์ด ํ๊ฒฝ ๊ฐ์ ์ํํ ๋ฐ์ดํฐ ํ๋ฆ์ผ๋ก ์ด ๋น์ ์ ํ์ค๋ก ๋ง๋ญ๋๋ค.
ํฅ์๋ ์น ๊ฐ๋ฐ
์น ๊ฐ๋ฐ์์๊ฒ ์ธํฐํ์ด์ค ํ์ ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ Wasm์ ํตํฉํ๋ ์ธ๊ฐ๊ณตํ์ฑ๊ณผ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค:
- ์ง์ ์ ์ธ ๋ฐ์ดํฐ ๊ตํ:
TextEncoder
/TextDecoder
๋ ์๋ ๋ฒํผ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ JavaScript ๊ฐ์ฒด(JSON ๋๋ TypedArrays ๋ฑ)๋ฅผ Wasm ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ก ์๋ ์ง๋ ฌํํ๋ ๋์ , ๊ฐ๋ฐ์๋ ์ด์ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ง์ ์ ๋ฌํ ์ ์์ต๋๋ค. Wasm ํจ์๋ JavaScript ๋ฌธ์์ด, ๋ฐฐ์ด, ๊ฐ์ฒด๋ฅผ ๊ฐ๋จํ ๋ฐ๊ณ ๋ฐํํ ์ ์์ด ํตํฉ์ด ํจ์ฌ ๋ ๋ค์ดํฐ๋ธํ๊ณ ์ง๊ด์ ์ผ๋ก ๋๊ปด์ง๋๋ค. - ์ค๋ฒํค๋ ๊ฐ์: ํ์ ๋ณํ์๋ ์ฌ์ ํ ์ค๋ฒํค๋๊ฐ ์์ง๋ง, ์ด๋ ๋ฐํ์๊ณผ ์์ฑ๋ ๋ฐ์ธ๋ฉ์ ์ํด ํฌ๊ฒ ์ต์ ํ๋๊ณ ์ฒ๋ฆฌ๋์ด, ํนํ ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ก์ ๊ฒฝ์ฐ ์๋ ์ง๋ ฌํ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ ํ๋ถํ API: Wasm ๋ชจ๋์ JavaScript์ ๋ ํ๋ถํ๊ณ ํํ๋ ฅ ์๋ API๋ฅผ ๋
ธ์ถํ ์ ์์ผ๋ฉฐ, ๋ ๊ฐ๋ฅ ๊ฐ์ ๋ํ
option
, ๊ตฌ์กฐํ๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ํresult
, ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ํrecord
์ ๊ฐ์ ํ์ ์ ์ฌ์ฉํ์ฌ ํ๋ JavaScript ํจํด๊ณผ ๋ ๊ฐ๊น๊ฒ ์ ๋ ฌ๋ฉ๋๋ค.
์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ Wasm์ ๋ ํจ๊ณผ์ ์ผ๋ก ์คํ๋ก๋ํ๋ฉด์๋ ๊น๋ํ๊ณ ๊ด์ฉ์ ์ธ JavaScript ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ ์ ์์์ ์๋ฏธํ๋ฉฐ, ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์๋ฒ ์ฌ์ด๋ WebAssembly (๋ธ๋ผ์ฐ์ ์ธ๋ถ์ Wasm)
์ข ์ข "Wasm ํด๋ผ์ฐ๋" ๋๋ "์ฃ์ง ์ปดํจํ "์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋ฒ ์ฌ์ด๋ WebAssembly์ ๋ถ์์ ์๋ง๋ ์ธํฐํ์ด์ค ํ์ ์ด ๊ฐ์ฅ ํ์ ์ ์ธ ์ ์ฌ๋ ฅ์ ๋ฐํํ๋ ๊ณณ์ผ ๊ฒ์ ๋๋ค. WASI๊ฐ ์์คํ ์์ค์ ์ ๊ทผ์ ์ ๊ณตํ๊ณ ์ธํฐํ์ด์ค ํ์ ์ด ํ๋ถํ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ, Wasm์ ๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ํ ์ง์ ์ผ๋ก ๋ณดํธ์ ์ด๊ณ , ๊ฐ๋ฒผ์ฐ๋ฉฐ, ์์ ํ ๋ฐํ์์ด ๋ฉ๋๋ค:
- ์ด์ ๊ฐ๋ฅํ ๋ง์ดํฌ๋ก์๋น์ค: ์ด๋ค ์ธ์ด๋ก๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ , ์ด๋ฅผ Wasm ์ปดํฌ๋ํธ๋ก ์ปดํ์ผํ ํ, ๋ชจ๋ Wasm ํธํ ๋ฐํ์(์: Wasmtime, Wasmer, WAMR)์ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ ๋ค๋ฅธ ์ด์ ์ฒด์ , ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด, ์ฃ์ง ์ฅ์น ์ ๋ฐ์ ๊ฑธ์ณ ๋นํ ๋ฐ ์๋ ์ด์์ฑ์ ์ ๊ณตํ์ฌ, ๋ฒค๋ ์ข ์์ ์ค์ด๊ณ ๊ธ๋ก๋ฒ ์ธํ๋ผ์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๋จ์ํํฉ๋๋ค.
- ์์ ํ ์๋น์คํ ํจ์(FaaS): Wasm์ ๊ณ ์ ํ ์๋๋ฐ์ฑ๊ณผ ์ธํฐํ์ด์ค ํ์ ์ ์ ํํ ๊ณ์ฝ์ด ๊ฒฐํฉ๋์ด FaaS ํ๋ซํผ์ ์ด์์ ์ ๋๋ค. ํจ์๋ ๊ฒฉ๋ฆฌ๋๊ณ ์์ ํ ํ๊ฒฝ์์ ์ต์ํ์ ์ฝ๋ ์คํํธ ์๊ฐ์ผ๋ก ์คํ๋ ์ ์์ด, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ์๋ฒฝํฉ๋๋ค. ๊ธฐ์ ์ Python, Rust, Go๋ก ์์ฑ๋ ํจ์๋ฅผ ๋ชจ๋ Wasm์ ํตํด ์ํธ์์ฉํ๋๋ก ๋ฐฐํฌํ์ฌ ํจ์จ์ ์ธ ๋ฆฌ์์ค ํ์ฉ๊ณผ ๊ฐ๋ ฅํ ๋ณด์ ๋ณด์ฅ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ์ฃ์ง์์์ ๊ณ ์ฑ๋ฅ: Wasm์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ๊ณผ ์์ ์ค์น ๊ณต๊ฐ์ ๋ฆฌ์์ค๊ฐ ์ ํ๋๊ณ ๋ฎ์ ์ง์ฐ ์๊ฐ์ด ์ค์ํ ์ฃ์ง ์ปดํจํ ์๋๋ฆฌ์ค์ ์๋ฒฝํฉ๋๋ค. ์ธํฐํ์ด์ค ํ์ ์ ํตํด ์ฃ์ง ํจ์๋ ๋ก์ปฌ ์ผ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ๋ค๋ฅธ ์ฃ์ง ์ปดํฌ๋ํธ์ ์ํํ๊ฒ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ค์ ๋ ๊ฐ๊น๊ฒ ์ฒ๋ฆฌํ๊ณ ์ค์ ์ง์ค์ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ๋ํ ์์กด๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ํฌ๋ก์ค ํ๋ซํผ ๋๊ตฌ ๋ฐ CLI ์ ํธ๋ฆฌํฐ: ์๋น์ค๋ฅผ ๋์ด, ์ธํฐํ์ด์ค ํ์ ์ ๋จ์ผ Wasm ๋ฐ์ด๋๋ฆฌ๋ก ๋ฐฐํฌ๋ ์ ์๋ ๊ฐ๋ ฅํ ๋ช ๋ น์ค ๋๊ตฌ ๊ตฌ์ถ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ์ด ๋๊ตฌ๋ Wasm ๋ฐํ์์ด ์๋ ๋ชจ๋ ๊ธฐ๊ณ์์ ๋ค์ดํฐ๋ธ๋ก ์คํ๋์ด ๋ค์ํ ๊ฐ๋ฐ์ ํ๊ฒฝ์์ ๋ฐฐํฌ์ ์คํ์ ๋จ์ํํฉ๋๋ค.
์ด๋ฌํ ํจ๋ฌ๋ค์ ์ ํ์ ๋ฐฑ์๋ ๋ก์ง์ด ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ์ฒ๋ผ ์ด์ ๊ฐ๋ฅํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํด์ง๋ ๋ฏธ๋๋ฅผ ์ฝ์ํ๋ฉฐ, ์ ์ธ๊ณ์ ์ผ๋ก ๋ ๋ฏผ์ฒฉํ๊ณ ๋น์ฉ ํจ์จ์ ์ธ ํด๋ผ์ฐ๋ ๋ฐฐํฌ๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค.
ํ๋ฌ๊ทธ์ธ ์์คํ ๋ฐ ํ์ฅ์ฑ
์ธํฐํ์ด์ค ํ์ ์ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ ํ๋ฌ๊ทธ์ธ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์๋ฒฝํ๊ฒ ์ ํฉํฉ๋๋ค. ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ WIT๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ, ์ธ๋ถ ๊ฐ๋ฐ์๋ Wasm์ผ๋ก ์ปดํ์ผ๋๋ ๋ชจ๋ ์ธ์ด๋ก ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ ์ ์์ต๋๋ค. ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ํ๋ฌ๊ทธ์ธ: Java๋ก ์์ฑ๋ ํต์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์๋ Wasm ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ ํ Rust, Python ๋๋ C++๋ก ์์ฑ๋ ํ๋ฌ๊ทธ์ธ์ ๋ก๋ํ๊ณ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ฌ๊ทธ์ธ ์์ฑ์ ์ํ ๊ฐ๋ฐ์ ์ํ๊ณ๋ฅผ ๋ํ๋๋ค.
- ํฅ์๋ ๋ณด์: Wasm์ ์๋๋ฐ์ค๋ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ์ฌ, ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ํ์ฉ๋์ง ์๋ ํ ๋ฏผ๊ฐํ ํธ์คํธ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ์ ์์ ์ด๊ฑฐ๋ ๋ฒ๊ทธ๊ฐ ์๋ ํ๋ฌ๊ทธ์ธ์ด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ํฌ ์ํ์ ํฌ๊ฒ ์ค์ ๋๋ค.
- ํซ ์ค์ํ ๋ฐ ๋์ ๋ก๋ฉ: Wasm ๋ชจ๋์ ๋์ ์ผ๋ก ๋ก๋ ๋ฐ ์ธ๋ก๋๋ ์ ์์ด, ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์์ํ์ง ์๊ณ ๋ ํ๋ฌ๊ทธ์ธ์ ํซ ์ค์ํํ ์ ์์ต๋๋ค. ์ด๋ ์ฅ์๊ฐ ์คํ๋๋ ์๋น์ค๋ ๋ํํ ํ๊ฒฝ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ์ ํจ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ํ์ฅํ๊ฑฐ๋, ๋ฏธ๋์ด ํ์ดํ๋ผ์ธ์ ํน์ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ์ธ์ด๋ก ์์ฑ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๋ง์ถคํ IDE ๋ฐ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๋ณด์ ๋ค์ค ์ธ์ด ํ๊ฒฝ
WebAssembly์ ๊ณ ์ ํ ๋ณด์ ๋ชจ๋ธ๊ณผ ์ธํฐํ์ด์ค ํ์ ์ ์ํด ๊ฐ์ ๋๋ ์๊ฒฉํ ๊ณ์ฝ์ด ๊ฒฐํฉ๋์ด, ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ฑฐ๋ ๋ค์ํ ์์ค์ ์ปดํฌ๋ํธ๋ฅผ ํตํฉํ๊ธฐ ์ํ ๋งค๋ ฅ์ ์ธ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค:
- ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์: Wasm ๋ชจ๋์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ ๋๊ฐ ์ ์๋์ง, ์ด๋ค ํจ์๊ฐ ํธ์ถ๋ ์ ์๋์ง๋ฅผ ์ ํํ ์ ์ํจ์ผ๋ก์จ ์ธํฐํ์ด์ค ํ์ ์ ๊ณต๊ฒฉ ํ๋ฉด์ ์ต์ํํฉ๋๋ค. ์์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด๋ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ์จ๊ฒจ์ง ์ฌ์ด๋ ์ฑ๋์ด ์์ต๋๋ค.
- ๊ฒฝ๊ณ์์์ ํ์ ์์ ์ฑ: ์ธํฐํ์ด์ค ํ์ ์ ์ํด ๊ฐ์ ๋๋ ํ์ ๊ฒ์ฌ๋ ๊ฒฝ๊ณ์์ ๋ง์ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ(์: ์๋ชป๋ ๋ฐ์ดํฐ ํ์)๋ฅผ ํฌ์ฐฉํ์ฌ, ์ด๋ฌํ ์ค๋ฅ๊ฐ Wasm ๋ชจ๋์ด๋ ํธ์คํธ๋ก ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ์ฒด ์์คํ ์์ ์ฑ์ ํฅ์์ํต๋๋ค.
- ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ: ์ธํฐํ์ด์ค ํ์ ์ ์์กดํ๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ฆฌ์์ค(์: ํ์ผ ์์คํ , ๋คํธ์ํฌ)์ ๋ํ ์ ๊ทผ์ ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํ๊ณ ์ ํํ ์ ์์ด, ์ปดํฌ๋ํธ๊ฐ ์ต์ ๊ถํ ์์น์ ๋ฐ๋ผ ์ ๋์ ์ผ๋ก ํ์ํ ๊ถํ๋ง ๊ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด๋ Wasm๊ณผ ์ธํฐํ์ด์ค ํ์ ์ ๋ฉํฐํ ๋ํธ ํด๋ผ์ฐ๋ ํ๊ฒฝ, ์ค๋งํธ ๊ณ์ฝ ๋๋ ๊ธฐ๋ฐ ์ปดํจํ ๊ณผ ๊ฐ์ด ๊ฐ๋ ฅํ ๋ณด์ ๋ณด์ฅ์ด ํ์ํ ์๋๋ฆฌ์ค์ ํนํ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋ญ๋๋ค.
๊ณผ์ ์ ์์ผ๋ก์ ๊ธธ
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ด ๊ธฐ๋ ๋น์ ์ธ ๋์ฝ์ ์๋ฏธํ์ง๋ง, ์ด ๊ธฐ์ ์ ์ฌ์ ํ ์งํํ๊ณ ์์ต๋๋ค. ๊ฐ๋ ฅํ์ง๋ง ์ด๊ธฐ ๋จ๊ณ์ ์๋ ๋ชจ๋ ํ์ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ณผ์ ์ ๋ฏธ๋ ๊ฐ๋ฐ ์์ญ์ด ์์ต๋๋ค.
์ฑ์๋์ ๋๊ตฌ์ ์งํ
์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ ์ธํฐํ์ด์ค ํ์ ์ฌ์์ WebAssembly ์ํน ๊ทธ๋ฃน์ ์ํด ํ๋ฐํ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค:
- ํ์คํ ์งํ ์ค: ํต์ฌ ๊ฐ๋ ์ ์์ ์ ์ด์ง๋ง, ์ฌ์์ด ์ฑ์ํ๊ณ ๋ ๊ด๋ฒ์ํ ๊ฒํ ๋ฅผ ๊ฑฐ์น๋ฉด์ ์ผ๋ถ ์ธ๋ถ ์ฌํญ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
- ๋๊ตฌ์ ๋น ๋ฅธ ๊ฐ์ :
wit-bindgen
๊ณผ ๊ฐ์ ํ๋ก์ ํธ์ ๋ค์ํ Wasm ๋ฐํ์์ด ์๋นํ ์ง์ ์ ์ด๋ฃจ๊ณ ์์ง๋ง, ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ณต์กํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ํฌ๊ด์ ์ธ ์ง์์ ์ฌ์ ํ ๊ตฌ์ถ ์ค์ ๋๋ค. ๊ฐ๋ฐ์๋ ํ์ ์ธ์ด๋ ํน์ ํตํฉ ํจํด์ ๋ํด ๋ฏธํกํ ๋ถ๋ถ์ด๋ ๋๋ฝ๋ ๊ธฐ๋ฅ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. - ๋๋ฒ๊น ๋ฐ ํ๋กํ์ผ๋ง: ์ฌ๋ฌ ์ธ์ด์ ๋ฐํ์์ ๊ฑธ์ณ ์ํธ์์ฉํ๋ Wasm ์ปดํฌ๋ํธ๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ํ์ ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ํํ๊ฒ ์ดํดํ๋ ๊ณ ๊ธ ๋๋ฒ๊น ๋๊ตฌ, ํ๋กํ์ผ๋ฌ, IDE ํตํฉ์ ์์ง ํ๋ฐํ ๊ฐ๋ฐ ์ค์ ๋๋ค.
์ํ๊ณ๊ฐ ์ฑ์ํจ์ ๋ฐ๋ผ ๋ ๊ฒฌ๊ณ ํ ๋๊ตฌ, ํฌ๊ด์ ์ธ ๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ๋ ๋์ ์ปค๋ฎค๋ํฐ ์ฑํ์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฌ๊ฒ ๋จ์ํํ ๊ฒ์ ๋๋ค.
๋ณํ์ ๋ํ ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
์ธํฐํ์ด์ค ํ์ ์ด ์๋ ์ง๋ ฌํ์ ๋นํด ๋ฐ์ดํฐ ์ ์ก์ ํฌ๊ฒ ์ต์ ํํ์ง๋ง, ์ธ์ด์ ๋ค์ดํฐ๋ธ ํํ๊ณผ ํ์ค Wasm ์ธํฐํ์ด์ค ํ์ ํํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๋ฐ๋ ๋ณธ์ง์ ์ผ๋ก ๋น์ฉ์ด ๋ฐ๋ฆ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๋ณต์ฌ, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ฐ์ดํฐ ์ฌํด์์ด ํฌํจ๋ฉ๋๋ค.
- ์ ๋ก ์นดํผ(Zero-copy) ๊ณผ์ : ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ํนํ ๋ฐฐ์ด์ด๋ ๋ฐ์ดํธ ๋ฒํผ์ ๊ฒฝ์ฐ, Wasm ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ง์ ํ ์ ๋ก ์นดํผ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ฌ์ฑํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ง๋ง, ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ณต์ฌ๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์์ค ํธ๋ค์ ๋ํ ๊ณ ๊ธ ๊ธฐ์ ์ ํ์ํ๊ณ ์์ต๋๋ค.
- ์ฑ๋ฅ ํซ์คํ: ๋งค์ฐ ๋น๋ฒํ ๊ฒฝ๊ณ ๊ต์ฐจ์ ๋๋์ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ๊ฐ์ง ๊ณ ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฐ๋ฐ์๊ฐ ๋ณํ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค๋ฅผ ์ ์คํ๊ฒ ํ๋กํ์ผ๋งํ๊ณ ์ต์ ํํด์ผ ํฉ๋๋ค.
๋ชฉํ๋ ์ด๋ฌํ ๋ณํ์ ๋๋ค์์ ์ฌ์ฉ ์ฌ๋ก์ ์ถฉ๋ถํ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ฉฐ, ๋ฐํ์๊ณผ ๋ฐ์ธ๋ฉ ์์ฑ๊ธฐ์ ์ง์์ ์ธ ์ต์ ํ๋ ์ด ์ธก๋ฉด์ ๊ณ์ ๊ฐ์ ํ ๊ฒ์ ๋๋ค.
์ํ๊ณ ์ฑํ ๋ฐ ๊ต์ก
์ธํฐํ์ด์ค ํ์ ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด ์์ ํ ์ ์ฌ๋ ฅ์ ๋ฌ์ฑํ๋ ค๋ฉด ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ปค๋ฎค๋ํฐ ์ ๋ฐ์ ๊ฑธ์น ๊ด๋ฒ์ํ ์ฑํ์ด ์ค์ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ค์์ด ํ์ํฉ๋๋ค:
- ์ธ์ด๋ณ ์ง์นจ: ๋ค๋ฅธ ์ธ์ด์์ ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ ์์ , ํํ ๋ฆฌ์ผ, ๋ชจ๋ฒ ์ฌ๋ก ์ ๊ณต(์: Rust ๊ตฌ์กฐ์ฒด๋ฅผ WIT ๋ ์ฝ๋๋ก ๋ ธ์ถํ๋ ๋ฐฉ๋ฒ, ๋๋ Python์์ Go ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ).
- ์ปค๋ฎค๋ํฐ ํ๋ ฅ: ์ธ์ด ์ ์ง ๊ด๋ฆฌ์, ๋ฐํ์ ๊ฐ๋ฐ์, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๊ฐ์ ํ๋ ฅ์ ์ด์งํ์ฌ ํ์ค์ ์ผ๊ด๋ ํด์๊ณผ ๊ตฌํ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ฐ๋ฐ์ ๊ต์ก: ์ด ์๋ก์ด ํจ๋ฌ๋ค์์ ์ด์ ๊ณผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ ํต์ ์ธ ๋ชจ๋๋ฆฌ์ ์ฌ๊ณ ์์ ๋ฒ์ด๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ ํํ๋๋ก ๋์ต๋๋ค.
๋ ๋ง์ ์ ๋ ๊ธฐ์ ๊ณผ ์คํ ์์ค ํ๋ก์ ํธ๊ฐ WebAssembly์ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ฑํํจ์ ๋ฐ๋ผ, ์ํ๊ณ๋ ์์ฐ์ค๋ฝ๊ฒ ์ฑ์ฅํ์ฌ ๋ ๋ง์ ์์ ๋ฅผ ์ ๊ณตํ๊ณ ์ฑํ์ ๊ฐ์ํํ ๊ฒ์ ๋๋ค.
๋ฏธ๋ ๋ฐฉํฅ
WebAssembly ๋ก๋๋งต์ ์ผ์ฌ์ฐจ๋ฉฐ, ์ธํฐํ์ด์ค ํ์ ์ ํจ์ฌ ๋ ๋ฐ์ ๋ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ๋ ๋๋ค๋์ ๋๋ค:
- ๊ณ ๊ธ ๋ฆฌ์์ค ๊ด๋ฆฌ: ์ปดํฌ๋ํธ์ ํธ์คํธ ๊ฐ์ ํจ์ฌ ๋ ์ ๊ตํ ๋ฆฌ์์ค ๊ณต์ ๋ฐ ์์ ๊ถ ํจํด์ ํ์ฉํ๊ธฐ ์ํ ๋ฆฌ์์ค ์ฒ๋ฆฌ์ ์ถ๊ฐ ๊ฐ์ .
- ๊ฐ๋น์ง ์ปฌ๋ ์ ํตํฉ: Wasm ๋ชจ๋์ด ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ๊ด๋ฆฌ๋๋ ํ์ ์ ๋ ธ์ถํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํ์ฌ JavaScript, Java, C#๊ณผ ๊ฐ์ ์ธ์ด์์ ์ํธ์ด์ฉ์ฑ์ ๋จ์ํํ ๊ฐ๋ฅ์ฑ.
- ์์ ํ ๋ค์ค ๊ฐ ๋ฐ ๊ผฌ๋ฆฌ ํธ์ถ: ํจ์ ํธ์ถ๊ณผ ๋ฐ์ดํฐ ํ๋ฆ์ ๋์ฑ ์ต์ ํํ ์ ์๋ ํต์ฌ Wasm ์ฌ์์ ํฅ์.
- ๋ณดํธ์ OS๋ก์์ Wasm: ์ฅ๊ธฐ์ ์ธ ๋น์ ์ ์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ ์ธํฐํ์ด์ค ํ์ ์ ๊ฐ์ถ Wasm์ ์์ ์๋ฒ ๋๋ ์ฅ์น์์๋ถํฐ ๊ฑฐ๋ํ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ฒ์ ์ํ ์ ์ฌ์ ์ธ ๋ณดํธ์ ์ด์ ์ฒด์ ๋๋ ๋ฐํ์์ผ๋ก ์์น์์ผ, ๋ชจ๋ ์ปดํจํ ๊ธฐํ์ ๊ฑธ์ณ ์ผ๊ด๋ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๋ฏธ๋ ๊ฐ๋ฐ์ WebAssembly๋ฅผ ํจ์ฌ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ ๋น์ฟผํฐ์คํ ๊ธฐ์ ๋ก ๋ง๋ค ๊ฒ์ ์ฝ์ํ๋ฉฐ, ์ง์ ์ผ๋ก ์ด์ ๊ฐ๋ฅํ๊ณ ์ํธ์ด์ฉ ๊ฐ๋ฅํ ์ํํธ์จ์ด์ ๊ธฐ๋ฐ์ผ๋ก์์ ์ญํ ์ ๋์ฑ ๊ณต๊ณ ํ ํ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ์ง์ ํ ์ํธ์ด์ฉ ๊ฐ๋ฅํ ๋ฏธ๋์ ์ฝ์
WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ๋จ์ํ ๊ธฐ์ ์ฌ์์ ํจ์ฌ ๋ฐ์ด๋์ด, ์ฐ๋ฆฌ๊ฐ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ํ๊ณ , ๊ตฌ์ถํ๊ณ , ๋ฐฐํฌํ๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ธ ํจ๋ฌ๋ค์ ์ ํ์ ์๋ฏธํฉ๋๋ค. ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ํ์คํ๋๊ณ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํจ์ผ๋ก์จ, ์ด๋ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๊ณผ์ ์ค ํ๋์ธ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์คํ ํ๊ฒฝ ๊ฐ์ ์ํํ ํต์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ด ํ์ ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค:
- ํด๋ฆฌ๊ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ: ๊ฐ ๋ถ๋ถ์ด ํด๋น ์ธ์ด์ ์ต์ ํ๋์ด ํ์ ์ ์ด์งํ๊ณ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ํ๊ณ์ ๊ฐ์ ์ ํ์ฉํฉ๋๋ค.
- ์ง์ ์ผ๋ก ์ด์ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ์์ฑ: ์น, ํด๋ผ์ฐ๋, ์ฃ์ง ๋๋ ์๋ฒ ๋๋ ์ฅ์น์์ ํจ์จ์ ์ผ๋ก ์คํ๋ ์ ์์ด ์ ํต์ ์ธ ๋ฐฐํฌ ์ฅ๋ฒฝ์ ํ๋ญ ๋๋ค.
- ๋ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ ์์คํ ์ค๊ณ: ๋ชจ๋ ๊ฒฝ๊ณ์์ ๋ช ํํ๊ณ ํ์ ์์ ํ ๊ณ์ฝ์ ๊ฐ์ ํ๊ณ Wasm์ ๊ณ ์ ํ ์๋๋ฐ์ฑ์ ํ์ฉํฉ๋๋ค.
- ๊ฐ๋ฐ ์ฃผ๊ธฐ ๊ฐ์ํ: ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ค์ด๊ณ ์ธ์ด ๋ฐ์ธ๋ฉ์ ์๋ ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ํต์ฌ์ผ๋ก ํ๋ WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ํํธ์จ์ด ์ปดํฌ๋ํธ๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ๋น๋ฉ ๋ธ๋ก์ฒ๋ผ ์ฝ๊ฒ ๋ฐ๊ฒฌ, ์ฌ์ฌ์ฉ, ๊ตฌ์ฑ๋ ์ ์๋ ๋ฏธ๋๋ฅผ ์ํ ๊ธฐ๋ฐ์ ๋ง๋ จํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ด ํตํฉ์ ๋ณต์ก์ฑ๊ณผ ์จ๋ฆํ๋ ๋์ , ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์์ ๋๊ตฌ๋ก ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ง์คํ ์ ์๋ ๋ฏธ๋์ ๋๋ค. ์ด ๊ธฐ์ ์ด ๊ณ์ ์ฑ์ํจ์ ๋ฐ๋ผ, ์์ฌํ ์ฌ์ง ์์ด ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ์งํ์ ์ฌํธํ๊ณ , ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์ ๋ก ์๋ ์ํธ์ด์ฉ์ฑ๊ณผ ํจ์จ์ฑ์ ์๋๋ฅผ ์ด ๊ฒ์ ๋๋ค.
WebAssembly ์ฌ์์ ํ์ํ๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๋ก ์คํํ๋ฉฐ, ํ๊ธฐ์ฐฌ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ์ธ์. ์ง์ ์ผ๋ก ๋ณดํธ์ ์ด๊ณ ์ํธ์ด์ฉ ๊ฐ๋ฅํ ์ปดํจํ ์ ๋ฏธ๋๊ฐ ๋ง๋ค์ด์ง๊ณ ์์ผ๋ฉฐ, WebAssembly ์ธํฐํ์ด์ค ํ์ ์ ๊ทธ ํฅ๋ฏธ๋ก์ด ์ฌ์ ์ ์ด์์ ๋๋ค.