๊ณ ๊ธ ์น์ด์ ๋ธ๋ฆฌ ๋ณด์์ ํ์ํ์ธ์. ์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ, ๋ฉํ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ์ธ, Wasm ๋ชจ๋ ๋ณ์กฐ ๋ฐฉ์ง๋ฅผ ํตํด ๊ฐ๋ ฅํ๊ณ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
์น์ด์ ๋ธ๋ฆฌ ์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ: ๋ฉํ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ํ ์ฌ์ธต ๋ถ์
์น์ด์ ๋ธ๋ฆฌ(Wasm)๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ฑ๋ฅ ํฅ์ ๋๊ตฌ๋ผ๋ ์ด๊ธฐ ์ญํ ์ ํจ์ฌ ๋ฐ์ด๋์ด ๋ฐ์ ํ์ต๋๋ค. ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ, ์ฃ์ง ์ปดํจํ , IoT, ๋ธ๋ก์ฒด์ธ ๋ฐ ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ์ํ ๋ณดํธ์ ์ด๊ณ ์ด์ ๊ฐ๋ฅํ๋ฉฐ ์์ ํ ์ปดํ์ผ ๋์์ด ๋์์ต๋๋ค. ์๋๋ฐ์ค ์คํ ๋ชจ๋ธ์ ๊ฐ๋ ฅํ ๋ณด์ ๊ธฐ๋ฐ์ ์ ๊ณตํ์ง๋ง, ๋ชจ๋ ๊ฐ๋ ฅํ ๊ธฐ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๋ถ ์ฌํญ์ ์ ๋ง๊ฐ ์จ์ด ์์ต๋๋ค. ์์ฒญ๋ ์ ์ฐ์ฑ์ ์์ฒ์ด์ ์ ์ฌ์ ์ธ ๋ณด์ ์ฌ๊ฐ์ง๋์ธ ์ธ๋ถ ์ฌํญ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ปค์คํ ์น์ (custom section)์ ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ ๋ฐํ์์ ๋ชจ๋์ ์ฝ๋ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์น์ ์ ์๊ฒฉํ๊ฒ ๊ฒ์ฆํ์ง๋ง, ์ธ์ํ์ง ๋ชปํ๋ ์ปค์คํ ์น์ ์ ์์ ํ ๋ฌด์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ ๋๋ถ์ ํด์ฒด์ธ๊ณผ ๊ฐ๋ฐ์๋ค์ ๋๋ฒ๊น ์ฌ๋ณผ๋ถํฐ ์ค๋งํธ ๊ณ์ฝ ABI์ ์ด๋ฅด๊ธฐ๊น์ง ์์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํธํ์ฑ์ ๊นจ์ง ์๊ณ ํฌํจ์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด '๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์'ํ๋ ๋์์ ๋ฉํ๋ฐ์ดํฐ ๋ณ์กฐ, ๊ณต๊ธ๋ง ๊ณต๊ฒฉ ๋ฐ ๊ธฐํ ์ทจ์ฝ์ ์ ๋ฌธ์ ์ด์ด์ค๋๋ค. ์ด ์น์ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ๋ขฐํ ์ ์์๊น์? ์ ์์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์์์ ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์์๊น์?
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์น์ด์ ๋ธ๋ฆฌ ์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ค์ํ ์ค๋ฌด๋ฅผ ์ฌ๋ ์๊ฒ ๋ค๋ฃน๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํ๋ก์ธ์ค๊ฐ ์์ ํ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ํ์์ ์ธ์ง ํ๊ตฌํ๊ณ , ๊ฐ๋จํ ํด์ฑ๋ถํฐ ๊ฐ๋ ฅํ ๋์งํธ ์๋ช ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฒ์ ๋ถ์ํ๋ฉฐ, ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ ๋ฐ์ด๋๋ฆฌ ํ์ ์ดํด: ๊ฐ๋จํ ๋ณต์ต
์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ด๋ ค์์ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ Wasm ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. `.wasm` ํ์ผ์ ๋จ์ํ ๊ธฐ๊ณ ์ฝ๋ ๋ฉ์ด๋ฆฌ๊ฐ ์๋๋ผ, ๊ฐ๊ฐ ํน์ ๋ชฉ์ ์ ๊ฐ์ง ๋ณ๊ฐ์ '์น์ '์ผ๋ก ๊ตฌ์ฑ๋ ๊ณ ๋๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ด๋๋ฆฌ ํ์์ ๋๋ค.
์ผ๋ฐ์ ์ธ Wasm ๋ชจ๋์ ๋งค์ง ๋๋ฒ(\0asm)์ ๋ฒ์ ๋ฒํธ๋ก ์์ํ๋ฉฐ, ๊ทธ ๋ค๋ฅผ ์ผ๋ จ์ ์น์
๋ค์ด ๋ฐ๋ฆ
๋๋ค. ์ด ์น์
๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅ๋ฉ๋๋ค:
- ์๋ ค์ง ์น์
(Known Sections): ์น์ด์
๋ธ๋ฆฌ ์ฌ์์ ์ ์๋์ด ์์ผ๋ฉฐ ๋ชจ๋ ํธํ ๋ฐํ์์ด ์ดํดํฉ๋๋ค. 0์ด ์๋ ์น์
ID๋ฅผ ๊ฐ์ง๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ์ ์น์ (ID 1): ๋ชจ๋์์ ์ฌ์ฉ๋๋ ํจ์ ์๊ทธ๋์ฒ๋ฅผ ์ ์ํฉ๋๋ค.
- ํจ์ ์น์ (ID 3): ๊ฐ ํจ์๋ฅผ ํ์ ์น์ ์ ์๊ทธ๋์ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์น์ (ID 5): ๋ชจ๋์ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค.
- ์ต์คํฌํธ ์น์ (ID 7): ํจ์, ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ ์ญ ๋ณ์๋ฅผ ํธ์คํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ฝ๋ ์น์ (ID 10): ๊ฐ ํจ์์ ๋ํ ์ค์ ์คํ ๊ฐ๋ฅํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค.
- ์ปค์คํ ์น์ (Custom Sections): ์ด ๋ถ๋ถ์ด ์ฐ๋ฆฌ์ ์ฃผ์ ๊ด์ฌ์ฌ์ ๋๋ค. ์ปค์คํ ์น์ ์ ์น์ ID 0์ผ๋ก ์๋ณ๋ฉ๋๋ค. Wasm ์ฌ์์ ๋ฐํ์๊ณผ ๋๊ตฌ๊ฐ ์ดํดํ์ง ๋ชปํ๋ ์ปค์คํ ์น์ ์ ์กฐ์ฉํ ๋ฌด์ํด์ผ ํ๋ค๊ณ ๊ท์ ํฉ๋๋ค.
์ปค์คํ ์น์ ์ ๊ตฌ์กฐ
์ปค์คํ ์น์ ์ ๊ตฌ์กฐ๋ ์ต๋์ ์ ์ฐ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค. ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ์น์ ID: ํญ์ 0์ ๋๋ค.
- ์ด๋ฆ: ์ปค์คํ ์น์ ์ ๋ชฉ์ ์ ์๋ณํ๋ ๋ฌธ์์ด์ ๋๋ค (์: "name", "dwarf_info", "component-type"). ์ด ์ด๋ฆ์ ํตํด ๋๊ตฌ๋ค์ ์์ ์ด ๊ด์ฌ ์๋ ์น์ ์ ์ฐพ์ ํด์ํ ์ ์์ต๋๋ค.
- ํ์ด๋ก๋: ์์์ ๋ฐ์ดํธ ์ํ์ค์ ๋๋ค. ์ด ํ์ด๋ก๋์ ๋ด์ฉ๊ณผ ํ์์ ์ ์ ์ผ๋ก ๊ทธ๊ฒ์ ์์ฑํ ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌ๋ ค ์์ต๋๋ค. Wasm ๋ฐํ์ ์์ฒด๋ ์ด ๋ฐ์ดํฐ์ ์ด๋ ํ ์ ์ฝ๋ ๊ฐํ์ง ์์ต๋๋ค.
์ด ๋์์ธ์ ์๋ ์ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ ์ํ๊ณ๊ฐ Rust ํจ๋ ์ ๋ณด, Go ๋ฐํ์ ๋ฐ์ดํฐ ๋๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ ์ ์์ ๊ฐ์ ํ๋ถํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ํ์ ํ ์ ์๊ฒ ํ์ง๋ง, ํ์ค Wasm ๋ฐํ์์ด ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ ์ ์๋ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋คโ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ด์ด์ผ ํ๋์ง ์ ํ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ณด์ ์ฌ๊ฐ์ง๋: ๊ฒ์ฆ๋์ง ์์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ํํ ์ด์
ํต์ฌ ๋ณด์ ๋ฌธ์ ๋ Wasm ๋ชจ๋๊ณผ ๊ทธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ ๋๊ตฌ ๋๋ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ ๋ขฐ ๊ด๊ณ์์ ๋ฐ์ํฉ๋๋ค. Wasm ๋ฐํ์์ ์ฝ๋๋ฅผ ์์ ํ๊ฒ ์คํํ์ง๋ง, ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ๋ค์ ์ปค์คํ ์น์ ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฌต์ ์ผ๋ก ์ ๋ขฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ๋ขฐ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค.
์ปค์คํ ์น์ ์ ํตํ ๊ณต๊ฒฉ ๋ฒกํฐ
- ๋ฉํ๋ฐ์ดํฐ ๋ณ์กฐ: ๊ณต๊ฒฉ์๋ ๊ฐ๋ฐ์๋ ๋๊ตฌ๋ฅผ ์ค๋ํ๊ธฐ ์ํด ์ปค์คํ ์น์ ์ ์์ ํ ์ ์์ต๋๋ค. ๋๋ฒ๊ทธ ์ ๋ณด(DWARF)๋ฅผ ๋ณ๊ฒฝํ์ฌ ์๋ชป๋ ์์ค ์ฝ๋ ๋ผ์ธ์ ๊ฐ๋ฆฌํค๊ฒ ํจ์ผ๋ก์จ ๋ณด์ ๊ฐ์ฌ ์ค์ ์ ์ฑ ๋ก์ง์ ์จ๊ธฐ๋ ๊ฒ์ ์์ํด ๋ณด์ญ์์ค. ๋๋ ๋ธ๋ก์ฒด์ธ ์ปจํ ์คํธ์์, ์ปค์คํ ์น์ ์ ์ ์ฅ๋ ์ค๋งํธ ๊ณ์ฝ์ ABI(Application Binary Interface)๋ฅผ ์์ ํ๋ฉด ํ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ (dApp)์ด ์๋ชป๋ ํจ์๋ฅผ ํธ์ถํ๊ฒ ํ์ฌ ์ฌ์ ์ ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์๋น์ค ๊ฑฐ๋ถ(DoS): Wasm ๋ฐํ์์ ์ ์ ์๋ ์ปค์คํ ์น์ ์ ๋ฌด์ํ์ง๋ง, ํด์ฒด์ธ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ปดํ์ผ๋ฌ, ๋ง์ปค, ๋๋ฒ๊ฑฐ ๋ฐ ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ข ์ข ํน์ ์ปค์คํ ์น์ ์ ํ์ฑํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ถฉ๋์ํค๋๋ก ํน๋ณํ ์ค๊ณ๋ ์๋ชป๋ ํ์์ ์ปค์คํ ์น์ (์: ์๋ชป๋ ๊ธธ์ด ์ ๋์ฌ ๋๋ ์ ํจํ์ง ์์ ๋ด๋ถ ๊ตฌ์กฐ)์ ๋ง๋ค์ด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๋ฐฉํดํ ์ ์์ต๋๋ค.
- ๊ณต๊ธ๋ง ๊ณต๊ฒฉ: Wasm ๋ชจ๋๋ก ๋ฐฐํฌ๋ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์๋ ๋น๋ ์๋ฒ๋ ์ค๊ฐ์ ๊ณต๊ฒฉ์ ํตํด ์ ์ฑ ์ปค์คํ ์น์ ์ด ์ฃผ์ ๋ ์ ์์ต๋๋ค. ์ด ์น์ ์ ๋์ค์ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋น๋ ๋๊ตฌ์ ์ํด ์ฝํ๋ ์ ์ฑ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ ์ฑ ์์กด์ฑ์ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋๋ก ์ง์ํ ์ ์์ต๋๋ค.
- ์๋ชป๋ ์ถ์ฒ ์ ๋ณด: ์ปค์คํ ์น์ ์ ์ข ์ข ๋น๋ ์ ๋ณด, ์์ค ์ฝ๋ ํด์ ๋๋ ๋ผ์ด์ ์ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ ์ฑ ๋ชจ๋์ ์ถ์ฒ๋ฅผ ์์ฅํ๊ฑฐ๋, ์ ๋ขฐํ ์ ์๋ ๊ฐ๋ฐ์์ ์ํ์ผ๋ก ๋๋ฆฌ๊ฑฐ๋, ๋ผ์ด์ ์ค๋ฅผ ์ ํ์ ์ธ ๊ฒ์์ ํ์ฉ์ ์ธ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ์๋๋ฆฌ์ค์์ Wasm ๋ชจ๋ ์์ฒด๋ ์๋๋ฐ์ค ๋ด์์ ์๋ฒฝํ๊ฒ ์คํ๋ ์ ์์ต๋๋ค. ์ทจ์ฝ์ ์ ์ ๋ขฐํ ์ ์๋ค๊ณ ๊ฐ์ ๋๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ Wasm ๋ชจ๋ ์ฃผ๋ณ์ ์ํ๊ณ์ ์์ต๋๋ค.
๋ฉํ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฒ
์ด๋ฌํ ์ํ์ ์ํํ๋ ค๋ฉด ์๋ฌต์ ์ ๋ขฐ ๋ชจ๋ธ์์ ๋ช ์์ ๊ฒ์ฆ ๋ชจ๋ธ๋ก ์ ํํด์ผ ํฉ๋๋ค. ์ด๋ ์ค์ํ ์ปค์คํ ์น์ ์ด ์ฌ์ฉ๋๊ธฐ ์ ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ง์์ฑ์ ํ์ธํ๋ ๊ฒ์ฆ ๊ณ์ธต์ ๊ตฌํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๊ฐ๋จํ ๊ฒ๋ถํฐ ์ํธํ์ ์ผ๋ก ์์ ํ ๊ฒ๊น์ง ์ฌ๋ฌ ๊ธฐ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ํด์ฑ ๋ฐ ์ฒดํฌ์ฌ
๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ ์ํธํ ํด์ ํจ์(์: SHA-256)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
- ์๋ ๋ฐฉ์: ๋น๋ ๊ณผ์ ์์ ์ปค์คํ ์น์ (์: `my_app_metadata`)์ด ์์ฑ๋ ํ, ๊ทธ SHA-256 ํด์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ํด์๋ ๋ค๋ฅธ ์ ์ฉ ์ปค์คํ ์น์ (์: `my_app_metadata.sha256`)์ด๋ Wasm ๋ชจ๋๊ณผ ํจ๊ป ์ ๊ณต๋๋ ์ธ๋ถ ๋งค๋ํ์คํธ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
- ๊ฒ์ฆ: ์๋นํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋๊ตฌ๋ `my_app_metadata` ์น์ ์ ์ฝ๊ณ ํด์๋ฅผ ๊ณ์ฐํ ๋ค์, ์ ์ฅ๋ ํด์์ ๋น๊ตํฉ๋๋ค. ์ผ์นํ๋ฉด ๋ฐ์ดํฐ๋ ํด์๊ฐ ๊ณ์ฐ๋ ์ดํ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์ ๋๋ค. ์ผ์นํ์ง ์์ผ๋ฉด ๋ชจ๋์ ๋ณ์กฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด ๊ฑฐ๋ถ๋ฉ๋๋ค.
์ฅ์ :
- ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ๊ณ์ฐ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
- ์ฐ๋ฐ์ ์ธ ์์๊ณผ ์๋์ ์ธ ์์ ์ ๋ํด ํ์ํ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋จ์ :
- ์ง์์ฑ ๋ถ์ฌ: ํด์ฑ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์์ ์ฆ๋ช ํ์ง๋ง, ๋๊ฐ ๋ง๋ค์๋์ง๋ ์ฆ๋ช ํ์ง ๋ชปํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ปค์คํ ์น์ ์ ์์ ํ๊ณ , ํด์๋ฅผ ๋ค์ ๊ณ์ฐํ ๋ค์, ํด์ ์น์ ๋ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ํด์ ์์ฒด๊ฐ ์์ ํ๊ณ ๋ณ์กฐ ๋ฐฉ์ง๋ ์์น์ ์ ์ฅ๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
- ํด์ ์์ฒด๋ฅผ ์ ๋ขฐํ๊ธฐ ์ํ ๋ณด์กฐ ์ฑ๋์ด ํ์ํฉ๋๋ค.
2. ๋์งํธ ์๋ช (๋น๋์นญ ์ํธํ)
๋ฌด๊ฒฐ์ฑ๊ณผ ์ง์์ฑ์ ๋ชจ๋ ์ ๊ณตํ๋ ํจ์ฌ ๊ฐ๋ ฅํ ๋ณด์ฆ์ ์ํด์๋ ๋์งํธ ์๋ช ์ด ํ์ค์ ๋๋ค.
- ์๋ ๋ฐฉ์: ์ด ๊ธฐ๋ฒ์ ๊ณต๊ฐ/๊ฐ์ธ ํค ์์ ์ฌ์ฉํฉ๋๋ค. Wasm ๋ชจ๋์ ์์ฑ์๋ ๊ฐ์ธ ํค๋ฅผ ๋ณด์ ํฉ๋๋ค.
- ๋จผ์ , ์ด์ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปค์คํ ์น์ ํ์ด๋ก๋์ ์ํธํ ํด์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ด ํด์๋ ์์ฑ์์ ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ(์๋ช )๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ก ๋์จ ์๋ช ์ ๋ค๋ฅธ ์ปค์คํ ์น์ (์: `my_app_metadata.sig`)์ ์ ์ฅ๋ฉ๋๋ค. ํด๋น ๊ณต๊ฐ ํค๋ ๊ฒ์ฆ์์๊ฒ ๋ฐฐํฌ๋์ด์ผ ํฉ๋๋ค. ๊ณต๊ฐ ํค๋ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅ๋๊ฑฐ๋, ์ ๋ขฐํ ์ ์๋ ๋ ์ง์คํธ๋ฆฌ์์ ๊ฐ์ ธ์ค๊ฑฐ๋, ์ฌ์ง์ด ๋ค๋ฅธ ์ปค์คํ ์น์ ์ ๋ฐฐ์น๋ ์๋ ์์ต๋๋ค(๋จ, ์ด ๊ฒฝ์ฐ ๊ณต๊ฐ ํค ์์ฒด๋ฅผ ์ ๋ขฐํ๊ธฐ ์ํ ๋ณ๋์ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค).
- ๊ฒ์ฆ: Wasm ๋ชจ๋์ ์๋น์๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค:
- `my_app_metadata` ์น์ ํ์ด๋ก๋์ ํด์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- `my_app_metadata.sig` ์น์ ์์ ์๋ช ์ ์ฝ์ต๋๋ค.
- ์์ฑ์์ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ ๋ณตํธํํ์ฌ ์๋ณธ ํด์๋ฅผ ์ป์ต๋๋ค.
- ๋ณตํธํ๋ ํด์๋ฅผ ์ฒซ ๋จ๊ณ์์ ๊ณ์ฐํ ํด์์ ๋น๊ตํฉ๋๋ค. ์ผ์นํ๋ฉด ์๋ช ์ด ์ ํจํ ๊ฒ์ ๋๋ค. ์ด๋ ๋ ๊ฐ์ง๋ฅผ ์ฆ๋ช ํฉ๋๋ค: ๋ฐ์ดํฐ๊ฐ ๋ณ์กฐ๋์ง ์์์ผ๋ฉฐ(๋ฌด๊ฒฐ์ฑ), ๊ฐ์ธ ํค ์์ ์์ ์ํด ์๋ช ๋์๋ค๋ ๊ฒ(์ง์์ฑ/์ถ์ฒ)์ ๋๋ค.
์ฅ์ :
- ๋ฌด๊ฒฐ์ฑ๊ณผ ์ง์์ฑ ๋ชจ๋์ ๋ํ ๊ฐ๋ ฅํ ๋ณด์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณต๊ฐ ํค๋ ๋ณด์์ ์์์ํค์ง ์๊ณ ๋๋ฆฌ ๋ฐฐํฌ๋ ์ ์์ต๋๋ค.
- ์์ ํ ์ํํธ์จ์ด ๊ณต๊ธ๋ง์ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค.
๋จ์ :
- ๊ตฌํ ๋ฐ ๊ด๋ฆฌ(ํค ์์ฑ, ๋ฐฐํฌ, ํ๊ธฐ)๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ๋จ์ ํด์ฑ์ ๋นํด ๊ฒ์ฆ ์ ์ฝ๊ฐ ๋ ๋ง์ ๊ณ์ฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค.
3. ์คํค๋ง ๊ธฐ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ
๋ฌด๊ฒฐ์ฑ ๋ฐ ์ง์์ฑ ๊ฒ์ฌ๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๊ณ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ์์์ ๋ณด์ฅํ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅธ ํ์์์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. ๊ตฌ์กฐ์ ์ผ๋ก ์ ํจํ์ง ์์ ์ปค์คํ ์น์ ์ ์ฌ์ ํ ํ์๋ฅผ ์ถฉ๋์ํฌ ์ ์์ต๋๋ค. ์คํค๋ง ๊ธฐ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- ์๋ ๋ฐฉ์: ์ปค์คํ ์น์ ํ์ด๋ก๋์ ๋ฐ์ด๋๋ฆฌ ํ์์ ๋ํ ์๊ฒฉํ ์คํค๋ง๋ฅผ ์ ์ํฉ๋๋ค. ์ด ์คํค๋ง๋ ํ๋กํ ์ฝ ๋ฒํผ, ํ๋ซ๋ฒํผ ๋๋ ์ฌ์ฉ์ ์ ์ ์ฌ์๊ณผ ๊ฐ์ ํ์์ ์ฌ์ฉํ์ฌ ์ ์ํ ์ ์์ต๋๋ค. ์คํค๋ง๋ ์์๋๋ ๋ฐ์ดํฐ ์ ํ, ๊ธธ์ด ๋ฐ ๊ตฌ์กฐ์ ์์๋ฅผ ๊ท์ ํฉ๋๋ค.
- ๊ฒ์ฆ: ๊ฒ์ฆ๊ธฐ๋ ๋ฏธ๋ฆฌ ์ ์๋ ์คํค๋ง์ ๋ฐ๋ผ ์ปค์คํ ์น์ ์ ํ์ด๋ก๋๋ฅผ ๋์ฝ๋ฉํ๋ ค๊ณ ์๋ํ๋ ํ์์ ๋๋ค. ํ์ฑ์ด ์ค๋ฅ ์์ด ์ฑ๊ณตํ๋ฉด(์: ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ์์, ํ์ ๋ถ์ผ์น ์์, ๋ชจ๋ ํ์ ํ๋ ์กด์ฌ), ์น์ ์ ๊ตฌ์กฐ์ ์ผ๋ก ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ํ์ฑ์ด ์ด๋ ์ง์ ์์๋ ์คํจํ๋ฉด ์น์ ์ ๊ฑฐ๋ถ๋ฉ๋๋ค.
์ฅ์ :
- ์๋ชป๋ ํ์์ ๋ฐ์ดํฐ๋ก๋ถํฐ ํ์๋ฅผ ๋ณดํธํ์ฌ ์ผ์ข ์ DoS ๊ณต๊ฒฉ์ ๋ฐฉ์งํฉ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ์ปค์คํ ๋ฐ์ดํฐ ํ์์ ๋ํ ๋ฌธ์ ์ญํ ์ ํฉ๋๋ค.
๋จ์ :
- ๊ตฌ์กฐ์ ์ผ๋ก๋ ์ ํจํ์ง๋ง ์๋ฏธ์ ์ผ๋ก๋ ์ ์์ ์ธ ํ์ด๋ก๋๋ฅผ ๋ง๋๋ ์๋ จ๋ ๊ณต๊ฒฉ์๋ก๋ถํฐ๋ ๋ณดํธํ์ง ๋ชปํฉ๋๋ค.
- ์คํค๋ง์ ๊ฒ์ฆ๊ธฐ ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ํ์ํฉ๋๋ค.
๊ณ์ธต์ ์ ๊ทผ ๋ฐฉ์: ๋ชจ๋ ์ฅ์ ์ ๊ฒฐํฉ
์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์ํธ ๋ฐฐํ์ ์ด์ง ์์ต๋๋ค. ์ฌ์ค, ๊ณ์ธต์ ๋ณด์ ์ ๋ต์ผ๋ก ๊ฒฐํฉ๋ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํฉ๋๋ค:
๊ถ์ฅ ์ ํจ์ฑ ๊ฒ์ฌ ํ์ดํ๋ผ์ธ:
- ์์น ํ์ ๋ฐ ๋ถ๋ฆฌ: ๋จผ์ Wasm ๋ชจ๋์ ํ์ฑํ์ฌ ๋์ ์ปค์คํ ์น์ (์: `my_app_metadata`)๊ณผ ํด๋น ์๋ช ์น์ (`my_app_metadata.sig`)์ ์ฐพ์ต๋๋ค.
- ์ง์์ฑ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ: ๋์งํธ ์๋ช ์ ์ฌ์ฉํ์ฌ `my_app_metadata` ์น์ ์ด ์ง๋ณธ์ด๋ฉฐ ๋ณ์กฐ๋์ง ์์๋์ง ํ์ธํฉ๋๋ค. ์ด ๊ฒ์ฌ์ ์คํจํ๋ฉด ์ฆ์ ๋ชจ๋์ ๊ฑฐ๋ถํฉ๋๋ค.
- ๊ตฌ์กฐ ์ ํจ์ฑ ๊ฒ์ฌ: ์๋ช ์ด ์ ํจํ๋ฉด ์คํค๋ง ๊ธฐ๋ฐ ๊ฒ์ฆ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ `my_app_metadata` ํ์ด๋ก๋๋ฅผ ํ์ฑํฉ๋๋ค. ํ์์ด ์๋ชป๋ ๊ฒฝ์ฐ ๋ชจ๋์ ๊ฑฐ๋ถํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ฌ์ฉ: ๋ ๊ฒ์ฌ๋ฅผ ๋ชจ๋ ํต๊ณผํ ํ์๋ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ๋ขฐํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ์ธต์ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ์ดํฐ ๋ณ์กฐ๋ฟ๋ง ์๋๋ผ ํ์ฑ ๊ธฐ๋ฐ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ๋ ๋ณดํธํ์ฌ ๊ฐ๋ ฅํ ์ฌ์ธต ๋ฐฉ์ด ๋ณด์ ํ์ธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค์ฉ์ ์ธ ๊ตฌํ ๋ฐ ํด๋ง
์ด๋ฌํ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ๋ ค๋ฉด Wasm ๋ฐ์ด๋๋ฆฌ๋ฅผ ์กฐ์ํ๊ณ ๊ฒ์ฌํ ์ ์๋ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค. ์ํ๊ณ๋ ๋ช ๊ฐ์ง ํ๋ฅญํ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
์ปค์คํ ์น์ ์กฐ์์ ์ํ ํด๋ง
- wasm-tools: Wasm ๋ฐ์ด๋๋ฆฌ๋ฅผ ํ์ฑ, ์ถ๋ ฅ, ์กฐ์ํ๊ธฐ ์ํ ๋ช ๋ น์ค ๋๊ตฌ ๋ชจ์ ๋ฐ Rust ํฌ๋ ์ดํธ์ ๋๋ค. ๋น๋ ์คํฌ๋ฆฝํธ์ ์ผ๋ถ๋ก ์ปค์คํ ์น์ ์ ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ๊ฒ์ฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, `wasm-tools strip` ๋ช ๋ น์ ์ปค์คํ ์น์ ์ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, `wasm-tools` ํฌ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ ์ถ๊ฐํ๋ ์ฌ์ฉ์ ์ ์ ํ๋ก๊ทธ๋จ์ ๋น๋ํ ์ ์์ต๋๋ค.
- Binaryen: ์น์ด์ ๋ธ๋ฆฌ๋ฅผ ์ํ ์ปดํ์ผ๋ฌ ๋ฐ ํด์ฒด์ธ ์ธํ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. `wasm-opt` ๋๊ตฌ๋ ๋ค์ํ ๋ณํ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, C++ API๋ ์ปค์คํ ์น์ ์ ํฌํจํ์ฌ ๋ชจ๋ ๊ตฌ์กฐ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ธ์ด๋ณ ํด์ฒด์ธ: `wasm-bindgen`(Rust์ฉ)๊ณผ ๊ฐ์ ๋๊ตฌ๋ ๋ค๋ฅธ ์ธ์ด์ฉ ์ปดํ์ผ๋ฌ๋ ์ข ์ข ์ปดํ์ผ ๊ณผ์ ์์ ์ปค์คํ ์น์ ์ ์ฃผ์ ํ๋ ๋ฉ์ปค๋์ฆ์ด๋ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค.
๊ฒ์ฆ๊ธฐ๋ฅผ ์ํ ์์ฌ ์ฝ๋
๋ค์์ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒ์ฆ๊ธฐ ํจ์๊ฐ ์ด๋ค ๋ชจ์ต์ผ์ง์ ๋ํ ๊ฐ๋ ์ ์ด๊ณ ๊ณ ์์ค์ ์์ ๋๋ค:
function validateWasmModule(wasmBytes, trustedPublicKey) { // 1๋จ๊ณ: ๋ชจ๋์ ํ์ฑํ์ฌ ๊ด๋ จ ์น์ ์ฐพ๊ธฐ const module = parseWasmSections(wasmBytes); const metadataSection = module.findCustomSection("my_app_metadata"); const signatureSection = module.findCustomSection("my_app_metadata.sig"); if (!metadataSection || !signatureSection) { throw new Error("ํ์ ๋ฉํ๋ฐ์ดํฐ ๋๋ ์๋ช ์น์ ์ด ์์ต๋๋ค."); } // 2๋จ๊ณ: ๋์งํธ ์๋ช ๊ฒ์ฆ const metadataPayload = metadataSection.payload; const signature = signatureSection.payload; const isSignatureValid = crypto.verify(metadataPayload, signature, trustedPublicKey); if (!isSignatureValid) { throw new Error("๋ฉํ๋ฐ์ดํฐ ์๋ช ์ด ์ ํจํ์ง ์์ต๋๋ค. ๋ชจ๋์ด ๋ณ์กฐ๋์์ ์ ์์ต๋๋ค."); } // 3๋จ๊ณ: ์คํค๋ง ๊ธฐ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ์ํ try { const parsedMetadata = MyAppSchema.decode(metadataPayload); // ๋ฐ์ดํฐ๊ฐ ์ ํจํ๋ฉฐ ์ ๋ขฐํ ์ ์์ return { success: true, metadata: parsedMetadata }; } catch (error) { throw new Error("๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ํจํ์ง ์์ต๋๋ค: " + error.message); } }
์ค์ ์ฌ์ฉ ์ฌ๋ก
์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ์ ํ์์ฑ์ ์ด๋ก ์ ์ธ ๊ฒ์ด ์๋๋๋ค. ๋ง์ ํ๋ Wasm ์ฌ์ฉ ์ฌ๋ก์์ ์ค์ฉ์ ์ธ ์๊ตฌ ์ฌํญ์ ๋๋ค.
- ๋ธ๋ก์ฒด์ธ์์์ ์์ ํ ์ค๋งํธ ๊ณ์ฝ: ์ค๋งํธ ๊ณ์ฝ์ ABI๋ ๊ณต๊ฐ ํจ์๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ด ABI๊ฐ ์ปค์คํ ์น์ ์ ์ ์ฅ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ์๋ช ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ ์์ ์ธ ํ์์๊ฐ ์ฌ๊ธฐ์ฑ ABI๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ฌ์ฉ์์ ์ง๊ฐ์ด๋ dApp์ด ๊ณ์ฝ๊ณผ ์๋ชป ์ํธ์์ฉํ๋๋ก ์์ด๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ๊ฒ์ฆ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์์ฌ ๋ช ์ธ์(SBOM): ๊ณต๊ธ๋ง ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด Wasm ๋ชจ๋์ ์์ฒด SBOM์ ์ปค์คํ ์น์ ์ ํฌํจํ ์ ์์ต๋๋ค. ์ด ์น์ ์ ์๋ช ํ๋ฉด ์์กด์ฑ ๋ชฉ๋ก์ด ์ง๋ณธ์ด๋ฉฐ ์ทจ์ฝํ๊ฑฐ๋ ์ ์์ ์ธ ๊ตฌ์ฑ ์์๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ๋ณ๊ฒฝ๋์ง ์์์์ ๋ณด์ฅํฉ๋๋ค. ๋ชจ๋ ์๋น์๋ ์ฌ์ฉ ์ ์ ๊ทธ ๋ด์ฉ์ ์๋์ผ๋ก ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- ์์ ํ ํ๋ฌ๊ทธ์ธ ์์คํ : ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ (ํ๋ก์, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํฌ๋ฆฌ์์ดํฐ๋ธ ๋๊ตฌ ๋ฑ)์ ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ์ Wasm์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ๋ก๋ํ๊ธฐ ์ ์ ํธ์คํธ๋ ์๋ช ๋ `permissions` ์ปค์คํ ์น์ ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ์น์ ์ ํ๋ฌ๊ทธ์ธ์ ํ์ํ ๊ธฐ๋ฅ(์: ํ์ผ ์์คํ ์ ๊ทผ, ๋คํธ์ํฌ ์ ๊ทผ)์ ์ ์ธํ ์ ์์ต๋๋ค. ์๋ช ์ ๊ฒ์ ํ ๊ณต๊ฒฉ์์ ์ํด ๊ถํ์ด ์์น๋์ง ์์์์ ๋ณด์ฅํฉ๋๋ค.
- ์ฝํ ์ธ ์ฃผ์ ์ง์ ๋ฐฉ์ ๋ฐฐํฌ: ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ Wasm ๋ชจ๋์ ๋ชจ๋ ์น์ ์ ํด์ฑํจ์ผ๋ก์จ ํด๋น ํน์ ๋น๋์ ๋ํ ๊ณ ์ ์๋ณ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๋ฌด๊ฒฐ์ฑ์ด ํต์ฌ ์์น์ธ IPFS์ ๊ฐ์ ์ฝํ ์ธ ์ฃผ์ ์ง์ ์ ์ฅ ์์คํ ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ปค์คํ ์น์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ด๋ฌํ ๊ฒฐ์ ๋ก ์ ์ ์ฒด์ฑ์ ๋ณด์ฅํ๋ ํต์ฌ ๋ถ๋ถ์ ๋๋ค.
๋ฏธ๋: ํ์คํ์ ์ปดํฌ๋ํธ ๋ชจ๋ธ
์น์ด์ ๋ธ๋ฆฌ ์ปค๋ฎค๋ํฐ๋ ๋ชจ๋ ๋ฌด๊ฒฐ์ฑ์ ์ค์์ฑ์ ์ธ์ํ๊ณ ์์ต๋๋ค. Wasm ์ปค๋ฎค๋ํฐ ๊ทธ๋ฃน ๋ด์์ ๋ชจ๋ ์๋ช ๋ฐ ๊ธฐํ ๋ณด์ ๊ธฐ๋ณธ ์์๋ฅผ ํ์คํํ๋ ๊ฒ์ ๋ํ ๋ ผ์๊ฐ ์งํ ์ค์ ๋๋ค. ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฐํ์๊ณผ ๋๊ตฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ฆ์ ์ํํ ์ ์๊ฒ ํ์ฌ ๊ฐ๋ฐ์์ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ ๊ฒ์ ๋๋ค.
๋ ๋์๊ฐ, ์๋กญ๊ฒ ๋ถ์ํ๋ ์น์ด์ ๋ธ๋ฆฌ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ Wasm ๋ชจ๋์ด ์๋ก ๋ฐ ํธ์คํธ์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ํ์คํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๋ `component-type`์ด๋ผ๋ ์ปค์คํ ์น์ ์์ ๊ณ ์์ค ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค. ์ด ์น์ ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์ฒด ์ปดํฌ๋ํธ ์ํ๊ณ์ ๋ณด์์ ๊ฐ์ฅ ์ค์ํ๋ฉฐ, ์ฌ๊ธฐ์ ๋ ผ์๋ ๊ฒ์ฆ ๊ธฐ๋ฒ์ ๋์ฑ ์ค์ํ๊ฒ ๋ง๋ญ๋๋ค.
๊ฒฐ๋ก : ์ ๋ขฐ์์ ๊ฒ์ฆ์ผ๋ก
์น์ด์ ๋ธ๋ฆฌ ์ปค์คํ ์น์ ์ ํ์์ ์ธ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ ์ํ๊ณ๊ฐ ํ๋ถํ๊ณ ๋๋ฉ์ธ ํนํ์ ์ธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋์ ์ง์ ํฌํจํ ์ ์๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฐ์ฑ์๋ ๊ฒ์ฆ์ ์ฑ ์์ด ๋ฐ๋ฆ ๋๋ค. Wasm ๋ฐํ์์ ๊ธฐ๋ณธ ๋์, ์ฆ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ์ ๋ฌด์ํ๋ ๊ฒ์ ์ ์ฉ๋ ์ ์๋ ์ ๋ขฐ์ ๊ฒฉ์ฐจ๋ฅผ ๋ง๋ญ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ๋ก ๊ตฌ์ถํ๋ ๊ฐ๋ฐ์ ๋๋ ์ํคํ ํธ๋ก์, ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋ฌต์ ์ผ๋ก ์ ๋ขฐํ๋ ๊ฒ์์ ๋ช ์์ ์ผ๋ก ๊ฒ์ฆํ๋ ๊ฒ์ผ๋ก ์ฌ๊ณ ๋ฐฉ์์ ์ ํํด์ผ ํฉ๋๋ค. ๊ตฌ์กฐ์ ์ ํ์ฑ์ ์ํ ์คํค๋ง ๊ฒ์ฌ์ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ง์์ฑ์ ์ํ ๋์งํธ ์๋ช ์ ๊ฒฐํฉํ ๊ณ์ธต์ ๊ฒ์ฆ ์ ๋ต์ ๊ตฌํํจ์ผ๋ก์จ ์ด ๋ณด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ ์ ์์ต๋๋ค.
์์ ํ๊ณ , ๊ฐ๋ ฅํ๋ฉฐ, ์ ๋ขฐํ ์ ์๋ Wasm ์ํ๊ณ๋ฅผ ๊ตฌ์ถํ๋ ค๋ฉด ๋ชจ๋ ๊ณ์ธต์์ ์ฑ์คํจ์ด ์๊ตฌ๋ฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ณด์ ์ฒด์ธ์ ์ฝํ ๊ณ ๋ฆฌ๊ฐ ๋๊ฒ ๋์ง ๋ง์ญ์์ค. ์ปค์คํ ์น์ ์ ๊ฒ์ฆํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ฉฐ, ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๊ตฌ์ถํ์ญ์์ค.