WebAssembly์ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ผ๋ก ์ฑ ์ฑ๋ฅ์ ๊ทน๋ํํ์ธ์. memory.copy, memory.fill ๋ฑ ํต์ฌ ๋ช ๋ น์ด๋ฅผ ํตํ ํจ์จ์ ์ด๊ณ ์์ ํ ๋ฐ์ดํฐ ์กฐ์๋ฒ์ ๋ค๋ฃน๋๋ค.
์ฑ๋ฅ ์ ๊ธ ํด์ : WebAssembly ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ์ธต ๋ถ์
WebAssembly(Wasm)๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋๋ํ ์์นํ๋ ๊ณ ์ฑ๋ฅ์ ์๋๋ฐ์ค ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ ์น ๊ฐ๋ฐ์ ํ์ ์ ๊ฐ์ ธ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ C++, Rust, Go์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์๋๋ก ์ง์ ์คํํ ์ ์์ต๋๋ค. Wasm์ ๊ฐ๋ ฅํจ์ ํต์ฌ์๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ(linear memory)๋ผ๊ณ ์๋ ค์ง ํฌ๊ณ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ด๋ผ๋ ๋จ์ํ๋ฉด์๋ ํจ๊ณผ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์กฐ์ํ๋ ๊ฒ์ ์ฑ๋ฅ ์ต์ ํ์ ์ค์ํ ์ด์ ์ด์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ WebAssembly ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ด ๋ฑ์ฅํฉ๋๋ค.
์ด ์ฌ์ธต ๋ถ์์์๋ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ณต์กํ ๋ด์ฉ์ ์๋ดํ๋ฉฐ, ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง, ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์๋ค์ด ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋น ๋ฅด๊ณ , ๋ ์์ ํ๋ฉฐ, ๋ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ด๋ป๊ฒ ํ์ ์ค์ด์ฃผ๋์ง ์ค๋ช ํฉ๋๋ค. ์๋ จ๋ ์์คํ ํ๋ก๊ทธ๋๋จธ์ด๋ ์ฑ๋ฅ์ ํ๊ณ๋ฅผ ๋์ด์๊ณ ์ ํ๋ ์น ๊ฐ๋ฐ์์ด๋ , ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํ๋ WebAssembly๋ฅผ ๋ง์คํฐํ๋ ๋ฐ ํต์ฌ์ ๋๋ค.
๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ด์ : ๋ฐ์ดํฐ ์กฐ์์ ์ด๋ ค์
๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ ์ค์์ฑ์ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ๋จผ์ ๊ทธ๊ฒ์ด ๋์ ๋๊ธฐ ์ ์ ์ํฉ์ ์ดํดํด์ผ ํฉ๋๋ค. WebAssembly์ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ ํธ์คํธ ํ๊ฒฝ(์: ์๋ฐ์คํฌ๋ฆฝํธ VM)์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ๋ ์์ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋๋ค. ์ด๋ฌํ ์๋๋ฐ์ฑ์ ๋ณด์์ ๋งค์ฐ ์ค์ํ์ง๋ง, ์ด๋ Wasm ๋ชจ๋ ๋ด์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ด Wasm ์ฝ๋ ์์ฒด์ ์ํด ์คํ๋์ด์ผ ํจ์ ์๋ฏธํ์ต๋๋ค.
์๋ ๋ฃจํ์ ๋นํจ์จ์ฑ
์ ํ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ถ๋ถ์์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก 1MB ์ด๋ฏธ์ง ๋ฒํผ์ ๊ฐ์ ํฐ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ณต์ฌํด์ผ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ด์ ์๋ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์์ค ์ธ์ด(์: C++ ๋๋ Rust)๋ก ๋ฃจํ๋ฅผ ์์ฑํ๋ ๊ฒ์ด์์ต๋๋ค. ์ด ๋ฃจํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ฉฐ ํ ๋ฒ์ ํ๋์ ์์(์: ๋ฐ์ดํธ ๋จ์ ๋๋ ์๋ ๋จ์)๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๋ค์์ ๊ฐ๋จํ C++ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
void manual_memory_copy(char* dest, const char* src, size_t n) {
for (size_t i = 0; i < n; ++i) {
dest[i] = src[i];
}
}
WebAssembly๋ก ์ปดํ์ผ๋ ๋, ์ด ์ฝ๋๋ ๋ฃจํ๋ฅผ ์ํํ๋ Wasm ๋ช ๋ น์ด ์ํ์ค๋ก ๋ณํ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ช ๊ฐ์ง ์ค์ํ ๋จ์ ์ด ์์์ต๋๋ค:
- ์ฑ๋ฅ ์ค๋ฒํค๋: ๋ฃจํ์ ๊ฐ ๋ฐ๋ณต์๋ ์ฌ๋ฌ ๋ช ๋ น์ด๊ฐ ํฌํจ๋ฉ๋๋ค: ์์ค์์ ๋ฐ์ดํธ๋ฅผ ๋ก๋ํ๊ณ , ๋์์ ์ ์ฅํ๊ณ , ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋ฃจํ๋ฅผ ๊ณ์ํด์ผ ํ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ํฐ ๋ฐ์ดํฐ ๋ธ๋ก์ ๊ฒฝ์ฐ, ์ด๋ ์๋นํ ์ฑ๋ฅ ๋น์ฉ์ผ๋ก ๋์ ๋ฉ๋๋ค. Wasm ์์ง์ ๋์ ์์ค์ ์๋๋ฅผ "๋ณผ" ์ ์์๊ณ , ๋จ์ง ์๊ณ ๋ฐ๋ณต์ ์ธ ์์ ์ ์ฐ์์ผ๋ก๋ง ๋ณด์์ต๋๋ค.
- ์ฝ๋ ํฌ๊ธฐ ์ฆ๊ฐ: ๋ฃจํ ์์ฒด์ ๋ก์ง(์นด์ดํฐ, ๊ฒ์ฌ, ๋ถ๊ธฐ)์ ์ต์ข Wasm ๋ฐ์ด๋๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋จ์ผ ๋ฃจํ๋ ๋ณ๊ฒ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, ์ด๋ฌํ ์์ ์ด ๋ง์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ด๋ฌํ ์ฝ๋ ์ฆ๊ฐ๋ ๋ค์ด๋ก๋ ๋ฐ ์์ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์ต์ ํ ๊ธฐํ ์์ค: ์ต์ CPU์๋ ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ด๋ํ๊ธฐ ์ํ ๊ณ ๋๋ก ์ ๋ฌธํ๋๊ณ ๋งค์ฐ ๋น ๋ฅธ ๋ช
๋ น์ด(์:
memcpy๋ฐmemmove)๊ฐ ์์ต๋๋ค. Wasm ์์ง์ ์ผ๋ฐ์ ์ธ ๋ฃจํ๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ฐ๋ ฅํ ๋ค์ดํฐ๋ธ ๋ช ๋ น์ด๋ฅผ ํ์ฉํ ์ ์์์ต๋๋ค. ์ด๋ ์นดํธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋์๊ด์ ๋ชจ๋ ์ฑ ์ ํ ํ์ด์ง์ฉ ์ฎ๊ธฐ๋ ๊ฒ๊ณผ ๊ฐ์์ต๋๋ค.
์ด๋ฌํ ๋นํจ์จ์ฑ์ ๊ฒ์ ์์ง, ๋น๋์ค ํธ์ง๊ธฐ, ๊ณผํ ์๋ฎฌ๋ ์ดํฐ ๋ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ ์กฐ์์ ํฌ๊ฒ ์์กดํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ๋ณ๋ชฉ ํ์์ด์์ต๋๋ค.
๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ ๋ฑ์ฅ: ํจ๋ฌ๋ค์์ ์ ํ
WebAssembly ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ์ง์ ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ Wasm ๋ช ๋ น์ด ์ธํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๊ณผ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ๋ฎ์ ์์ค์ ์์ ๋ชจ์์ผ๋ก ํ์ฅํ๋ MVP(์ต์ ๊ธฐ๋ฅ ์ ํ) ์ดํ์ ๊ธฐ๋ฅ์ ๋๋ค.
ํต์ฌ ์์ด๋์ด๋ ๊ฐ๋จํ์ง๋ง ์ฌ์คํฉ๋๋ค: ๋ฒํฌ ์์ ์ WebAssembly ์์ง์ ์์ํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์๋ ์ด์ ์์ง์๊ฒ ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ณต์ฌํ ์ง ์๋ ค์ฃผ๋ ๋์ , ๋จ์ผ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ "์ฃผ์ A์์ ์ฃผ์ B๋ก ์ด 1MB ๋ธ๋ก์ ๋ณต์ฌํด ์ฃผ์ธ์"๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํ๋์จ์ด์ ๋ํ ๊น์ ์ง์์ ๊ฐ์ง Wasm ์์ง์ ์ด ์์ฒญ์ ๊ฐ๋ฅํ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์คํํ ์ ์์ผ๋ฉฐ, ์ข ์ข ์ด๋ฅผ ๋จ์ผ์ ์ด์ต์ ํ๋ ๋ค์ดํฐ๋ธ CPU ๋ช ๋ น์ด๋ก ์ง์ ๋ณํํฉ๋๋ค.
์ด๋ฌํ ๋ณํ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค:
- ์์ฒญ๋ ์ฑ๋ฅ ํฅ์: ์์ ์ด ํจ์ฌ ์งง์ ์๊ฐ์ ์๋ฃ๋ฉ๋๋ค.
- ๋ ์์ ์ฝ๋ ํฌ๊ธฐ: ๋จ์ผ Wasm ๋ช ๋ น์ด๊ฐ ์ ์ฒด ๋ฃจํ๋ฅผ ๋์ฒดํฉ๋๋ค.
- ํฅ์๋ ๋ณด์: ์ด ์๋ก์ด ๋ช ๋ น์ด๋ค์ ๋ด์ฅ๋ ๊ฒฝ๊ณ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ด ํ ๋น๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ๋ถ์ ์์น๋ก ๋๋ ์์น์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ค๊ณ ํ๋ฉด, ์์ ์ ํธ๋ฉ(๋ฐํ์ ์ค๋ฅ ๋ฐ์)์ ํตํด ์์ ํ๊ฒ ์คํจํ์ฌ ์ํํ ๋ฉ๋ชจ๋ฆฌ ์์๊ณผ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
ํต์ฌ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ๋ช ๋ น์ด ๋๋ฌ๋ณด๊ธฐ
์ด ์ ์์ ๋ช ๊ฐ์ง ์ฃผ์ ๋ช ๋ น์ด๋ฅผ ๋์ ํฉ๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ๋ค, ๊ทธ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์ ๊ทธ๋ ๊ฒ ์ํฅ๋ ฅ์ด ํฐ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
memory.copy: ๊ณ ์ ๋ฐ์ดํฐ ์ด๋๊ธฐ
์ด๊ฒ์ ๋จ์ฐ ์ด ์ ์์ ํต์ฌ ๊ธฐ๋ฅ์
๋๋ค. memory.copy๋ C์ ๊ฐ๋ ฅํ memmove ํจ์์ ํด๋นํ๋ Wasm ๋ช
๋ น์ด์
๋๋ค.
- ์๊ทธ๋์ฒ (WAT, WebAssembly ํ
์คํธ ํ์):
(memory.copy (dest i32) (src i32) (size i32)) - ๊ธฐ๋ฅ: ๋์ผํ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์์ค ์คํ์
src์์ ๋์ ์คํ์ dest์ผ๋กsize๋ฐ์ดํธ๋ฅผ ๋ณต์ฌํฉ๋๋ค.
memory.copy์ ์ฃผ์ ํน์ง:
- ๊ฒน์นจ ์ฒ๋ฆฌ: ๊ฒฐ์ ์ ์ผ๋ก,
memory.copy๋ ์์ค์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๊ฒ์ดmemcpy๊ฐ ์๋memmove์ ์ ์ฌํ ์ด์ ์ ๋๋ค. ์์ง์ ๋นํ๊ดด์ ์ธ ๋ฐฉ์์ผ๋ก ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ๋ณด์ฅํ๋ฉฐ, ์ด๋ ๊ฐ๋ฐ์๊ฐ ๋ ์ด์ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ ๋ณต์กํ ์ธ๋ถ ์ฌํญ์ ๋๋ค. - ๋ค์ดํฐ๋ธ ์๋: ์์ ์ธ๊ธํ๋ฏ์ด, ์ด ๋ช ๋ น์ด๋ ์ผ๋ฐ์ ์ผ๋ก ํธ์คํธ ๋จธ์ ์ ์ํคํ ์ฒ์์ ๊ฐ๋ฅํ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๊ตฌํ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค.
- ๋ด์ฅ๋ ์์ ์ฑ: ์์ง์
src์์src + size๊น์ง, ๊ทธ๋ฆฌ๊ณdest์์dest + size๊น์ง์ ์ ์ฒด ๋ฒ์๊ฐ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝ๊ณ ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค. ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ ๊ทผ์ ์ฆ๊ฐ์ ์ธ ํธ๋ฉ์ ๋ฐ์์์ผ, ์๋ C ์คํ์ผ ํฌ์ธํฐ ๋ณต์ฌ๋ณด๋ค ํจ์ฌ ์์ ํฉ๋๋ค.
์ค์ฉ์ ์ํฅ: ๋น๋์ค๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ด๋ ๋คํธ์ํฌ ๋ฒํผ์์ ๋์คํ๋ ์ด ๋ฒํผ๋ก ๋น๋์ค ํ๋ ์์ ๋ณต์ฌํ๋ ์์ ์ ๋๋ฆฐ ๋ฐ์ดํธ ๋จ์ ๋ฃจํ ๋์ ๋จ์ผ์, ์์์ ์ด๋ฉฐ, ๋งค์ฐ ๋น ๋ฅธ ๋ช ๋ น์ด๋ก ์ํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
memory.fill: ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ
์ข ์ข ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํน์ ๊ฐ์ผ๋ก ์ด๊ธฐํํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฒํผ๋ฅผ ๋ชจ๋ 0์ผ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์๊ทธ๋์ฒ (WAT):
(memory.fill (dest i32) (val i32) (size i32)) - ๊ธฐ๋ฅ: ๋์ ์คํ์
dest์์ ์์ํ๋size๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์val์ ์ง์ ๋ ๋ฐ์ดํธ ๊ฐ์ผ๋ก ์ฑ์๋๋ค.
memory.fill์ ์ฃผ์ ํน์ง:
- ๋ฐ๋ณต์ ์ต์ ํ: ์ด ์์
์ C์
memset์ ํด๋นํ๋ Wasm ๋ช ๋ น์ด์ ๋๋ค. ๋์ ์ฐ์ ์์ญ์ ๋์ผํ ๊ฐ์ ์ฐ๋ ๋ฐ ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. - ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก: ์ฃผ์ ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 0์ผ๋ก ๋ง๋๋ ๊ฒ(์ค๋๋ ๋ฐ์ดํฐ ๋ ธ์ถ์ ํผํ๊ธฐ ์ํ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก)์ด์ง๋ง, ๊ทธ๋ํฝ ๋ฒํผ๋ฅผ `0xFF`๋ก ์ค์ ํ๋ ๋ฑ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ์ด๊ธฐ ์ํ๋ก ์ค์ ํ๋ ๋ฐ๋ ์ ์ฉํฉ๋๋ค.
- ๋ณด์ฅ๋ ์์ ์ฑ:
memory.copy์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๊ฒฉํ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.
์ค์ฉ์ ์ํฅ: C++ ํ๋ก๊ทธ๋จ์ด ์คํ์ ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ๋ฉค๋ฒ๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ ๋, ์ต์ Wasm ์ปดํ์ผ๋ฌ๋ ๊ฐ๋ณ ์ ์ฅ ๋ช
๋ น์ด ์๋ฆฌ์ฆ๋ฅผ ๋จ์ผ์ ํจ์จ์ ์ธ memory.fill ์์
์ผ๋ก ๋์ฒดํ์ฌ ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ธ์คํด์คํ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
ํจ์๋ธ ์ธ๊ทธ๋จผํธ: ์ฃผ๋ฌธํ ๋ฐ์ดํฐ ๋ฐ ํ ์ด๋ธ
์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์กฐ์ ์ธ์๋, ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ Wasm ๋ชจ๋์ด ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํ์ ํ์ต๋๋ค. ์ด์ ์๋ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ(์ ํ ๋ฉ๋ชจ๋ฆฌ์ฉ)์ ์๋ฆฌ๋จผํธ ์ธ๊ทธ๋จผํธ(ํจ์ ์ฐธ์กฐ์ ๊ฐ์ ๊ฒ์ ๋ด๋ ํ ์ด๋ธ์ฉ)๊ฐ "์กํฐ๋ธ"ํ์ต๋๋ค. ์ด๋ Wasm ๋ชจ๋์ด ์ธ์คํด์คํ๋ ๋ ๊ทธ ๋ด์ฉ์ด ์๋์ผ๋ก ๋ชฉ์ ์ง๋ก ๋ณต์ฌ๋จ์ ์๋ฏธํ์ต๋๋ค.
์ด๋ ํฌ๊ณ ์ ํ์ ์ธ ๋ฐ์ดํฐ์ ๋นํจ์จ์ ์ด์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ ๋ชจ๋์ด 10๊ฐ์ ๋ค๋ฅธ ์ธ์ด์ ๋ํ ํ์งํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์กํฐ๋ธ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๋จ ํ๋์ ์ธ์ด๋ง ํ์๋ก ํ๋๋ผ๋ ์์ ์ 10๊ฐ ์ธ์ด ํฉ์ด ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ฉ๋๋ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ ํจ์๋ธ ์ธ๊ทธ๋จผํธ๋ฅผ ๋์ ํ์ต๋๋ค.
ํจ์๋ธ ์ธ๊ทธ๋จผํธ๋ Wasm ๋ชจ๋๊ณผ ํจ๊ป ํจํค์ง๋์ง๋ง ์์ ์ ์๋์ผ๋ก ๋ก๋๋์ง ์๋ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ ๋๋ ์๋ฆฌ๋จผํธ ๋ชฉ๋ก์ ๋๋ค. ๊ทธ๋ฅ ๊ฑฐ๊ธฐ์ ์์ผ๋ฉด์ ์ฌ์ฉ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด๋ ๊ฐ๋ฐ์์๊ฒ ์ด ๋ฐ์ดํฐ๊ฐ ์ธ์ ์ด๋์ ๋ก๋๋ ์ง์ ๋ํ ์ธ๋ถํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ ์ด๊ถ์ ๋ถ์ฌํ๋ฉฐ, ์๋ก์ด ๋ช ๋ น์ด ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
memory.init, data.drop, table.init, ๊ทธ๋ฆฌ๊ณ elem.drop
์ด ๋ช ๋ น์ด๊ตฐ์ ํจ์๋ธ ์ธ๊ทธ๋จผํธ์ ํจ๊ป ์๋ํฉ๋๋ค:
memory.init: ์ด ๋ช ๋ น์ด๋ ํจ์๋ธ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค. ์ฌ์ฉํ ์ธ๊ทธ๋จผํธ, ์ธ๊ทธ๋จผํธ์ ์ด๋ ์์น์์ ๋ณต์ฌ๋ฅผ ์์ํ ์ง, ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ ์์น๋ก ๋ณต์ฌํ ์ง, ๊ทธ๋ฆฌ๊ณ ๋ช ๋ฐ์ดํธ๋ฅผ ๋ณต์ฌํ ์ง๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.data.drop: ํจ์๋ธ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ ์ฌ์ฉ์ด ๋๋๋ฉด(์: ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌ๋ ํ),data.drop์ ์ฌ์ฉํ์ฌ ์์ง์ ํด๋น ๋ฆฌ์์ค๋ฅผ ํ์ํ ์ ์์์ ์๋ฆด ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฅ์๊ฐ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ๋๋ค.table.init: ์ด๊ฒ์memory.init์ ํ ์ด๋ธ ๋ฒ์ ์ ๋๋ค. ํจ์๋ธ ์๋ฆฌ๋จผํธ ์ธ๊ทธ๋จผํธ์์ Wasm ํ ์ด๋ธ๋ก ์๋ฆฌ๋จผํธ(์: ํจ์ ์ฐธ์กฐ)๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด๋ ํจ์๊ฐ ํ์์ ๋ฐ๋ผ ๋ก๋๋๋ ๋์ ๋งํน๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ๊ธฐ๋ณธ์ด ๋ฉ๋๋ค.elem.drop:data.drop๊ณผ ์ ์ฌํ๊ฒ, ์ด ๋ช ๋ น์ด๋ ํจ์๋ธ ์๋ฆฌ๋จผํธ ์ธ๊ทธ๋จผํธ๋ฅผ ํ๊ธฐํ์ฌ ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ํด์ ํฉ๋๋ค.
์ค์ฉ์ ์ํฅ: ์ฐ๋ฆฌ์ ๋ค๊ตญ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ด์ ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก ์ค๊ณ๋ ์ ์์ต๋๋ค. 10๊ฐ ์ธ์ด ํฉ ๋ชจ๋๋ฅผ ํจ์๋ธ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ๋ก ํจํค์งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ "์คํ์ธ์ด"๋ฅผ ์ ํํ๋ฉด, ์ฝ๋๋ memory.init์ ์คํํ์ฌ ์คํ์ธ์ด ๋ฐ์ดํฐ๋ง ํ์ฑ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค. "์ผ๋ณธ์ด"๋ก ์ ํํ๋ฉด, ์ด์ ๋ฐ์ดํฐ๋ ๋ฎ์ด์ฐ๊ฑฐ๋ ์ง์ธ ์ ์๊ณ , ์๋ก์ด memory.init ํธ์ถ์ด ์ผ๋ณธ์ด ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค. ์ด๋ฌํ "์ ์" ๋ฐ์ดํฐ ๋ก๋ฉ ๋ชจ๋ธ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์์ ์๊ฐ์ ๋ํญ ์ค์ฌ์ค๋๋ค.
์ค์ ์ธ๊ณ์ ๋ฏธ์น๋ ์ํฅ: ์ ์ธ๊ณ์ ์ผ๋ก ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์ ๋ฐํ๋ ๊ณณ
์ด๋ฌํ ๋ช ๋ น์ด์ ์ด์ ์ ๋จ์ง ์ด๋ก ์ ์ธ ๊ฒ์ด ์๋๋๋ค. ์ด๋ค์ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ง์ ์ธ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ์ฌ์ฉ์์ ์ฅ์น ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ์คํ ๊ฐ๋ฅํ๊ณ ์ฑ๋ฅ์ด ์ข์ ์ฑ์ ์ ๊ณตํฉ๋๋ค.
1. ๊ณ ์ฑ๋ฅ ์ปดํจํ ๋ฐ ๋ฐ์ดํฐ ๋ถ์
๊ณผํ ์ปดํจํ , ๊ธ์ต ๋ชจ๋ธ๋ง, ๋น ๋ฐ์ดํฐ ๋ถ์์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๊ฑฐ๋ํ ํ๋ ฌ๊ณผ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์กฐ์ํฉ๋๋ค. ํ๋ ฌ ์ ์น, ํํฐ๋ง, ์ง๊ณ์ ๊ฐ์ ์์ ์๋ ๊ด๋ฒ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๋ฐ ์ด๊ธฐํ๊ฐ ํ์ํฉ๋๋ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ด๋ฌํ ์์ ์ ์์ญ ๋ฐฐ ๊ฐ์ํํ์ฌ ๋ณต์กํ ๋ธ๋ผ์ฐ์ ๋ด ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ๋ฅผ ํ์ค๋ก ๋ง๋ญ๋๋ค.
2. ๊ฒ์ ๋ฐ ๊ทธ๋ํฝ
ํ๋ ๊ฒ์ ์์ง์ ํ
์ค์ฒ, 3D ๋ชจ๋ธ, ์ค๋์ค ๋ฒํผ, ๊ฒ์ ์ํ์ ๊ฐ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋์์์ด ์ด๋์ํต๋๋ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด Unity ๋ฐ Unreal๊ณผ ๊ฐ์ ์์ง(Wasm์ผ๋ก ์ปดํ์ผํ ๋)์ด ํจ์ฌ ์ ์ ์ค๋ฒํค๋๋ก ์ด๋ฌํ ์์ฐ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ถ ํด์ ๋ ์์ฐ ๋ฒํผ์์ GPU ์
๋ก๋ ๋ฒํผ๋ก ํ
์ค์ฒ๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ ๋จ์ผ์ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ memory.copy๊ฐ ๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ ๊ณณ์ ํ๋ ์ด์ด์๊ฒ ๋ ๋ถ๋๋ฌ์ด ํ๋ ์ ์๋์ ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
3. ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ์ค๋์ค ํธ์ง
Figma(UI ๋์์ธ), ์น์ฉ Adobe Photoshop, ๋ค์ํ ์จ๋ผ์ธ ๋น๋์ค ๋ณํ๊ธฐ์ ๊ฐ์ ์น ๊ธฐ๋ฐ ํฌ๋ฆฌ์์ดํฐ๋ธ ๋๊ตฌ๋ ๊ณ ๊ฐ๋ ๋ฐ์ดํฐ ์กฐ์์ ์์กดํฉ๋๋ค. ์ด๋ฏธ์ง์ ํํฐ๋ฅผ ์ ์ฉํ๊ฑฐ๋, ๋น๋์ค ํ๋ ์์ ์ธ์ฝ๋ฉํ๊ฑฐ๋, ์ค๋์ค ํธ๋์ ๋ฏน์ฑํ๋ ๊ฒ์ ์๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๋ฐ ์ฑ์ฐ๊ธฐ ์์ ์ ํฌํจํฉ๋๋ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ ๊ณ ํด์๋ ๋ฏธ๋์ด๋ฅผ ์ฒ๋ฆฌํ ๋์๋ ์ด๋ฌํ ๋๊ตฌ๋ค์ด ๋ ๋ฐ์์ ์ด๊ณ ๋ค์ดํฐ๋ธ์ฒ๋ผ ๋๊ปด์ง๊ฒ ๋ง๋ญ๋๋ค.
4. ์๋ฎฌ๋ ์ด์ ๋ฐ ๊ฐ์ํ
์๋ฎฌ๋ ์ด์ ์ ํตํด ๋ธ๋ผ์ฐ์ ์์ ์ ์ฒด ์ด์ ์ฒด์ ๋ ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์ ์ ๋๋ค. ์๋ฎฌ๋ ์ดํฐ๋ ๊ฒ์คํธ ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ๋งต์ ์๋ฎฌ๋ ์ด์ ํด์ผ ํฉ๋๋ค. ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ํ๋ฉด ๋ฒํผ๋ฅผ ์ง์ฐ๊ณ , ROM ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ , ์๋ฎฌ๋ ์ดํธ๋ ๊ธฐ๊ณ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ด๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ด ๋ ํธ๋ก ๊ฒ์ ์๋ฎฌ๋ ์ดํฐ์ ๊ฐ์ ํ๋ก์ ํธ๊ฐ ๋๋ผ์ธ ์ ๋๋ก ์ ์ํ๋๋๋ก ํฉ๋๋ค.
5. ๋์ ๋งํน ๋ฐ ํ๋ฌ๊ทธ์ธ ์์คํ
ํจ์๋ธ ์ธ๊ทธ๋จผํธ์ table.init์ ์กฐํฉ์ WebAssembly์์ ๋์ ๋งํน์ ์ํ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฃผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐํ์์ ์ถ๊ฐ Wasm ๋ชจ๋(ํ๋ฌ๊ทธ์ธ)์ ๋ก๋ํ ์ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ๋ก๋๋๋ฉด ํด๋น ํจ์๋ฅผ ์ฃผ ์ ํ๋ฆฌ์ผ์ด์
์ ํจ์ ํ
์ด๋ธ์ ๋์ ์ผ๋ก ์ถ๊ฐํ ์ ์์ด, ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ ํ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ๋ชจ๋์ ์ธ ์ํคํ
์ฒ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ ๋ถ์ฐ๋ ๊ตญ์ ํ์ด ๊ฐ๋ฐํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ค๋๋ ํ๋ก์ ํธ์์ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ
๋คํํ๋, ์์ ์์ค ์ธ์ด๋ก ์์ ํ๋ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์์๊ฒ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ์ฉ์ ์ข ์ข ์๋์ ๋๋ค. ์ต์ ์ปดํ์ผ๋ฌ๋ ์ต์ ํ๋ ์ ์๋ ํจํด์ ์ธ์ํ ๋งํผ ๋๋ํฉ๋๋ค.
์ปดํ์ผ๋ฌ ์ง์์ด ํต์ฌ์ ๋๋ค
Rust, C/C++(Emscripten/LLVM์ ํตํด), ๊ทธ๋ฆฌ๊ณ AssemblyScript์ฉ ์ปดํ์ผ๋ฌ๋ ๋ชจ๋ "๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ธ์"ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ฅผ ์ํํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ํด๋น Wasm ๋ช ๋ น์ด๋ฅผ ์์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ด ๊ฐ๋จํ Rust ํจ์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค:
pub fn copy_slice(dest: &mut [u8], src: &[u8]) {
dest.copy_from_slice(src);
}
์ด๊ฒ์ wasm32-unknown-unknown ํ๊ฒ์ผ๋ก ์ปดํ์ผํ๋ฉด, Rust ์ปดํ์ผ๋ฌ๋ copy_from_slice๊ฐ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์
์์ ์ธ์งํฉ๋๋ค. ๋ฃจํ๋ฅผ ์์ฑํ๋ ๋์ , ์ต์ข
Wasm ๋ชจ๋์ ์ง๋ฅ์ ์ผ๋ก ๋จ์ผ memory.copy ๋ช
๋ น์ด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์์ ํ๊ณ ๊ด์ฉ์ ์ธ ์์ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ ๋ฎ์ ์์ค์ Wasm ๋ช
๋ น์ด์ ์์ ์ฑ๋ฅ์ ๋ฌด๋ฃ๋ก ์ป์ ์ ์์์ ์๋ฏธํฉ๋๋ค.
ํ์ฑํ ๋ฐ ๊ธฐ๋ฅ ๊ฐ์ง
๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฅ์ ์ด์ ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge)์ ์๋ฒ ์ธก Wasm ๋ฐํ์์์ ๋๋ฆฌ ์ง์๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ ์ ์๋ ํ์ค Wasm ๊ธฐ๋ฅ ์ธํธ์ ์ผ๋ถ์ ๋๋ค. ๋งค์ฐ ์ค๋๋ ํ๊ฒฝ์ ์ง์ํด์ผ ํ๋ ๋๋ฌธ ๊ฒฝ์ฐ, Wasm ๋ชจ๋์ ์ธ์คํด์คํํ๊ธฐ ์ ์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฉ์ฑ์ ๊ธฐ๋ฅ ๊ฐ์งํ ์ ์์ง๋ง, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ ๋ ํ์ํด์ง๊ณ ์์ต๋๋ค.
๋ฏธ๋: ๋ ๋ง์ ํ์ ์ ์ํ ๊ธฐ๋ฐ
๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ๋ ๋จ์ง ์ข ์ฐฉ์ ์ด ์๋๋ผ, ๋ค๋ฅธ ๊ณ ๊ธ WebAssembly ๊ธฐ๋ฅ์ด ๊ตฌ์ถ๋๋ ๊ธฐ๋ฐ ๊ณ์ธต์ ๋๋ค. ๊ทธ ์กด์ฌ๋ ๋ค๋ฅธ ๋ช ๊ฐ์ง ์ค์ํ ์ ์์ ์ ์ ์กฐ๊ฑด์ด์์ต๋๋ค:
- WebAssembly ์ค๋ ๋: ์ค๋ ๋ฉ ์ ์์ ๊ณต์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์์ ์ฐ์ฐ์ ๋์ ํฉ๋๋ค. ์ค๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ฉฐ, ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ์ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ฐ ํ์ํ ๊ณ ์ฑ๋ฅ ๊ธฐ๋ณธ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- WebAssembly SIMD (๋จ์ผ ๋ช ๋ น์ด, ๋ค์ค ๋ฐ์ดํฐ): SIMD๋ ๋จ์ผ ๋ช ๋ น์ด๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ํ ๋ฒ์ ์ฐ์ฐํ ์ ์๊ฒ ํฉ๋๋ค(์: ๋ค ์์ ์ซ์๋ฅผ ๋์์ ๋ํ๊ธฐ). ๋ฐ์ดํฐ๋ฅผ SIMD ๋ ์ง์คํฐ๋ก ๋ก๋ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ์์ ์ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฅ์ ์ํด ํฌ๊ฒ ๊ฐ์ํ๋ฉ๋๋ค.
- ์ฐธ์กฐ ํ์
: ์ด ์ ์์ Wasm์ด ํธ์คํธ ๊ฐ์ฒด(์: JavaScript ๊ฐ์ฒด)์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ง์ ๋ณด์ ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ์ฐธ์กฐ ํ
์ด๋ธ์ ๊ด๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ(
table.init,elem.drop)์ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์์์ ์ง์ ๋น๋กฏ๋ฉ๋๋ค.
๊ฒฐ๋ก : ๋จ์ํ ์ฑ๋ฅ ํฅ์ ๊ทธ ์ด์
WebAssembly ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์ ์์ ํ๋ซํผ์ ๋ํ ๊ฐ์ฅ ์ค์ํ MVP ์ดํ ๊ฐ์ ์ฌํญ ์ค ํ๋์ ๋๋ค. ๋นํจ์จ์ ์ธ ์์์ ๋ฃจํ๋ฅผ ์์ ํ๊ณ , ์์์ ์ด๋ฉฐ, ์ด์ต์ ํ๋ ๋ช ๋ น์ด ์ธํธ๋ก ๋์ฒดํ์ฌ ๊ทผ๋ณธ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ํด๊ฒฐํฉ๋๋ค.
๋ณต์กํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์ ์ Wasm ์์ง์ ์์ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ธ ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ป์ต๋๋ค:
- ์ ๋ก ์๋ ์๋: ๋ฐ์ดํฐ ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํญ ๊ฐ์ํํฉ๋๋ค.
- ํฅ์๋ ๋ณด์: ๋ด์ฅ๋ ํ์ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ํตํด ์ ์ฒด ํด๋์ค์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ๋ฒ๊ทธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ฝ๋ ๋จ์์ฑ: ๋ ์์ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์์ ์์ค ์ธ์ด๊ฐ ๋ ํจ์จ์ ์ด๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์ปดํ์ผ๋๋๋ก ํฉ๋๋ค.
์ ์ธ๊ณ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์๊ฒ ๋ฒํฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ฐจ์ธ๋ ํ๋ถํ๊ณ , ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ, ์ ๋ขฐํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ด๋ค์ ์น ๊ธฐ๋ฐ ์ฑ๋ฅ๊ณผ ๋ค์ดํฐ๋ธ ์ฑ๋ฅ ๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ์ค์ฌ ๊ฐ๋ฐ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ฐ๋ฅํ ๊ฒ์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๊ณ ๋ชจ๋ ์ฌ๋, ๋ชจ๋ ๊ณณ์์ ๋ ์ ๋ฅํ๊ณ ์ ๊ทผํ๊ธฐ ์ฌ์ด ์น์ ๋ง๋ค ์ ์๋๋ก ํ์ ์ค์ด์ค๋๋ค.