WebAssembly ์ฐธ์กฐ ํ์ ์ ์ฌ์ธต ๋ถ์ํ๊ณ , ๊ฐ์ฒด ์ฐธ์กฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ํตํฉ, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ฑ๋ฅ๊ณผ ์ํธ ์ด์ฉ์ฑ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํด๋ด ๋๋ค.
WebAssembly ์ฐธ์กฐ ํ์ : ๊ฐ์ฒด ์ฐธ์กฐ ๋ฐ GC ํตํฉ
WebAssembly(Wasm)๋ ์ด์ ๊ฐ๋ฅํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์์ ํ ์ฝ๋ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ ์น ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผ์ผฐ์ต๋๋ค. ์ด๊ธฐ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ซ์ ํ์ ์ ์ค์ ์ ๋์๋ WebAssembly์ ๊ธฐ๋ฅ์ ๊ณ์ํด์ ํ์ฅ๋๊ณ ์์ต๋๋ค. ์ค์ํ ๋ฐ์ ์ค ํ๋๋ ์ฐธ์กฐ ํ์ (Reference Types), ํนํ ๊ฐ์ฒด ์ฐธ์กฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)๊ณผ์ ํตํฉ์ ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ WebAssembly ์ฐธ์กฐ ํ์ ์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ๊ทธ ์ด์ , ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ์น๊ณผ ๊ทธ ์ด์์ ๋ฏธ๋์ ๋ฏธ์น๋ ์ํฅ์ ํ๊ตฌํฉ๋๋ค.
WebAssembly ์ฐธ์กฐ ํ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
์ฐธ์กฐ ํ์ ์ WebAssembly์ ๋ฐ์ ์ ์์ด ์ค์ํ ์ง์ ์ ์๋ฏธํฉ๋๋ค. ์ฐธ์กฐ ํ์ ์ด ๋์ ๋๊ธฐ ์ , Wasm๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ(๋ฐ ๋ค๋ฅธ ์ธ์ด)์ ์ํธ์์ฉ์ ์์ ๋ฐ์ดํฐ ํ์ (์ซ์, ๋ถ๋ฆฌ์ธ)์ ์ ์กํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ผ๋ก ์ ํ๋์์ต๋๋ค. ์ฐธ์กฐ ํ์ ์ ์ฌ์ฉํ๋ฉด WebAssembly๊ฐ ํธ์คํธ ํ๊ฒฝ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ง์ ๋ณด์ ํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ํธ ์ด์ฉ์ฑ์ ํฌ๊ฒ ๊ฐ์ํํ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
๋ณธ์ง์ ์ผ๋ก ์ฐธ์กฐ ํ์ ์ ํตํด WebAssembly ๋ชจ๋์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ด๋ฌํ ์ฐธ์กฐ๋ฅผ Wasm ํจ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ์ ๋ฌํฉ๋๋ค.
- ๊ฐ์ฒด ์์ฑ ๋ฐ ๋ฉ์๋์ ์ง์ ์ํธ์์ฉํฉ๋๋ค (์ผ๋ถ ์ ์ฝ์ด ์์ โ ์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ์กฐ).
WebAssembly์์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ํ์์ฑ
์ ํต์ ์ธ WebAssembly๋ ๊ฐ๋ฐ์๊ฐ C๋ C++์ ๊ฐ์ ์ธ์ด์ฒ๋ผ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ด๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋์, ๋๊ธ๋ง ํฌ์ธํฐ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํ์ ์ด๋ํ์ฌ ํนํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๊ฐ๋ฐ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ฆ๊ฐ์ํต๋๋ค. ๋์ฑ์ด, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ malloc/free ์์ ์ ์ค๋ฒํค๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์์ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ์ฑ๋ฅ์ ์ ํดํ ์ ์์ต๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ํํฉ๋๋ค. GC ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ์ ์ํ์ ์ค์ด๋ฉฐ, ๋ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. GC๋ฅผ WebAssembly์ ํตํฉํ๋ฉด ๊ฐ๋ฐ์๋ ์๋ฐ, C#, ์ฝํ๋ฆฐ ๋ฑ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์์กดํ๋ ์ธ์ด๋ฅผ WebAssembly ์ํ๊ณ ๋ด์์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์ฐธ์กฐ: Wasm๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ๊ฐ๊ทน ๋ฉ์ฐ๊ธฐ
๊ฐ์ฒด ์ฐธ์กฐ๋ WebAssembly๊ฐ ํธ์คํธ ํ๊ฒฝ์ GC(์ฃผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ)๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ์ง์ ์ํธ์์ฉํ ์ ์๋๋ก ํ๋ ํน์ ์ ํ์ ์ฐธ์กฐ ํ์ ์ ๋๋ค. ์ด๋ WebAssembly ๋ชจ๋์ด ์ด์ DOM ์์, ๋ฐฐ์ด ๋๋ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ชจ๋์ ์ด ์ฐธ์กฐ๋ฅผ ๋ค๋ฅธ WebAssembly ํจ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ค์ ์ ๋ฌํ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์ฐธ์กฐ์ ์ฃผ์ ์ธก๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. `externref` ํ์
`externref` ํ์ ์ WebAssembly์์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ํ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๋๋ค. ์ด๋ ์ธ๋ถ ํ๊ฒฝ(์: ์๋ฐ์คํฌ๋ฆฝํธ)์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ํ๋ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ํ ์ผ๋ฐ์ ์ธ "ํธ๋ค"์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๋ WebAssembly ํ์ ์ผ๋ก ์ ์ธ๋์ด ํจ์ ๋งค๊ฐ๋ณ์, ๋ฐํ ๊ฐ ๋ฐ ์ง์ญ ๋ณ์์ ํ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์์ (๊ฐ์ WebAssembly ํ ์คํธ ํ์):
(module
(func $get_element (import "js" "get_element") (result externref))
(func $set_property (import "js" "set_property") (param externref i32 i32))
(func $use_element
(local $element externref)
(local.set $element (call $get_element))
(call $set_property $element (i32.const 10) (i32.const 20))
)
)
์ด ์์์ `$get_element`๋ `externref`(์๋ง๋ DOM ์์์ ๋ํ ์ฐธ์กฐ)๋ฅผ ๋ฐํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค. `$use_element` ํจ์๋ `$get_element`๋ฅผ ํธ์ถํ๊ณ ๋ฐํ๋ ์ฐธ์กฐ๋ฅผ `$element` ์ง์ญ ๋ณ์์ ์ ์ฅํ ๋ค์, ๋ค๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ `$set_property`๋ฅผ ํธ์ถํ์ฌ ์์์ ์์ฑ์ ์ค์ ํฉ๋๋ค.
2. ์ฐธ์กฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ด๋ณด๋ด๊ธฐ
WebAssembly ๋ชจ๋์ `externref` ํ์ ์ ๋ฐ๊ฑฐ๋ ๋ฐํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด๋ฅผ Wasm์ผ๋ก ์ ๋ฌํ๊ณ Wasm์ ๊ฐ์ฒด๋ฅผ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก Wasm ๋ชจ๋์ `externref` ํ์ ์ ์ฌ์ฉํ๋ ํจ์๋ฅผ ๋ด๋ณด๋ผ ์ ์์ผ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ฌํ ํจ์๋ฅผ ํธ์ถํ๊ณ Wasm ๊ด๋ฆฌ ๊ฐ์ฒด์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
์์ (์๋ฐ์คํฌ๋ฆฝํธ):
async function runWasm() {
const importObject = {
js: {
get_element: () => document.getElementById("myElement"),
set_property: (element, x, y) => {
element.style.left = x + "px";
element.style.top = y + "px";
}
}
};
const { instance } = await WebAssembly.instantiateStreaming(fetch('module.wasm'), importObject);
instance.exports.use_element();
}
์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๊ฐ์ ธ์จ ํจ์ `get_element` ๋ฐ `set_property`์ ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌํ์ ์ ๊ณตํ๋ `importObject`๋ฅผ ์ ์ํฉ๋๋ค. `get_element` ํจ์๋ DOM ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๊ณ , `set_property` ํจ์๋ ์ ๊ณต๋ ์ขํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์์ ์คํ์ผ์ ์์ ํฉ๋๋ค.
3. ํ์ ๋จ์ธ
`externref`๋ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง WebAssembly ๋ด์์ ํ์ ์์ ์ฑ์ ์ ๊ณตํ์ง๋ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด WebAssembly์ GC ์ ์์๋ ํ์ ๋จ์ธ์ ์ํ ๋ช ๋ น์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ช ๋ น์ด๋ฅผ ํตํด Wasm ์ฝ๋๋ ๋ฐํ์์ `externref`์ ํ์ ์ ํ์ธํ์ฌ ์์ ์ ์ํํ๊ธฐ ์ ์ ์์๋๋ ํ์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.
ํ์ ๋จ์ธ์ด ์์ผ๋ฉด Wasm ๋ชจ๋์ ์กด์ฌํ์ง ์๋ `externref`์ ์์ฑ์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ํ์ ๋จ์ธ์ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
WebAssembly์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ์ ์
WebAssembly GC ์ ์์ WebAssembly ๋ชจ๋์ด ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด GC์ ํฌ๊ฒ ์์กดํ๋ ์๋ฐ, C#, ์ฝํ๋ฆฐ๊ณผ ๊ฐ์ ์ธ์ด๋ฅผ WebAssembly๋ก ๋ ํจ์จ์ ์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ํ์ฌ ์ ์์๋ ๋ช ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค:
1. GC ํ์
GC ์ ์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ฐ์ฒด๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋ ์๋ก์ด ํ์ ์ ๋์ ํฉ๋๋ค. ์ด๋ฌํ ํ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `struct`: C์ ๊ตฌ์กฐ์ฒด๋ ์๋ฐ์ ํด๋์ค์ ์ ์ฌํ๊ฒ ๋ช ๋ช ๋ ํ๋๊ฐ ์๋ ๊ตฌ์กฐ(๋ ์ฝ๋)๋ฅผ ๋ํ๋ ๋๋ค.
- `array`: ํน์ ํ์ ์ ๋์ ํฌ๊ธฐ ๋ฐฐ์ด์ ๋ํ๋ ๋๋ค.
- `i31ref`: GC ๊ฐ์ฒด์ด๊ธฐ๋ ํ 31๋นํธ ์ ์๋ฅผ ๋ํ๋ด๋ ํน์ ํ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด GC ํ ๋ด์์ ์์ ์ ์๋ฅผ ํจ์จ์ ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
- `anyref`: ์๋ฐ์ `Object`์ ์ ์ฌํ๊ฒ ๋ชจ๋ GC ํ์ ์ ์์ ํ์ ์ ๋๋ค.
- `eqref`: ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋๊ฐ ์๋ ๊ตฌ์กฐ์ ๋ํ ์ฐธ์กฐ์ ๋๋ค.
์ด๋ฌํ ํ์ ์ ํตํด WebAssembly๋ GC๊ฐ ๊ด๋ฆฌํ ์ ์๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ์ฌ ๋ ์ ๊ตํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
2. GC ๋ช ๋ น์ด
GC ์ ์์ GC ๊ฐ์ฒด ์์ ์ ์ํ ์๋ก์ด ๋ช ๋ น์ด ์ธํธ๋ฅผ ๋์ ํฉ๋๋ค. ์ด๋ฌํ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `gc.new`: ์ง์ ๋ ํ์ ์ ์ GC ๊ฐ์ฒด๋ฅผ ํ ๋นํฉ๋๋ค.
- `gc.get`: GC ๊ตฌ์กฐ์ฒด์์ ํ๋๋ฅผ ์ฝ์ต๋๋ค.
- `gc.set`: GC ๊ตฌ์กฐ์ฒด์ ํ๋๋ฅผ ์๋๋ค.
- `gc.array.new`: ์ง์ ๋ ํ์ ๊ณผ ํฌ๊ธฐ์ ์ GC ๋ฐฐ์ด์ ํ ๋นํฉ๋๋ค.
- `gc.array.get`: GC ๋ฐฐ์ด์์ ์์๋ฅผ ์ฝ์ต๋๋ค.
- `gc.array.set`: GC ๋ฐฐ์ด์ ์์๋ฅผ ์๋๋ค.
- `gc.ref.cast`: GC ์ฐธ์กฐ์ ๋ํ ํ์ ์บ์คํธ๋ฅผ ์ํํฉ๋๋ค.
- `gc.ref.test`: ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ GC ์ฐธ์กฐ๊ฐ ํน์ ํ์ ์ธ์ง ํ์ธํฉ๋๋ค.
์ด๋ฌํ ๋ช ๋ น์ด๋ WebAssembly ๋ชจ๋ ๋ด์์ GC ๊ฐ์ฒด๋ฅผ ์์ฑ, ์กฐ์ ๋ฐ ์ํธ์์ฉํ๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
3. ํธ์คํธ ํ๊ฒฝ๊ณผ์ ํตํฉ
WebAssembly GC ์ ์์ ์ค์ํ ์ธก๋ฉด์ ํธ์คํธ ํ๊ฒฝ์ GC์์ ํตํฉ์ ๋๋ค. ์ด๋ฅผ ํตํด WebAssembly ๋ชจ๋์ ์น ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๊ฐ์ด ํธ์คํธ ํ๊ฒฝ์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ํจ์จ์ ์ผ๋ก ์ํธ์์ฉํ ์ ์์ต๋๋ค. ์์์ ๋ ผ์ํ `externref` ํ์ ์ ์ด ํตํฉ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
GC ์ ์์ ๊ธฐ์กด ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํํ๊ฒ ์๋ํ๋๋ก ์ค๊ณ๋์ด WebAssembly๊ฐ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธํ๋ผ๋ฅผ ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ WebAssembly๊ฐ ์์ฒด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ตฌํํ ํ์์ฑ์ ์์ ์ฃผ๋ฉฐ, ์ด๋ ์๋นํ ์ค๋ฒํค๋์ ๋ณต์ก์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
WebAssembly ์ฐธ์กฐ ํ์ ๋ฐ GC ํตํฉ์ ์ด์
WebAssembly์ ์ฐธ์กฐ ํ์ ๊ณผ GC ํตํฉ์ ๋์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ง์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
1. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ํธ ์ด์ฉ์ฑ ํฅ์
์ฐธ์กฐ ํ์ ์ WebAssembly์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ์ํธ ์ด์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. Wasm๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ง์ ์ ๋ฌํ๋ฉด ์ข ์ข ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ๋ณต์กํ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ๊ธฐ์ ์ ๊ฐ์ ์ ํ์ฉํ๋ ๋ ์ํํ๊ณ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Rust๋ก ์์ฑ๋์ด WebAssembly๋ก ์ปดํ์ผ๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ DOM ์์๋ฅผ ์ง์ ์กฐ์ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
2. ๊ฐ๋ฐ ๊ฐ์ํ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ํํจ์ผ๋ก์จ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํ์ ์ค์ ๋๋ค. ๊ฐ๋ฐ์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๋ํด ๊ฑฑ์ ํ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง ์์ฑ์ ์ง์คํ ์ ์์ต๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ค๋ฅ์ ์ฃผ์ ์์ธ์ด ๋ ์ ์๋ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ ํนํ ์ ์ฉํฉ๋๋ค.
3. ์ฑ๋ฅ ํฅ์
๋ง์ ๊ฒฝ์ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ณด๋ค ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. GC ์๊ณ ๋ฆฌ์ฆ์ ์ข ์ข ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ํ GC๋ฅผ ํธ์คํธ ํ๊ฒฝ๊ณผ ํตํฉํ๋ฉด WebAssembly๊ฐ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธํ๋ผ๋ฅผ ํ์ฉํ์ฌ ์์ฒด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ตฌํํ๋ ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, C#์ผ๋ก ์์ฑ๋์ด WebAssembly๋ก ์ปดํ์ผ๋ ๊ฒ์ ์์ง์ ์๊ฐํด ๋ณด์ธ์. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ฒ์ ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ์ฌ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋ ๋ถ๋๋ฌ์ด ๊ฒ์ ํ๋ ์ด์ ํฅ์๋ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
4. ๋ ๋์ ๋ฒ์์ ์ธ์ด ์ง์
GC ํตํฉ์ ํตํด ์๋ฐ, C#, ์ฝํ๋ฆฐ, Go(GC ํฌํจ)์ ๊ฐ์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์์กดํ๋ ์ธ์ด๋ฅผ WebAssembly๋ก ๋ ํจ์จ์ ์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ์ด๋ ์น ๊ฐ๋ฐ ๋ฐ ๊ธฐํ WebAssembly ๊ธฐ๋ฐ ํ๊ฒฝ์์ ์ด๋ฌํ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐ์๋ ์ด์ ๊ธฐ์กด ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ WebAssembly๋ก ์ปดํ์ผํ์ฌ ํฐ ์์ ์์ด ์น ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
5. ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ
C# ๋ฐ ์๋ฐ์ ๊ฐ์ ์ธ์ด๋ฅผ WebAssembly๋ก ์ปดํ์ผํ๋ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ํ๋ซํผ์์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ํ ๋ฒ ์์ฑํ์ฌ ์น, ์๋ฒ ๋ฐ ๋ชจ๋ฐ์ผ ์ฅ์น์ ๋ฐฐํฌํ์ฌ ๊ฐ๋ฐ ๋น์ฉ์ ์ ๊ฐํ๊ณ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค๋ก ์ฌ๋ฌ ํ๋ซํผ์ ์ง์ํด์ผ ํ๋ ์กฐ์ง์ ํนํ ์ ์ฉํฉ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ฐธ์กฐ ํ์ ๊ณผ GC ํตํฉ์ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ผ๋์ ๋์ด์ผ ํ ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค ์ฌํญ๋ ์์ต๋๋ค:
1. ์ฑ๋ฅ ์ค๋ฒํค๋
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค. GC ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์บํ์ฌ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ํ์ํด์ผ ํ๋ฏ๋ก CPU ๋ฆฌ์์ค๋ฅผ ์๋นํ ์ ์์ต๋๋ค. GC์ ์ฑ๋ฅ ์ํฅ์ ์ฌ์ฉ๋ ํน์ GC ์๊ณ ๋ฆฌ์ฆ, ํ์ ํฌ๊ธฐ ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ์ ๋น๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ฐ๋ฐ์๋ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ณ ์ต์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด GC ๋งค๊ฐ๋ณ์๋ฅผ ์ ์คํ๊ฒ ์กฐ์ ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ(์: ์ธ๋๋ณ, ๋งํฌ-์ค-์ค์)์ ๋ค๋ฅธ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ง๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
2. ๊ฒฐ์ ์ ๋์
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ณธ์ง์ ์ผ๋ก ๋น๊ฒฐ์ ์ ์ ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ์ ํ์ด๋ฐ์ ์์ธกํ ์ ์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์๋ ฅ ๋ฐ ์์คํ ๋ถํ์ ๊ฐ์ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ ํํ ํ์ด๋ฐ์ด๋ ๊ฒฐ์ ์ ๋์์ด ํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ์ํ๋ ์์ค์ ๊ฒฐ์ ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๊ฐ์ฒด ํ๋ง์ด๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. ์ด๋ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒ์์ด๋ ์๋ฎฌ๋ ์ด์ ๊ณผ ๊ฐ์ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ์ค์ํฉ๋๋ค.
3. ๋ณด์ ๊ณ ๋ ค ์ฌํญ
WebAssembly๋ ์์ ํ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ์ง๋ง, ์ฐธ์กฐ ํ์ ๊ณผ GC ํตํฉ์ ์๋ก์ด ๋ณด์ ๊ณ ๋ ค ์ฌํญ์ ๋์ ํฉ๋๋ค. ์ ์ฑ ์ฝ๋๊ฐ ์๊ธฐ์น ์์ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด์ ์ก์ธ์คํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ ์คํ๊ฒ ๊ฒ์ฆํ๊ณ ํ์ ๋จ์ธ์ ์ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ค๋ฉด ๋ณด์ ๊ฐ์ฌ ๋ฐ ์ฝ๋ ๊ฒํ ๊ฐ ํ์์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ํ ํ์ ํ์ธ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ํ๋์ง ์์ผ๋ฉด ์ ์ฑ WebAssembly ๋ชจ๋์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
4. ์ธ์ด ์ง์ ๋ฐ ๋๊ตฌ
์ฐธ์กฐ ํ์ ๋ฐ GC ํตํฉ์ ์ฑํ์ ์ธ์ด ์ง์ ๋ฐ ๋๊ตฌ์ ๊ฐ์ฉ์ฑ์ ๋ฌ๋ ค ์์ต๋๋ค. ์ปดํ์ผ๋ฌ์ ํด์ฒด์ธ์ ์๋ก์ด WebAssembly ๊ธฐ๋ฅ์ ์ง์ํ๋๋ก ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ GC ๊ฐ์ฒด ์์ ์ ์ํ ๊ณ ๊ธ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ์ ์ก์ธ์คํด์ผ ํฉ๋๋ค. ํฌ๊ด์ ์ธ ๋๊ตฌ ๋ฐ ์ธ์ด ์ง์์ ๊ฐ๋ฐ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ด๋ฒ์ํ ์ฑํ์ ํ์์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, LLVM ํ๋ก์ ํธ๋ C++์ ๊ฐ์ ์ธ์ด์ ๋ํด WebAssembly GC๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ๊ฒํ ํ๋๋ก ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
๋ค์์ WebAssembly ์ฐธ์กฐ ํ์ ๋ฐ GC ํตํฉ์ ๋ํ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค:
1. ๋ณต์กํ UI๋ฅผ ๊ฐ์ถ ์น ์ ํ๋ฆฌ์ผ์ด์
WebAssembly๋ ๊ณ ์ฑ๋ฅ์ ์๊ตฌํ๋ ๋ณต์กํ UI๋ฅผ ๊ฐ์ถ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ฐธ์กฐ ํ์ ์ ์ฌ์ฉํ๋ฉด WebAssembly ๋ชจ๋์ด DOM ์์๋ฅผ ์ง์ ์กฐ์ํ์ฌ UI์ ๋ฐ์์ฑ๊ณผ ๋ถ๋๋ฌ์์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, WebAssembly ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ฑฐ๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ๋ ์ด์์ ๊ณ์ฐ์ ์ํํ๋ ์ฌ์ฉ์ ์ ์ UI ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ์ ๊ตํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
2. ๊ฒ์ ๋ฐ ์๋ฎฌ๋ ์ด์
WebAssembly๋ ๊ฒ์ ๋ฐ ์๋ฎฌ๋ ์ด์ ๊ฐ๋ฐ์ ์ํ ํ๋ฅญํ ํ๋ซํผ์ ๋๋ค. GC ํตํฉ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋์ ๊ฒ์ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ํฅ์๋ ๊ฒ์ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. Unity ๋ฐ Unreal Engine๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์ WebAssembly๋ฅผ ๋์ ํ๋ซํผ์ผ๋ก ์ ๊ทน์ ์ผ๋ก ํ์ํ๊ณ ์์ผ๋ฉฐ, GC ํตํฉ์ ์ด๋ฌํ ์์ง์ ์น์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐ ์ค์ํ ๊ฒ์ ๋๋ค.
3. ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์
WebAssembly๋ ์น ๋ธ๋ผ์ฐ์ ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. GC ํตํฉ์ ํตํด ๊ฐ๋ฐ์๋ ์๋ฐ ๋ฐ C#๊ณผ ๊ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ WebAssembly ๋ฐํ์์์ ์คํ๋๋ ๊ณ ์ฑ๋ฅ ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ฐ๋ ์ปดํจํ ๋ฐ ๊ธฐํ ์๋ฒ ์ธก ํ๊ฒฝ์์ WebAssembly๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. Wasmtime ๋ฐ ๊ธฐํ ์๋ฒ ์ธก WebAssembly ๋ฐํ์์ GC ์ง์์ ์ ๊ทน์ ์ผ๋ก ํ์ํ๊ณ ์์ต๋๋ค.
4. ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ
WebAssembly๋ ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ WebAssembly๋ก ์ปดํ์ผํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ iOS ๋ฐ ์๋๋ก์ด๋ ํ๋ซํผ ๋ชจ๋์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค. GC ํตํฉ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๊ฐ๋ฐ์๊ฐ C# ๋ฐ ์ฝํ๋ฆฐ๊ณผ ๊ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ WebAssembly๋ฅผ ๋์์ผ๋ก ํ๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํฉ๋๋ค. .NET MAUI์ ๊ฐ์ ํ๋ ์์ํฌ๋ ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๋์์ผ๋ก WebAssembly๋ฅผ ํ์ํ๊ณ ์์ต๋๋ค.
WebAssembly์ GC์ ๋ฏธ๋
WebAssembly์ ์ฐธ์กฐ ํ์ ๊ณผ GC ํตํฉ์ WebAssembly๋ฅผ ์ง์ ํ ๋ฒ์ฉ ์ฝ๋ ์คํ ํ๋ซํผ์ผ๋ก ๋ง๋๋ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ์ธ์ด ์ง์๊ณผ ๋๊ตฌ๊ฐ ์ฑ์ํด์ง์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฑํ์ด ํ๋๋๊ณ WebAssembly ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ ์ฆ๊ฐํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. WebAssembly์ ๋ฏธ๋๋ ๋ฐ์ผ๋ฉฐ, GC ํตํฉ์ ๊ทธ ์ง์์ ์ธ ์ฑ๊ณต์ ํต์ฌ์ ์ธ ์ญํ ์ ํ ๊ฒ์ ๋๋ค.
์ถ๊ฐ ๊ฐ๋ฐ์ด ์งํ ์ค์ ๋๋ค. WebAssembly ์ปค๋ฎค๋ํฐ๋ ๊ณ์ํด์ GC ์ ์์ ๊ฐ์ ํ๊ณ , ์ฃ์ง ์ผ์ด์ค๋ฅผ ํด๊ฒฐํ๋ฉฐ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์์ต๋๋ค. ํฅํ ํ์ฅ์๋ ๋์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฐ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ ๊ฐ์ ๊ณ ๊ธ GC ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ ์ WebAssembly์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ๋์ฑ ํฅ์์ํฌ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
WebAssembly ์ฐธ์กฐ ํ์ , ํนํ ๊ฐ์ฒด ์ฐธ์กฐ ๋ฐ GC ํตํฉ์ WebAssembly ์ํ๊ณ์ ๊ฐ๋ ฅํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ค์ Wasm๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ๊ฐ๊ทน์ ๋ฉ์ฐ๊ณ , ๊ฐ๋ฐ์ ๋จ์ํํ๋ฉฐ, ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ๋ ๋์ ๋ฒ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. ๊ณ ๋ คํด์ผ ํ ๊ณผ์ ๊ฐ ์์ง๋ง ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ถ์ธํ ์ ์์ต๋๋ค. WebAssembly๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ฐธ์กฐ ํ์ ๊ณผ GC ํตํฉ์ ์น ๊ฐ๋ฐ๊ณผ ๊ทธ ์ด์์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ฐ์๋ค์ด๊ณ ํ์ ์ ์ด๊ณ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ด๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ ํ์ํ์ญ์์ค.