๊ฐ๋ฐ์๋ฅผ ์ํ WebAssembly ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ํตํฉ, ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ ์ ์ง์คํฉ๋๋ค.
WebAssembly GC ํตํฉ: ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ ํ์
WebAssembly(Wasm)๋ C++ ๋ฐ Rust์ ๊ฐ์ ์ธ์ด์ ์ปดํ์ผ ๋์์ผ๋ก ๋น ๋ฅด๊ฒ ์งํํ์ผ๋ฉฐ, ์น ๋ฐ ๊ทธ ์ด์์์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฐ๋ ฅํ ํ๋ซํผ์ด ๋์์ต๋๋ค. ์ด๋ฌํ ์งํ์ ์ค์ํ ์ธก๋ฉด์ WebAssembly ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ํตํฉ์ ๋ฑ์ฅ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์์กดํ๋ ๋ณด๋ค ๋ณต์กํ ๊ณ ์์ค ์ธ์ด๋ฅผ ์คํํ ์ ์๊ฒ ํ์ฌ Wasm์ ๋๋ฌ ๋ฒ์๋ฅผ ํฌ๊ฒ ํ์ฅํฉ๋๋ค.
์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ Wasm์ด ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ์ฐธ์กฐ ์นด์ดํ ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ญํ ์ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์ WebAssembly GC ํตํฉ์ ํต์ฌ ๊ฐ๋ , ์ด์ , ๊ณผ์ ๋ฐ ๋ฏธ๋ ์ํฅ์ ํ๊ตฌํ์ฌ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
WebAssembly์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ์์ฑ
์ ํต์ ์ผ๋ก WebAssembly๋ ์ ์์ค ์คํ์ ์ค์ ์ ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(C/C++ ๋ฑ) ๋๋ ๋ ๊ฐ๋จํ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ๊ฐ์ง ์ธ์ด๋ฅผ ์์ฃผ ์ปดํ์ผํ์ต๋๋ค. ๊ทธ๋ฌ๋ Java, C#, Python, ์ฌ์ง์ด ์ต์ JavaScript ํ๋ ์์ํฌ๋ฅผ ํฌํจํ๋๋ก Wasm์ ์ผ์ฌ์ด ์ปค์ง์ ๋ฐ๋ผ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ๊ณ๊ฐ ๋ถ๋ช ํด์ก์ต๋๋ค.
์ด๋ฌํ ๊ณ ์์ค ์ธ์ด๋ ์ข ์ข ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)์ ์์กดํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. GC ์์ด๋ ์ด๋ฌํ ์ธ์ด๋ฅผ Wasm์ผ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ์๋นํ ๋ฐํ์ ์ค๋ฒํค๋, ๋ณต์กํ ํฌํ ๋ ธ๋ ฅ ๋๋ ํํ๋ ฅ ์ ํ์ด ํ์ํฉ๋๋ค. WebAssembly ์ฌ์์ GC ์ง์์ ๋์ ํ๋ ๊ฒ์ ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ง์ ์ ์ผ๋ก ํด๊ฒฐํ์ฌ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ ๋์ ์ธ์ด ์ง์: GC์ ๋ณธ์ง์ ์ผ๋ก ์์กดํ๋ ์ธ์ด์ ํจ์จ์ ์ธ ์ปดํ์ผ ๋ฐ ์คํ์ ์ด์งํฉ๋๋ค.
- ๋จ์ํ๋ ๊ฐ๋ฐ: GC ์ง์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ด ๋ฒ๊ทธ๋ฅผ ์ค์ด๊ณ ์์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ํฅ์๋ ์ด์์ฑ: Java, C#, Python๊ณผ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ฐํ์์ WebAssembly๋ก ์ด์ํ๋ ๊ฒ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ํฅ์๋ ๋ณด์: ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋ฒํผ ์ค๋ฒํ๋ก ๋ฐ ์ฌ์ฉ ํ ํด์ ์ค๋ฅ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Wasm์์ ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ดํด
๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐํ์ ์์คํ , ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ์๋์ผ๋ก ํ ๋น ๋ฐ ํด์ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค. WebAssembly์ ๋งฅ๋ฝ์์ ์ด๋ Wasm ๋ฐํ์ ํ๊ฒฝ์ด ํธ์คํธ ํ๊ฒฝ(์: ์น ๋ธ๋ผ์ฐ์ ๋๋ ๋ ๋ฆฝํ Wasm ๋ฐํ์)๊ณผ ํจ๊ป ๊ฐ์ฒด ์๋ช ์ ๊ด๋ฆฌํ ์ฑ ์์ ์ง๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
GC ์ง์์ด ํฌํจ๋ Wasm์ผ๋ก ์ธ์ด ๋ฐํ์์ด ์ปดํ์ผ๋ ๋ ์์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์ ๊ฐ์ ธ์ต๋๋ค. WebAssembly GC ์ ์์ Wasm ๋ชจ๋์ด ๊ด๋ฆฌ ํ๊ณผ ์ํธ ์์ฉํ ์ ์๋๋ก ํ๋ ์๋ก์ด ์ง์นจ ๋ฐ ์ ํ ์ธํธ๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๊ด๋ฆฌ ํ์ GC ์๋ฏธ๋ก ์ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ์์ฃผํ๋ ๊ณณ์ ๋๋ค. ํต์ฌ ์์ด๋์ด๋ Wasm ๋ชจ๋์ด ๋ค์์ ์ํํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
- ๊ด๋ฆฌ ํ์ ๊ฐ์ฒด ํ ๋น
- ์ด๋ฌํ ๊ฐ์ฒด ๊ฐ์ ์ฐธ์กฐ ์์ฑ
- ๊ฐ์ฒด๊ฐ ๋ ์ด์ ๋๋ฌํ ์ ์์ ๋ ๋ฐํ์์ ์ ํธ ๋ณด๋ด๊ธฐ
GC ์ ์์ ์ญํ
WebAssembly GC ์ ์์ ํต์ฌ Wasm ์ฌ์์ ํ์ฅํ๋ ์ค์ํ ์์ ์ ๋๋ค. ๋ค์์ ๋์ ํฉ๋๋ค.
- ์๋ก์ด ์ ํ: Wasm ๋ชจ๋ ๋ด์ ์ฐธ์กฐ๋ฅผ ๋ํ๋ด๋
funcref,externref๋ฐeqref์ ๊ฐ์ ์ ํ๊ณผ ์ค์ํ๊ฒ๋ ํ ๊ฐ์ฒด์ ๋ํgcref์ ํ์ ๋์ ํฉ๋๋ค. - ์๋ก์ด ์ง์นจ: ๊ฐ์ฒด ํ ๋น, ๊ฐ์ฒด ํ๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ, null ์ฐธ์กฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ง์นจ์ ๋๋ค.
- ํธ์คํธ ๊ฐ์ฒด์์ ํตํฉ: Wasm ๋ชจ๋์ด ํธ์คํธ ๊ฐ์ฒด(์: JavaScript ๊ฐ์ฒด)์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๊ณ ํธ์คํธ ํ๊ฒฝ์ด Wasm ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก, ๋ชจ๋ GC์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
์ด ์ ์์ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ฆ, GC ๊ธฐ๋ฐ ์ธ์ด ๋ชจ์์ด ํ์ฉํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ํน์ GC ์๊ณ ๋ฆฌ์ฆ์ ๊ท์ ํ์ง๋ ์์ง๋ง Wasm ๋ด์์ GC'd ๊ฐ์ฒด์ ๋ํ ์ธํฐํ์ด์ค ๋ฐ ์๋ฏธ๋ก ์ ์ ๊ณตํฉ๋๋ค.
์ฐธ์กฐ ์นด์ดํ : ์ฃผ์ GC ์ ๋ต
๋ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ ์ค์์ ์ฐธ์กฐ ์นด์ดํ ์ ๊ฐ๋จํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. ์ฐธ์กฐ ์นด์ดํ ์์คํ ์์ ๊ฐ ๊ฐ์ฒด๋ ์์ ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์์ ๋ํ ์นด์ดํธ๋ฅผ ์ ์งํฉ๋๋ค. ์ด ์นด์ดํธ๊ฐ 0์ผ๋ก ๋จ์ด์ง๋ฉด ๊ฐ์ฒด์ ๋ ์ด์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ์์ ํ๊ฒ ํด์ ํ ์ ์์์ ๋ํ๋ ๋๋ค.
์ฐธ์กฐ ์นด์ดํ ์๋ ๋ฐฉ์:
- ์ด๊ธฐํ: ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ฐธ์กฐ ์นด์ดํธ๊ฐ 1๋ก ์ด๊ธฐํ๋ฉ๋๋ค(์์ฑํ ํฌ์ธํฐ์ ๊ฒฝ์ฐ).
- ์ฐธ์กฐ ํ ๋น: ๊ฐ์ฒด์ ๋ํ ์ ์ฐธ์กฐ๊ฐ ์์ฑ๋ ๋(์: ๋ณ์์ ํฌ์ธํฐ ํ ๋น), ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ์ฆ๊ฐํฉ๋๋ค.
- ์ฐธ์กฐ ์ญ์ฐธ์กฐ: ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ํ๊ดด๋๊ฑฐ๋ ๋ ์ด์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ์์ ๋(์: ๋ณ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ๋ค์ ํ ๋น๋จ), ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ๊ฐ์ํฉ๋๋ค.
- ํด์ : ๊ฐ์ ํ ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด ๊ฐ์ฒด๋ ๋๋ฌํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด ์ฆ์ ํด์ ๋ฉ๋๋ค. ํด๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค.
์ฐธ์กฐ ์นด์ดํ ์ ์ฅ์
- ๋จ์์ฑ: ๊ฐ๋ ์ ์ผ๋ก ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
- ๊ฒฐ์ ์ ํด์ : ๊ฐ์ฒด๋ ๋๋ฌํ ์ ์๊ฒ ๋๋ ์ฆ์ ํด์ ๋๋ฏ๋ก ์์ธก ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ผ๋ถ ์ถ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋นํด ์ผ์ ์ค์ง๊ฐ ์ค์ด๋ค ์ ์์ต๋๋ค.
- ์ฆ๋ถ: ํด์ ์์ ์ ์ฐธ์กฐ๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ถ์ฐ๋์ด ํฌ๊ณ ํ๊ดด์ ์ธ ์ปฌ๋ ์ ์ฃผ๊ธฐ๋ฅผ ํผํฉ๋๋ค.
์ฐธ์กฐ ์นด์ดํ ์ ๊ณผ์
์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ์ฐธ์กฐ ์นด์ดํ ์๋ ๋จ์ ์ด ์๋ ๊ฒ์ ์๋๋๋ค.
- ์ํ ์ฐธ์กฐ: ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋๋ค. ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด๊ฐ ์๋ก ์ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๋ ๊ฒฝ์ฐ ์ ์ฒด ์ํ์ด ํ๋ก๊ทธ๋จ์ ๋๋จธ์ง ๋ถ๋ถ์์ ๋๋ฌํ ์ ์๋๋ผ๋ ์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ผ๋ก ๋จ์ด์ง์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ค๋ฒํค๋: ๋ชจ๋ ํฌ์ธํฐ ํ ๋น ์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ ๋ฐ ๊ฐ์์ํค๋ฉด ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ค๋ ๋ ์์ ์ฑ: ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์์์ ์์ ์ด ํ์ํ๋ฉฐ, ์ด๋ ์ถ๊ฐ์ ์ธ ์ฑ๋ฅ ๋น์ฉ์ ์ด๋ํ ์ ์์ต๋๋ค.
WebAssembly์ GC ๋ฐ ์ฐธ์กฐ ์นด์ดํ ์ ๊ทผ ๋ฐฉ์
WebAssembly GC ์ ์์ ๋จ์ผ GC ์๊ณ ๋ฆฌ์ฆ์ ์๋ฌดํํ์ง ์์ต๋๋ค. ๋์ ์ฐธ์กฐ ์นด์ดํ , ๋งํฌ ์ค ์ค์, ์ธ๋๋ณ ์ปฌ๋ ์ ๋ฑ ๋ค์ํ GC ์ ๋ต์ ์ํ ๋น๋ฉ ๋ธ๋ก์ ์ ๊ณตํฉ๋๋ค. ๋ชฉํ๋ Wasm์ผ๋ก ์ปดํ์ผ๋ ์ธ์ด ๋ฐํ์์ด ์ ํธํ๋ GC ๋ฉ์ปค๋์ฆ์ ํ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ์นด์ดํ (๋๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์)์ ์ฌ์ฉํ๋ ์ธ์ด์ ๊ฒฝ์ฐ Wasm์ GC ํตํฉ์ ์ง์ ํ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ ๋จ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Wasm์ผ๋ก ์ปดํ์ผ๋ ๋ฐํ์์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ฃผ๊ธฐ ๊ฐ์ง ๊ตฌํ: ์ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์งํ๊ณ ๋๊ธฐ ์ํด ์ฃผ๊ธฐ์ ๋๋ ์์ฒญ ์ ์ถ์ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ฐธ์กฐ ์นด์ดํ ์ ๋ณด์ํฉ๋๋ค. ์ด๋ ์ข ์ข ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ฐธ์กฐ๋ฉ๋๋ค.
- ์ฝํ ์ฐธ์กฐ ์ฌ์ฉ: ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ์ ๊ธฐ์ฌํ์ง ์๋ ์ฝํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ํ ๋ด์ ์ฐธ์กฐ ์ค ํ๋๊ฐ ์ฝํ ๊ฒฝ์ฐ ์ํ์ ๋์ ์ ์์ต๋๋ค.
- ํธ์คํธ GC ํ์ฉ: ์น ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ํ๊ฒฝ์์ Wasm ๋ชจ๋์ ํธ์คํธ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Wasm์ ์ํด ์ฐธ์กฐ๋๋ JavaScript ๊ฐ์ฒด๋ ๋ธ๋ผ์ฐ์ ์ JavaScript GC์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
Wasm GC ์ฌ์์ Wasm ๋ชจ๋์ด ํ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ(ํธ์คํธ ํ๊ฒฝ์ ๊ฐ์ ๋ํ ์ฐธ์กฐ ํฌํจ, externref)๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. Wasm์ด JavaScript ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ ๋ ๋ธ๋ผ์ฐ์ ์ GC๋ ํด๋น ๊ฐ์ฒด๋ฅผ ํ์ฑ ์ํ๋ก ์ ์งํ ์ฑ
์์ด ์์ต๋๋ค. ๋ฐ๋๋ก JavaScript๊ฐ Wasm GC์ ์ํด ๊ด๋ฆฌ๋๋ Wasm ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๋ ๊ฒฝ์ฐ Wasm ๋ฐํ์์ Wasm ๊ฐ์ฒด๊ฐ ์กฐ๊ธฐ์ ์์ง๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
์์ ์๋๋ฆฌ์ค: Wasm์ .NET ๋ฐํ์
.NET ๋ฐํ์์ด WebAssembly๋ก ์ปดํ์ผ๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค. .NET์ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋๋ณ ๋งํฌ ์ค ์ค์ ์ปฌ๋ ํฐ์ธ ์ ๊ตํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ์ฝ๋ ๋ฐ COM ๊ฐ์ฒด์์ ์ํธ ์ด์ฉ๋ ๊ด๋ฆฌํ๋ฉฐ, ์ด๋ ์ข
์ข
์ฐธ์กฐ ์นด์ดํ
์ ์์กดํฉ๋๋ค(์: ReleaseComObject๋ฅผ ํตํด).
GC ํตํฉ์ ์ฌ์ฉํ์ฌ Wasm์์ .NET์ด ์คํ๋ ๋:
- ๊ด๋ฆฌ ํ์ ์๋ .NET ๊ฐ์ฒด๋ Wasm์ GC ๊ธฐ๋ณธ ์์์ ์ํธ ์์ฉํ๋ .NET GC์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
- .NET ๋ฐํ์์ด ํธ์คํธ ๊ฐ์ฒด(์: JavaScript DOM ์์)์ ์ํธ ์์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
externref๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํฉ๋๋ค. ์ด๋ฌํ ํธ์คํธ ๊ฐ์ฒด์ ๊ด๋ฆฌ๋ ํธ์คํธ์ GC(์: ๋ธ๋ผ์ฐ์ ์ JavaScript GC)์ ์์๋ฉ๋๋ค. - .NET ์ฝ๋๊ฐ Wasm ๋ด์์ COM ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ .NET ๋ฐํ์์ ์ด๋ฌํ ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์ฌ๋ฐ๋ฅธ ์ฆ๊ฐ ๋ฐ ๊ฐ์๋ฅผ ๋ณด์ฅํ๋ฉฐ .NET ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ ์ผ๋ก COM ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ค์ .NET ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ์ฃผ๊ธฐ ๊ฐ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ Wasm GC ์ ์์ด ๋ค์ํ ์ธ์ด ๋ฐํ์์ด ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์ ์ ์งํ๋ฉด์ ํ์คํ๋ GC ์ธํฐํ์ด์ค๋ก ์ฐ๊ฒฐ๋ ์ ์๋๋ก ํ๋ ํตํฉ ๊ณ์ธต ์ญํ ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์กฐํฉ๋๋ค.
์ค์ง์ ์ธ ์ํฅ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
WebAssembly์ GC๋ฅผ ํตํฉํ๋ฉด ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ๊ด๋ฒ์ํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
1. ๊ณ ์์ค ์ธ์ด ์ง์ ์คํ
Python, Ruby, Java ๋ฐ .NET ์ธ์ด์ ๊ฐ์ ์ธ์ด๋ฅผ ์ด์ ํจ์ฌ ๋ ํจ์จ์ ์ด๊ณ ์ถฉ์คํ๊ฒ Wasm์ผ๋ก ์ปดํ์ผํ๊ณ ์คํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ์ํ๊ณ๋ฅผ ๋ธ๋ผ์ฐ์ ๋๋ ๊ธฐํ Wasm ํ๊ฒฝ ๋ด์์ ํ์ฉํ ์ ์์ต๋๋ค.
- ํ๋ก ํธ์๋ Python/Django: Python ์น ํ๋ ์์ํฌ ๋ ผ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํํ์ฌ ์๋ฒ์์ ๊ณ์ฐ์ ์คํ๋ก๋ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
- Wasm์ Java/JVM ์ ํ๋ฆฌ์ผ์ด์ : ์ํฐํ๋ผ์ด์ฆ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์คํํ๋๋ก ํฌํ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ํ๋ถํ ๋ฐ์คํฌํฑ๊ณผ ์ ์ฌํ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- .NET Core ์ ํ๋ฆฌ์ผ์ด์ : .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ธ๋ผ์ฐ์ ๋ด์์ ์์ ํ ์คํํ์ฌ ๋ณ๋์ ํด๋ผ์ด์ธํธ ์ธก ํ๋ ์์ํฌ ์์ด ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
2. GC ์ง์ฝ์ ์ธ ์ํฌ๋ก๋์ ๋ํ ์ฑ๋ฅ ํฅ์
๋ง์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์กฐ์์ ํฌํจํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Wasm์ GC๋ Wasm์ GC ๊ตฌํ์ด ์ฑ์ํ๊ณ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด ๋ฐ ๋ฐํ์ ์ ๊ณต์ ์ฒด์ ์ํด ์ต์ ํ๋จ์ ๋ฐ๋ผ JavaScript๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: C# ๋๋ Java๋ก ์์ฑ๋ ๊ฒ์ ์์ง์ Wasm์ผ๋ก ์ปดํ์ผ๋์ด ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ์ ๋๋ฆฌ๊ณ ์์ JavaScript๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์๊ฐํ ๋ฐ ์กฐ์: Python๊ณผ ๊ฐ์ ์ธ์ด์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ํด๋ผ์ด์ธํธ ์ธก์ผ๋ก ์ด๋ํ์ฌ ๋ ๋น ๋ฅธ ๋ํํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
3. ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ์ฑ
Wasm์ GC ํตํฉ์ ๋์ผํ Wasm ํ๊ฒฝ ๋ด์์ ์คํ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ๋ณด๋ค ์ํํ ์ํธ ์ด์ฉ์ฑ์ ์ด์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด C++ ๋ชจ๋(์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํฌํจ)์ Wasm GC ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ์ฌ Python ๋ชจ๋(GC ํฌํจ)๊ณผ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
- ์ธ์ด ํผํฉ: ํต์ฌ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Wasm์ผ๋ก ์ปดํ์ผ๋ Python ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Wasm์ ๋ธ๋ฆฌ์ง ์ญํ ์ ํฉ๋๋ค.
- ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ: Java ๋๋ C#๊ณผ ๊ฐ์ ์ธ์ด์ ์ฑ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ ์ธ์ด์ ๊ด๊ณ์์ด ๋ค๋ฅธ Wasm ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค.
4. ์๋ฒ ์ธก Wasm ๋ฐํ์
๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ด ์๋ฒ ์ธก Wasm ๋ฐํ์(Wasmtime, WasmEdge ๋๋ Wasm ์ง์ Node.js ๋ฑ)์ด ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. Wasm์์ GC ๊ด๋ฆฌ ์ธ์ด๋ฅผ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ณด์ ์๋๋ฐ์ฑ: Wasm์ ๊ฐ๋ ฅํ ๋ณด์ ์๋๋ฐ์ค๋ฅผ ์ ๊ณตํ์ฌ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ๋งค๋ ฅ์ ์ธ ์ต์ ์ ๋๋ค.
- ์ด์์ฑ: ๋จ์ผ Wasm ๋ฐ์ด๋๋ฆฌ๋ ์ฌ์ปดํ์ผ ์์ด ๋ค์ํ ์๋ฒ ์ํคํ ์ฒ ๋ฐ ์ด์ ์ฒด์ ์์ ์คํ๋ ์ ์์ต๋๋ค.
- ํจ์จ์ ์ธ ๋ฆฌ์์ค ์ฌ์ฉ: Wasm ๋ฐํ์์ ์ข ์ข ๊ธฐ์กด ๊ฐ์ ๋จธ์ ๋๋ ์ปจํ ์ด๋๋ณด๋ค ๊ฐ๋ณ๊ณ ์์ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ฌ๋ ์๋ฒ ์ธํ๋ผ์ Wasm ๋ชจ๋๋ก Go(์์ฒด GC ๋ณด์ ) ๋๋ .NET Core(GC ๋ณด์ )๋ก ์์ฑ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ฐฐํฌํ์ฌ ๋ณด์ ๋ฐ ์ด์์ฑ ์ธก๋ฉด์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
๊ณผ์ ๋ฐ ๋ฏธ๋ ๋ฐฉํฅ
WebAssembly GC ํตํฉ์ ์ค์ํ ๋ฐ์ ์ด์ง๋ง ์ฌ๋ฌ ๊ฐ์ง ๊ณผ์ ์ ํฅํ ๊ฐ๋ฐ ์์ญ์ด ๋จ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ๋๋ฑ์ฑ: ๋ค์ดํฐ๋ธ ์คํ ๋๋ ๋งค์ฐ ์ต์ ํ๋ JavaScript์ ์ฑ๋ฅ ๋๋ฑ์ฑ์ ๋ฌ์ฑํ๋ ๊ฒ์ ์ง์์ ์ธ ๋ ธ๋ ฅ์ ๋๋ค. GC ์ผ์ ์ค์ง, ์ฐธ์กฐ ์นด์ดํ ์ ์ค๋ฒํค๋ ๋ฐ ์ํธ ์ด์ฉ ๋ฉ์ปค๋์ฆ์ ํจ์จ์ฑ์ ๋ชจ๋ ์ ๊ทน์ ์ธ ์ต์ ํ ์์ญ์ ๋๋ค.
- ํด์ฒด์ธ ์ฑ์๋: Wasm GC๋ฅผ ๋์์ผ๋ก ํ๋ ๋ค์ํ ์ธ์ด์ ์ปดํ์ผ๋ฌ ๋ฐ ํด์ฒด์ธ์ ์์ง ์ฑ์ํ๊ณ ์์ต๋๋ค. ์ํํ ์ปดํ์ผ, ๋๋ฒ๊น ๋ฐ ํ๋กํ์ผ๋ง ํ๊ฒฝ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ํ์คํ ๋ฐ ์งํ: WebAssembly ์ฌ์์ ์ง์์ ์ผ๋ก ์งํํ๊ณ ์์ต๋๋ค. GC ๊ธฐ๋ฅ์ ๋ ๋์ Wasm ์ํ๊ณ์ ์ผ์น์ํค๊ณ ์ฃ์ง ์ฌ๋ก๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ํธ ์ด์ฉ์ฑ ๋ณต์ก์ฑ: Wasm GC๋ ์ํธ ์ด์ฉ์ฑ์ ๋จ์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง๋ง ๋ณต์กํ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค๋ฅธ GC ์์คํ (์: Wasm์ GC, ํธ์คํธ GC, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ) ๊ฐ์ ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด ์ฌ์ ํ ๋ณต์กํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น : Wasm ํ๊ฒฝ์์ GC'd ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ, GC ํ๋ ๋ฐ ์ฐธ์กฐ ์ฒด์ธ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํด์ผ ํฉ๋๋ค.
WebAssembly ์ปค๋ฎค๋ํฐ๋ ์ด๋ฌํ ์ ์ ์์ ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๋ ธ๋ ฅ์๋ Wasm ๋ฐํ์ ๋ด์์ ์ฐธ์กฐ ์นด์ดํ ๋ฐ ์ฃผ๊ธฐ ๊ฐ์ง์ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ณ , ๋ ๋์ ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ๊ณ , ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ง์ํ๋๋ก GC ์ ์์ ๊ฐ์ ํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ปค๋ฎค๋ํฐ ์ด๋์ ํฐ๋ธ:
- Blazor WebAssembly: C#์ผ๋ก ๋ํํ ํด๋ผ์ด์ธํธ ์ธก ์น UI๋ฅผ ๊ตฌ์ถํ ์ ์๋ Microsoft์ Blazor ํ๋ ์์ํฌ๋ .NET ๋ฐํ์์ Wasm์ผ๋ก ์ปดํ์ผํ๋ ๋ฐ ํฌ๊ฒ ์์กดํ๋ฉฐ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ์์ GC์ ์ค์ ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค.
- GraalVM: GraalVM๊ณผ ๊ฐ์ ํ๋ก์ ํธ๋ ๊ณ ๊ธ GC ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ Java ๋ฐ ๊ธฐํ ์ธ์ด๋ฅผ Wasm์ผ๋ก ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ํ์ํ๊ณ ์์ต๋๋ค.
- Rust ๋ฐ GC: Rust๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ํด ์์ ๊ถ ๋ฐ ๋น๋ฆผ์ ์ฌ์ฉํ์ง๋ง, GC ์๋ฏธ๋ก ์ด ์ ๋ฆฌํ ํน์ ์ฌ์ฉ ์ฌ๋ก๋ GC'd ์ธ์ด์์ ์ํธ ์ด์ฉ์ฑ์ ์ํด Wasm GC์ ํตํฉํ๋ ๊ฒ์ ํ์ํ๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
์ฐธ์กฐ ์นด์ดํ ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ๋ํ ์ง์์ ํฌํจํ์ฌ WebAssembly์ ๊ฐ๋น์ง ์ปฌ๋ ์ ํตํฉ์ ํ๋ซํผ์ ํ์ ์ ์ธ ์๊ฐ์ ํ์ํฉ๋๋ค. ์ด๋ Wasm์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ด๊ณ ํจ๊ณผ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ์๋ฅผ ํฌ๊ฒ ํ์ฅํ์ฌ ์ ์ธ๊ณ ๊ฐ๋ฐ์๊ฐ ์ ํธํ๋ ๊ณ ์์ค ์ธ์ด๋ฅผ ์๋กญ๊ณ ํฅ๋ฏธ๋ก์ด ๋ฐฉ์์ผ๋ก ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
๋ค์ํ ๊ธ๋ก๋ฒ ์์ฅ์ ํ๊ฒํ ํ๋ ๊ฐ๋ฐ์์๊ฒ ์ด๋ฌํ ๋ฐ์ ์ ์ดํดํ๋ ๊ฒ์ ํ๋์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ์ด์ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๊ธฐ์กด Java ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํ ํ๋ , Python ๊ธฐ๋ฐ ์น ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ , ๋๋ ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ์ ์๋ก์ด ์งํ์ ํ์ํ๋ , WebAssembly GC ํตํฉ์ ๊ฐ๋ ฅํ ์๋ก์ด ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ์ ์ด ์ฑ์ํ๊ณ ์ํ๊ณ๊ฐ ์ฑ์ฅํจ์ ๋ฐ๋ผ WebAssembly๊ฐ ์ ์ธ๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋์ฑ ํ์์ ์ธ ๋ถ๋ถ์ด ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ์ ์์ฉํ๋ฉด ๊ฐ๋ฐ์๋ WebAssembly์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ์ฌ ๋ชจ๋ ๊ณณ์ ์ฌ์ฉ์์๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ณด๋ค ์ ๊ตํ๊ณ ์์ ํ๋ฉฐ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.