WebAssembly ์์ธ ์ฒ๋ฆฌ ์ ์์ ์ฑ๋ฅ์ ํ์ํฉ๋๋ค. ๊ธฐ์กด ์ค๋ฅ ์ฝ๋ ๋ฐฉ์๊ณผ ๋น๊ตํ๊ณ Wasm ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํต์ฌ ์ต์ ํ ์ ๋ต์ ์์๋ณด์ธ์.
WebAssembly ์์ธ ์ฒ๋ฆฌ ์ฑ๋ฅ: ์ค๋ฅ ์ฒ๋ฆฌ ์ต์ ํ ์ฌ์ธต ๋ถ์
WebAssembly(Wasm)๋ ์น์ ๋ค ๋ฒ์งธ ์ธ์ด๋ก์์ ์ ์ง๋ฅผ ๊ตณํ์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ผ๋ก ์ํํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ณ ์ฑ๋ฅ ๊ฒ์ ์์ง๊ณผ ๋น๋์ค ํธ์ง ์ ํ๊ตฐ๋ถํฐ Python ๋ฐ .NET๊ณผ ๊ฐ์ ์ ์ฒด ์ธ์ด ๋ฐํ์ ์คํ์ ์ด๋ฅด๊ธฐ๊น์ง, Wasm์ ์น ํ๋ซํผ์์ ๊ฐ๋ฅํ ๊ฒ์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ซ๋์ ํผ์ฆ์ ์ค์ํ ํ ์กฐ๊ฐ์ด ๋น ์ ธ ์์์ต๋๋ค. ๋ฐ๋ก ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ์คํ๋๊ณ ๊ณ ์ฑ๋ฅ์ธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ข ์ข ๋ฒ๊ฑฐ๋กญ๊ณ ๋นํจ์จ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์กดํด์ผ๋ง ํ์ต๋๋ค.
WebAssembly ์์ธ ์ฒ๋ฆฌ(EH) ์ ์์ ๋์ ์ ํจ๋ฌ๋ค์์ ์ ํ์ ๋๋ค. ์ด๋ ๊ฐ๋ฐ์์๊ฒ ์ธ์ฒด๊ณตํ์ ์ด๋ฉด์๋ ๊ฒฐ์ ์ ์ผ๋ก ์ฑ๋ฅ์ ์ํด ์ค๊ณ๋, ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋ค์ดํฐ๋ธ ์ค๋ฅ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ด ์ค์ ๋ก ๋ฌด์์ ์๋ฏธํ ๊น์? ๊ธฐ์กด ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ๋น๊ตํ๋ฉด ์ด๋ป๊ณ , ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป๊ฒ ์ต์ ํํ ์ ์์๊น์?
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ WebAssembly ์์ธ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ํน์ฑ์ ํ์ํ ๊ฒ์ ๋๋ค. ๋ด๋ถ ์๋ ๋ฐฉ์์ ๋ถ์ํ๊ณ , ๊ณ ์ ์ ์ธ ์ค๋ฅ ์ฝ๋ ํจํด๊ณผ ๋ฒค์น๋งํนํ๋ฉฐ, ํต์ฌ ๋ก์ง๋งํผ์ด๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ ์ ์๋ ์คํ ๊ฐ๋ฅํ ์ ๋ต์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
WebAssembly์์์ ์ค๋ฅ ์ฒ๋ฆฌ ์งํ
Wasm EH ์ ์์ ์ค์์ฑ์ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ๋จผ์ ๊ทธ ์ด์ ์ ์กด์ฌํ๋ ํ๊ฒฝ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๊ธฐ Wasm ๊ฐ๋ฐ์ ์ ๊ตํ ์ค๋ฅ ์ฒ๋ฆฌ ๊ธฐ๋ณธ ์์๊ฐ ๋๋ ทํ๊ฒ ๋ถ์กฑํ ๊ฒ์ด ํน์ง์ด์์ต๋๋ค.
์์ธ ์ฒ๋ฆฌ ์ด์ ์๋: ํธ๋ฉ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ํธ์ด์ฉ
WebAssembly์ ์ด๊ธฐ ๋ฒ์ ์์ ์ค๋ฅ ์ฒ๋ฆฌ๋ ๊ธฐ๊ปํด์ผ ์ด๋ณด์ ์ธ ์์ค์ด์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ฃผ๋ก ๋ ๊ฐ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค:
- ํธ๋ฉ(Traps): ํธ๋ฉ์ Wasm ๋ชจ๋์ ์คํ์ ์ฆ์ ์ข ๋ฃ์ํค๋ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ์ ๋๋ค. 0์ผ๋ก ๋๋๊ธฐ, ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ, ๋๋ null ํจ์ ํฌ์ธํฐ์ ๋ํ ๊ฐ์ ํธ์ถ ๋ฑ์ ์๊ฐํ ์ ์์ต๋๋ค. ์น๋ช ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ์๋ฆฌ๋ ๋ฐ๋ ํจ๊ณผ์ ์ด์ง๋ง, ํธ๋ฉ์ ๋ฌด๋ ๋๊ตฌ์ ๋๋ค. ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ์๋ชป๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ๋คํธ์ํฌ ์ฅ์ ์ ๊ฐ์ ์์ธก ๊ฐ๋ฅํ๊ณ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ๋ถ์ ํฉํฉ๋๋ค.
- ์ค๋ฅ ์ฝ๋ ๋ฐํ: ์ด๊ฒ์ด ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ค๋ฅ์ ๋ํ ์ฌ์ค์์ ํ์ค์ด ๋์์ต๋๋ค. Wasm ํจ์๋ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ ๋ํ๋ด๋ ์ซ์ ๊ฐ(์ฃผ๋ก ์ ์)์ ๋ฐํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐํ ๊ฐ `0`์ ์ฑ๊ณต์ ์๋ฏธํ ์ ์๊ณ , 0์ด ์๋ ๊ฐ์ ๋ค๋ฅธ ์ค๋ฅ ์ ํ์ ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํธ์คํธ ์ฝ๋๋ Wasm ํจ์๋ฅผ ํธ์ถํ๊ณ ์ฆ์ ๋ฐํ ๊ฐ์ ํ์ธํฉ๋๋ค.
์ค๋ฅ ์ฝ๋ ํจํด์ ์ผ๋ฐ์ ์ธ ์์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค:
C/C++์์ (Wasm์ผ๋ก ์ปดํ์ผ๋ ์ฝ๋):
// 0 for success, non-zero for error
int process_data(char* data, int length) {
if (length <= 0) {
return 1; // ERROR_INVALID_LENGTH
}
if (data == NULL) {
return 2; // ERROR_NULL_POINTER
}
// ... actual processing ...
return 0; // SUCCESS
}
์๋ฐ์คํฌ๋ฆฝํธ์์ (ํธ์คํธ):
const wasmInstance = ...;
const errorCode = wasmInstance.exports.process_data(dataPtr, dataLength);
if (errorCode !== 0) {
const errorMessage = mapErrorCodeToMessage(errorCode);
console.error(`Wasm module failed: ${errorMessage}`);
// Handle the error in UI...
} else {
// Continue with the successful result
}
์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ํ๊ณ
๊ธฐ๋ฅ์ ์ผ๋ก๋ ๋์ํ์ง๋ง, ์ค๋ฅ ์ฝ๋ ํจํด์ ์ฑ๋ฅ, ์ฝ๋ ํฌ๊ธฐ, ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น๋ ์๋นํ ๋ถ๋ด์ ์๊ณ ์์ต๋๋ค:
- "์ ์ ๊ฒฝ๋ก(Happy Path)"์์์ ์ฑ๋ฅ ์ค๋ฒํค๋: ์ ์ฌ์ ์ผ๋ก ์คํจํ ์ ์๋ ๋ชจ๋ ๋จ์ผ ํจ์ ํธ์ถ์ ํธ์คํธ ์ฝ๋์์ ๋ช ์์ ์ธ ํ์ธ(`if (errorCode !== 0)`)์ ํ์๋ก ํฉ๋๋ค. ์ด๋ ๋ถ๊ธฐ๋ฅผ ์ ๋ฐํ์ฌ CPU์์ ํ์ดํ๋ผ์ธ ์คํจ ๋ฐ ๋ถ๊ธฐ ์์ธก ์คํจ ํ๋ํฐ๋ก ์ด์ด์ง ์ ์์ผ๋ฉฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ ๋์๋ ๋ชจ๋ ์์ ์ ์์ง๋ง ์ง์์ ์ธ ์ฑ๋ฅ ์ ํ๋ฅผ ๋์ ์ํต๋๋ค.
- ์ฝ๋ ๋ธ๋กํธ(Code Bloat): ์ค๋ฅ ๊ฒ์ฌ์ ๋ฐ๋ณต์ ์ธ ํน์ฑ์ Wasm ๋ชจ๋(ํธ์ถ ์คํ ์๋ก ์ค๋ฅ๋ฅผ ์ ํํ๊ธฐ ์ํ ๊ฒ์ฌ ํฌํจ)๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธ๋ฃจ ์ฝ๋ ๋ชจ๋๋ฅผ ๋ถํ๋ฆฝ๋๋ค.
- ๊ฒฝ๊ณ ๊ต์ฐจ ๋น์ฉ(Boundary Crossing Costs): ๊ฐ ์ค๋ฅ๋ ๋จ์ง ์๋ณ๋๊ธฐ ์ํด Wasm-JS ๊ฒฝ๊ณ๋ฅผ ์์ ํ ์๋ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํธ์คํธ๋ ์ข ์ข ์ค๋ฅ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด Wasm์ผ๋ก ๋ค์ ํธ์ถํด์ผ ํ๋ฏ๋ก ์ค๋ฒํค๋๊ฐ ๋์ฑ ์ฆ๊ฐํฉ๋๋ค.
- ํ๋ถํ ์ค๋ฅ ์ ๋ณด์ ์์ค: ์ ์ ์ค๋ฅ ์ฝ๋๋ ํ๋์ ์ธ ์์ธ๋ฅผ ๋์ฒดํ๊ธฐ์๋ ๋ถ์กฑํฉ๋๋ค. ์คํ ํธ๋ ์ด์ค, ์ค๋ช ์ ์ธ ๋ฉ์์ง, ๊ตฌ์กฐํ๋ ํ์ด๋ก๋๋ฅผ ์ ๋ฌํ ์ ์๋ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ์ฌ ๋๋ฒ๊น ์ ํจ์ฌ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
- ์ํผ๋์ค ๋ถ์ผ์น(Impedance Mismatch): C++, Rust, C#๊ณผ ๊ฐ์ ๊ณ ์์ค ์ธ์ด๋ ๊ฒฌ๊ณ ํ๊ณ ๊ด์ฉ์ ์ธ ์์ธ ์ฒ๋ฆฌ ์์คํ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์ค๋ฅ ์ฝ๋ ๋ชจ๋ธ๋ก ์ปดํ์ผํ๋๋ก ๊ฐ์ ํ๋ ๊ฒ์ ๋ถ์์ฐ์ค๋ฝ์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ค์ดํฐ๋ธ ์์ธ๋ฅผ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด ๋ณต์กํ๊ณ ์ข ์ข ๋นํจ์จ์ ์ธ ์ํ ๋จธ์ ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ๋๋ฆฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์ฌ(shim)์ ์์กดํด์ผ ํ์ผ๋ฉฐ, ์ด๋ Wasm์ ๋ง์ ์ฑ๋ฅ ์ด์ ์ ์์์์ผฐ์ต๋๋ค.
WebAssembly ์์ธ ์ฒ๋ฆฌ(EH) ์ ์ ์๊ฐ
์ฃผ์ ๋ธ๋ผ์ฐ์ ์ ํด์ฒด์ธ์์ ์ง์๋๋ Wasm EH ์ ์์ Wasm ๊ฐ์ ๋จธ์ ์์ฒด ๋ด์ ๋ค์ดํฐ๋ธ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋์ ํ์ฌ ์ด๋ฌํ ๋จ์ ๋ค์ ์ ๋ฉด์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
Wasm EH ์ ์์ ํต์ฌ ๊ฐ๋
์ด ์ ์์ ๋ง์ ๊ณ ์์ค ์ธ์ด์์ ๋ณผ ์ ์๋ `try...catch...throw` ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ฐ์ํ๋ ์๋ก์ด ์ ์์ค ๋ช ๋ น์ด ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค:
- ํ๊ทธ(Tags): ์์ธ `ํ๊ทธ`๋ ์์ธ์ ์ ํ์ ์๋ณํ๋ ์๋ก์ด ์ข ๋ฅ์ ์ ์ญ ์ํฐํฐ์ ๋๋ค. ์ด๊ฒ์ ์ค๋ฅ์ "ํด๋์ค" ๋๋ "์ ํ"์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ํ๊ทธ๋ ํด๋น ์ข ๋ฅ์ ์์ธ๊ฐ ํ์ด๋ก๋๋ก ์ ๋ฌํ ์ ์๋ ๊ฐ์ ๋ฐ์ดํฐ ์ ํ์ ์ ์ํฉ๋๋ค.
throw: ์ด ๋ช ๋ น์ด๋ ํ๊ทธ์ ํ์ด๋ก๋ ๊ฐ ์ธํธ๋ฅผ ๋ฐ์ต๋๋ค. ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ๋๊น์ง ํธ์ถ ์คํ์ ๋์ง์ด ์ฌ๋ผ๊ฐ๋๋ค(unwind).try...catch: ์ฝ๋ ๋ธ๋ก์ ์์ฑํฉ๋๋ค. `try` ๋ธ๋ก ๋ด์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด Wasm ๋ฐํ์์ `catch` ์ ์ ํ์ธํฉ๋๋ค. ๋ฐ์ํ ์์ธ์ ํ๊ทธ๊ฐ `catch` ์ ์ ํ๊ทธ์ ์ผ์นํ๋ฉด ํด๋น ํธ๋ค๋ฌ๊ฐ ์คํ๋ฉ๋๋ค.catch_all: C++์ `catch (...)`๋ C#์ ๊ธฐ๋ณธ `catch`์ ์ ์ฌํ๊ฒ ๋ชจ๋ ์ ํ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํฌ๊ด์ ์ธ catch ์ ์ ๋๋ค.rethrow: `catch` ๋ธ๋ก์ด ์๋์ ์์ธ๋ฅผ ์คํ ์๋ก ๋ค์ ๋์ง ์ ์๋๋ก ํฉ๋๋ค.
"์ ๋ก ์ฝ์คํธ(Zero-Cost)" ์ถ์ํ ์์น
Wasm EH ์ ์์ ๊ฐ์ฅ ์ค์ํ ์ฑ๋ฅ ํน์ง์ ์ด๊ฒ์ด ์ ๋ก ์ฝ์คํธ ์ถ์ํ๋ก ์ค๊ณ๋์๋ค๋ ์ ์ ๋๋ค. C++์ ๊ฐ์ ์ธ์ด์์ ์ผ๋ฐ์ ์ธ ์ด ์์น์ ๋ค์์ ์๋ฏธํฉ๋๋ค:
"์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋ํด์๋ ๋น์ฉ์ ์ง๋ถํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด์๋, ์ง์ ์ฝ๋ฉํด๋ ๋ ์ํ ์ ์๋ค."
Wasm EH์ ๋งฅ๋ฝ์์ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํด์๋ฉ๋๋ค:
- ์์ธ๋ฅผ ๋์ง์ง ์๋ ์ฝ๋์ ๋ํด์๋ ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. `try...catch` ๋ธ๋ก์ ์กด์ฌ๊ฐ ๋ชจ๋ ๊ฒ์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ "์ ์ ๊ฒฝ๋ก"์ ์๋๋ฅผ ๋ฆ์ถ์ง ์์ต๋๋ค.
- ์ฑ๋ฅ ๋น์ฉ์ ์์ธ๊ฐ ์ค์ ๋ก ๋ฐ์ํ์ ๋(thrown)์๋ง ์ง๋ถ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ํจ์ ํธ์ถ์ ์์ง๋ง ์ผ๊ด๋ ๋น์ฉ์ ๋ถ๊ณผํ๋ ์ค๋ฅ ์ฝ๋ ๋ชจ๋ธ๊ณผ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ ์ ๋๋ค.
์ฑ๋ฅ ์ฌ์ธต ๋ถ์: Wasm EH ๋ ์ค๋ฅ ์ฝ๋
๋ค์ํ ์๋๋ฆฌ์ค์์์ ์ฑ๋ฅ ์์ถฉ ๊ด๊ณ๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ์ "์ ์ ๊ฒฝ๋ก"(์ค๋ฅ ์์)์ "์์ธ ๊ฒฝ๋ก"(์ค๋ฅ ๋ฐ์) ์ฌ์ด์ ๊ตฌ๋ถ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค.
"์ ์ ๊ฒฝ๋ก(Happy Path)": ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ ๋
์ด๊ฒ์ด Wasm EH๊ฐ ๊ฒฐ์ ์ ์ธ ์น๋ฆฌ๋ฅผ ๊ฑฐ๋๋ ์ง์ ์ ๋๋ค. ํธ์ถ ์คํ ๊น์ ๊ณณ์ ์๋ ํจ์๊ฐ ์คํจํ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- ์ค๋ฅ ์ฝ๋ ๋ฐฉ์: ํธ์ถ ์คํ์ ๋ชจ๋ ์ค๊ฐ ํจ์๋ ์์ ์ด ํธ์ถํ ํจ์๋ก๋ถํฐ ๋ฐํ ์ฝ๋๋ฅผ ๋ฐ๊ณ , ๊ทธ๊ฒ์ ํ์ธํ๊ณ , ์ค๋ฅ์ธ ๊ฒฝ์ฐ ์์ ์ ์คํ์ ์ค์งํ๊ณ ์ค๋ฅ ์ฝ๋๋ฅผ ํธ์ถ์์๊ฒ ์๋ก ์ ํํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ต์๋จ๊น์ง `if (error) return error;` ํ์ธ์ ์ฐ์๋ฅผ ๋ง๋ญ๋๋ค. ๊ฐ ํ์ธ์ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ์ด๋ฉฐ, ์คํ ์ค๋ฒํค๋๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
- Wasm EH ๋ฐฉ์: `try...catch` ๋ธ๋ก์ ๋ฐํ์์ ๋ฑ๋ก๋์ง๋ง, ์ ์์ ์ธ ์คํ ์ค์๋ ์ฝ๋๊ฐ ๋ง์น ๊ทธ๊ฒ์ด ์๋ ๊ฒ์ฒ๋ผ ํ๋ฆ ๋๋ค. ๊ฐ ํธ์ถ ํ์ ์ค๋ฅ ์ฝ๋๋ฅผ ํ์ธํ๊ธฐ ์ํ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ๊ฐ ์์ต๋๋ค. CPU๋ ์ฝ๋๋ฅผ ์ ํ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ์ ํ ์๋ ๋์ผํ ์ฝ๋์ ๊ฑฐ์ ๋์ผํฉ๋๋ค.
์น์: WebAssembly ์์ธ ์ฒ๋ฆฌ. ์๋นํ ์ฐจ์ด์ ๋๋ค. ์ค๋ฅ๊ฐ ๋๋ฌธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ง์์ ์ธ ์ค๋ฅ ํ์ธ์ ์ ๊ฑฐํจ์ผ๋ก์จ ์ป๋ ์ฑ๋ฅ ํฅ์์ ์๋นํ ์ ์์ต๋๋ค.
"์์ธ ๊ฒฝ๋ก(Exceptional Path)": ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋
์ด๊ฒ์ด ์ถ์ํ์ ๋น์ฉ์ด ์ง๋ถ๋๋ ์ง์ ์ ๋๋ค. `throw` ๋ช ๋ น์ด๊ฐ ์คํ๋๋ฉด, Wasm ๋ฐํ์์ ๋ณต์กํ ์ผ๋ จ์ ์์ ์ ์ํํฉ๋๋ค:
- ์์ธ ํ๊ทธ์ ๊ทธ ํ์ด๋ก๋๋ฅผ ์บก์ฒํฉ๋๋ค.
- ์คํ ๋๊ฐ๊ธฐ(stack unwinding)๋ฅผ ์์ํฉ๋๋ค. ์ด๊ฒ์ ํธ์ถ ์คํ์ ํ๋ ์ ๋จ์๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ์ง์ญ ๋ณ์๋ฅผ ํ๊ดดํ๊ณ ๊ธฐ๊ณ ์ํ๋ฅผ ๋ณต์ํ๋ ์์ ์ ํฌํจํฉ๋๋ค.
- ๊ฐ ํ๋ ์์์ ํ์ฌ ์คํ ์ง์ ์ด `try` ๋ธ๋ก ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ๊ด๋ จ๋ `catch` ์ ์ ํ์ธํ์ฌ ๋ฐ์ํ ์์ธ์ ํ๊ทธ์ ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ต๋๋ค.
- ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ผ๋ฉด, ์ ์ด๊ฐ ํด๋น `catch` ๋ธ๋ก์ผ๋ก ์ด์ ๋๊ณ ์คํ ๋๊ฐ๊ธฐ๊ฐ ์ค์ง๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ๋จ์ํ ํจ์ ๋ฐํ๋ณด๋ค ํจ์ฌ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ๋ฐ๋ฉด์, ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ฑ๊ณต ๊ฐ์ ๋ฐํํ๋ ๊ฒ๋งํผ ๋น ๋ฆ ๋๋ค. ์ค๋ฅ ์ฝ๋ ๋ชจ๋ธ์ ๋น์ฉ์ ๋ฐํ ์์ฒด์ ์๋ ๊ฒ์ด ์๋๋ผ ํธ์ถ์์ ์ํด ์ํ๋๋ ํ์ธ์ ์์ต๋๋ค.
์น์: ์ค๋ฅ ์ฝ๋ ํจํด์ ์คํจ ์ ํธ๋ฅผ ๋ฐํํ๋ ๋จ์ผ ํ์์ ๋ํด์๋ ๋ ๋น ๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ ์ ๊ฒฝ๋ก์์์ ๋์ ํ์ธ ๋น์ฉ์ ๋ฌด์ํ๊ธฐ ๋๋ฌธ์ ์คํด์ ์์ง๊ฐ ์๋ ๋น๊ต์ ๋๋ค.
์์ต๋ถ๊ธฐ์ : ์ ๋์ ๊ด์
์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ค์ํ ์ง๋ฌธ์ ์ด๊ฒ์ ๋๋ค: ์ด๋ ์ ๋์ ์ค๋ฅ ๋น๋์์ ์์ธ ๋ฐ์์ ๋์ ๋น์ฉ์ด ์ ์ ๊ฒฝ๋ก์์์ ๋์ ์ ๊ฐ์ก์ ๋ฅ๊ฐํ๊ฒ ๋ ๊น์?
- ์๋๋ฆฌ์ค 1: ๋ฎ์ ์ค๋ฅ์จ (< 1%์ ํธ์ถ ์คํจ)
์ด๊ฒ์ Wasm EH์ ์ด์์ ์ธ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ 99%์ ์๊ฐ ๋์ ์ต๋ ์๋๋ก ์คํ๋ฉ๋๋ค. ๊ฐ๋ ๋ฐ์ํ๋ ๋น์ผ ์คํ ๋๊ฐ๊ธฐ๋ ์ ์ฒด ์คํ ์๊ฐ์์ ๋ฌด์ํ ์ ์๋ ๋ถ๋ถ์ ๋๋ค. ์ค๋ฅ ์ฝ๋ ๋ฐฉ์์ ์๋ฐฑ๋ง ๊ฑด์ ๋ถํ์ํ ํ์ธ ์ค๋ฒํค๋ ๋๋ฌธ์ ์ง์์ ์ผ๋ก ๋ ๋๋ฆด ๊ฒ์ ๋๋ค. - ์๋๋ฆฌ์ค 2: ๋์ ์ค๋ฅ์จ (> 10-20%์ ํธ์ถ ์คํจ)
ํจ์๊ฐ ์์ฃผ ์คํจํ๋ค๋ฉด, ์ด๋ ์ ์ด ํ๋ฆ์ ์์ธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ์์ฌํ๋ฉฐ, ์ด๋ ์ ์๋ ค์ง ์ํฐํจํด์ ๋๋ค. ์ด ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ, ๋น๋ฒํ ์คํ ๋๊ฐ๊ธฐ ๋น์ฉ์ด ๋๋ฌด ์ปค์ ธ์ ๋จ์ํ๊ณ ์์ธก ๊ฐ๋ฅํ ์ค๋ฅ ์ฝ๋ ํจํด์ด ์ค์ ๋ก ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค. ์ด ์๋๋ฆฌ์ค๋ Wasm EH๋ฅผ ํฌ๊ธฐํ ๊ฒ์ด ์๋๋ผ ๋ก์ง์ ๋ฆฌํฉํ ๋งํด์ผ ํ๋ค๋ ์ ํธ์ฌ์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ ๋งต์์ ํค๋ฅผ ํ์ธํ๋ ๊ฒ์ ๋๋ค. `tryGetValue`์ ๊ฐ์ด ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐํํ๋ ํจ์๊ฐ ๋ชจ๋ ์กฐํ ์คํจ ์ "ํค๋ฅผ ์ฐพ์ ์ ์์" ์์ธ๋ฅผ ๋์ง๋ ํจ์๋ณด๋ค ๋ซ์ต๋๋ค.
ํฉ๊ธ๋ฅ : Wasm EH๋ ์์ธ๊ฐ ์ง์ ์ผ๋ก ์์ธ์ ์ด๊ณ , ์์์น ๋ชปํ์ผ๋ฉฐ, ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ด๋ฒคํธ์ ์ฌ์ฉ๋ ๋ ๋งค์ฐ ์ฑ๋ฅ์ด ์ข์ต๋๋ค. ์์ธก ๊ฐ๋ฅํ๊ณ ์ผ์์ ์ธ ํ๋ก๊ทธ๋จ ํ๋ฆ์ ์ฌ์ฉ๋ ๋๋ ์ฑ๋ฅ์ด ์ข์ง ์์ต๋๋ค.
WebAssembly ์์ธ ์ฒ๋ฆฌ ์ต์ ํ ์ ๋ต
Wasm EH๋ฅผ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด, ๋ค์ํ ์์ค ์ธ์ด์ ํด์ฒด์ธ์ ์ ์ฉํ ์ ์๋ ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
1. ์ ์ด ํ๋ฆ์ด ์๋ ์์ธ์ ์ธ ๊ฒฝ์ฐ์๋ง ์์ธ๋ฅผ ์ฌ์ฉํ์ธ์
์ด๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ์ต์ ํ์ ๋๋ค. `throw`๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ค์ค๋ก์๊ฒ ๋ฌผ์ด๋ณด์ญ์์ค: "์ด๊ฒ์ ์์์น ๋ชปํ ์ค๋ฅ์ธ๊ฐ, ์๋๋ฉด ์์ธก ๊ฐ๋ฅํ ๊ฒฐ๊ณผ์ธ๊ฐ?"
- ์์ธ์ ์ข์ ์ฌ์ฉ ์: ์๋ชป๋ ํ์ผ ํ์, ์์๋ ๋ฐ์ดํฐ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋๊น, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ์คํจํ ์ด์ค์ (๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ํ๋ก๊ทธ๋๋จธ ์ค๋ฅ).
- ์์ธ์ ๋์ ์ฌ์ฉ ์ (๋ฐํ ๊ฐ/์ํ ํ๋๊ทธ ์ฌ์ฉ): ํ์ผ ์คํธ๋ฆผ์ ๋์ ๋๋ฌ(EOF), ์ฌ์ฉ์๊ฐ ์์ ํ๋์ ์๋ชป๋ ๋ฐ์ดํฐ ์ ๋ ฅ, ์บ์์์ ํญ๋ชฉ ์ฐพ๊ธฐ ์คํจ.
Rust์ ๊ฐ์ ์ธ์ด๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ค๋ฅ์ ๋ํด `Result
2. Wasm-JS ๊ฒฝ๊ณ๋ฅผ ์ ์ํ์ธ์
EH ์ ์์ ์์ธ๊ฐ Wasm๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ์ํํ๊ฒ ๋๋๋ค ์ ์๋๋ก ํฉ๋๋ค. Wasm `throw`๋ ์๋ฐ์คํฌ๋ฆฝํธ `try...catch` ๋ธ๋ก์ ์ํด ์กํ ์ ์๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ `throw`๋ Wasm `try...catch_all`์ ์ํด ์กํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋ ฅํ์ง๋ง ๊ณต์ง๋ ์๋๋๋ค.
์์ธ๊ฐ ๊ฒฝ๊ณ๋ฅผ ๋์ ๋๋ง๋ค ๊ฐ ๋ฐํ์์ ๋ณํ์ ์ํํด์ผ ํฉ๋๋ค. Wasm ์์ธ๋ `WebAssembly.Exception` ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ๋ํ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค.
์ต์ ํ ์ ๋ต: ๊ฐ๋ฅํ๋ฉด Wasm ๋ชจ๋ ๋ด์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ญ์์ค. ํธ์คํธ ํ๊ฒฝ์ด ํน์ ์กฐ์น(์: ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง ํ์)๋ฅผ ์ทจํ๊ธฐ ์ํด ์๋ฆผ์ ๋ฐ์์ผ ํ ๊ฒฝ์ฐ์๋ง ์์ธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ํ๋๋๋ก ํ์ญ์์ค. Wasm ๋ด์์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ณต๊ตฌํ ์ ์๋ ๋ด๋ถ ์ค๋ฅ์ ๊ฒฝ์ฐ, ๊ฒฝ๊ณ ๊ต์ฐจ ๋น์ฉ์ ํผํ๊ธฐ ์ํด ๊ทธ๋ ๊ฒ ํ์ญ์์ค.
3. ์์ธ ํ์ด๋ก๋๋ ๊ฐ๋ณ๊ฒ ์ ์งํ์ธ์
์์ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ์์ธ๋ฅผ ๋์ง ๋ ์ด ๋ฐ์ดํฐ๋ ํจํค์ง๋์ด์ผ ํ๊ณ , ์ก์ ๋๋ ์ธํจํค์ง๋์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅด์ง๋ง, ํ์ดํธํ ๋ฃจํ์์ ๋งค์ฐ ํฐ ํ์ด๋ก๋(์: ๊ธด ๋ฌธ์์ด ๋๋ ์ ์ฒด ๋ฐ์ดํฐ ๋ฒํผ)๋ฅผ ๊ฐ์ง ์์ธ๋ฅผ ๋์ง๋ ๊ฒ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์ต์ ํ ์ ๋ต: ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ํ์ ์ ๋ณด๋ง ์ ๋ฌํ๋๋ก ์์ธ ํ๊ทธ๋ฅผ ์ค๊ณํ์ญ์์ค. ํ์ด๋ก๋์ ์ฅํฉํ๊ณ ์ค์ํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒ์ ํผํ์ญ์์ค.
4. ์ธ์ด๋ณ ๋๊ตฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก ํ์ฉ
Wasm EH๋ฅผ ํ์ฑํํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์์ค ์ธ์ด์ ์ปดํ์ผ๋ฌ ํด์ฒด์ธ์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
- C++ (Emscripten ์ฌ์ฉ): `-fwasm-exceptions` ์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ Wasm EH๋ฅผ ํ์ฑํํ์ญ์์ค. ์ด๋ Emscripten์๊ฒ C++ `throw` ๋ฐ `try...catch`๋ฅผ ๋ค์ดํฐ๋ธ Wasm EH ๋ช ๋ น์ด๋ก ์ง์ ๋งคํํ๋๋ก ์ง์ํฉ๋๋ค. ์ด๊ฒ์ ์์ธ๋ฅผ ๋นํ์ฑํํ๊ฑฐ๋ ๋๋ฆฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ํธ์ด์ฉ์ผ๋ก ๊ตฌํํ๋ ์ด์ ์๋ฎฌ๋ ์ด์ ๋ชจ๋๋ณด๋ค ํจ์ฌ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค. C++ ๊ฐ๋ฐ์์๊ฒ ์ด ํ๋๊ทธ๋ ํ๋์ ์ด๊ณ ํจ์จ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ฌ๋ ์ด์ ์ ๋๋ค.
- Rust: Rust์ ์ค๋ฅ ์ฒ๋ฆฌ ์ฒ ํ์ Wasm EH ์ฑ๋ฅ ์์น๊ณผ ์๋ฒฝํ๊ฒ ์ผ์นํฉ๋๋ค. ๋ชจ๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ค๋ฅ์ ๋ํด `Result` ํ์ ์ ์ฌ์ฉํ์ญ์์ค. ์ด๊ฒ์ Wasm์์ ๋งค์ฐ ํจ์จ์ ์ด๊ณ ์ค๋ฒํค๋๊ฐ ์๋ ํจํด์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ํ ํจ๋(panic)์ ์ปดํ์ผ๋ฌ ์ต์ (`-C panic=unwind`)์ ํตํด Wasm ์์ธ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์์๋ ์ค๋ฅ์ ๋ํ ๋น ๋ฅด๊ณ ๊ด์ฉ์ ์ธ ์ฒ๋ฆฌ์ ์น๋ช ์ ์ธ ์ค๋ฅ์ ๋ํ ํจ์จ์ ์ธ ๋ค์ดํฐ๋ธ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค.
- C# / .NET (Blazor ์ฌ์ฉ): WebAssembly์ฉ .NET ๋ฐํ์(`dotnet.wasm`)์ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ Wasm EH ์ ์์ ์๋์ผ๋ก ํ์ฉํฉ๋๋ค. ์ด๋ ํ์ค C# `try...catch` ๋ธ๋ก์ด ํจ์จ์ ์ผ๋ก ์ปดํ์ผ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์์ธ๋ฅผ ์๋ฎฌ๋ ์ดํธํด์ผ ํ๋ ์ด์ Blazor ๋ฒ์ ์ ๋นํด ์ฑ๋ฅ ํฅ์์ด ๊ทน์ ์ด์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๊ฒฌ๊ณ ํ๊ณ ๋ฐ์์ฑ ์๊ฒ ๋ง๋ญ๋๋ค.
์ค์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์๋๋ฆฌ์ค
์ด๋ฌํ ์์น๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ดํด๋ด ์๋ค.
์ฌ์ฉ ์ฌ๋ก 1: Wasm ๊ธฐ๋ฐ ์ด๋ฏธ์ง ์ฝ๋ฑ
C++๋ก ์์ฑ๋์ด Wasm์ผ๋ก ์ปดํ์ผ๋ PNG ๋์ฝ๋๋ฅผ ์์ํด ๋ณด์ญ์์ค. ์ด๋ฏธ์ง๋ฅผ ๋์ฝ๋ฉํ ๋ ์๋ชป๋ ํค๋ ์ฒญํฌ๊ฐ ์๋ ์์๋ ํ์ผ์ ๋ง๋ ์ ์์ต๋๋ค.
- ๋นํจ์จ์ ์ธ ์ ๊ทผ ๋ฐฉ์: ํค๋ ํ์ฑ ํจ์๋ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๊ฒ์ ํธ์ถํ ํจ์๋ ์ฝ๋๋ฅผ ํ์ธํ๊ณ , ์์ฒด ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ ์์ผ๋ก ๊น์ ํธ์ถ ์คํ์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค. ์ ํจํ ๋ชจ๋ ์ด๋ฏธ์ง์ ๋ํด ๋ง์ ์กฐ๊ฑด๋ถ ํ์ธ์ด ์คํ๋ฉ๋๋ค.
- ์ต์ ํ๋ Wasm EH ์ ๊ทผ ๋ฐฉ์: ํค๋ ํ์ฑ ํจ์๋ ๋ฉ์ธ `decode()` ํจ์์ ์ต์์ `try...catch` ๋ธ๋ก์ผ๋ก ๊ฐ์ธ์ฌ ์์ต๋๋ค. ํค๋๊ฐ ์ ํจํ์ง ์์ผ๋ฉด ํ์ฑ ํจ์๋ ๊ฐ๋จํ `throw`s an `InvalidHeaderException`์ ๋์ง๋๋ค. ๋ฐํ์์ ์คํ์ `decode()`์ `catch` ๋ธ๋ก์ผ๋ก ์ง์ ๋๊ฐ๊ณ , ๊ทธ ๋ค์ ์ ์์ ์ผ๋ก ์คํจ ์ฒ๋ฆฌํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. ์ค์ํ ๋์ฝ๋ฉ ๋ฃจํ์ ์ค๋ฅ ํ์ธ ์ค๋ฒํค๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ํจํ ์ด๋ฏธ์ง ๋์ฝ๋ฉ ์ฑ๋ฅ์ ์ต๋๊ฐ ๋ฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก 2: ๋ธ๋ผ์ฐ์ ์ ๋ฌผ๋ฆฌ ์์ง
Rust๋ก ์์ฑ๋ ๋ณต์กํ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ด ํ์ดํธํ ๋ฃจํ์์ ์คํ ์ค์ ๋๋ค. ๋๋ฌผ์ง๋ง, ์์น์ ๋ถ์์ ์ฑ(์: ๊ฑฐ์ 0์ ๊ฐ๊น์ด ๋ฒกํฐ๋ก ๋๋๊ธฐ)์ผ๋ก ์ด์ด์ง๋ ์ํ์ ์ง๋ฉดํ ์ ์์ต๋๋ค.
- ๋นํจ์จ์ ์ธ ์ ๊ทผ ๋ฐฉ์: ๋ชจ๋ ๋จ์ผ ๋ฒกํฐ ์ฐ์ฐ์ 0์ผ๋ก ๋๋๊ธฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด `Result`๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๊ฒ์ ์ฝ๋์ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ค์ํ ๋ถ๋ถ์์ ์ฑ๋ฅ์ ์ฌ๊ฐํ๊ฒ ์ ํ์ํฌ ๊ฒ์ ๋๋ค.
- ์ต์ ํ๋ Wasm EH ์ ๊ทผ ๋ฐฉ์: ๊ฐ๋ฐ์๋ ์ด ์ํฉ์ด ์๋ฎฌ๋ ์ด์ ์ํ์ ์น๋ช ์ ์ด๊ณ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ๋ฒ๊ทธ๋ฅผ ๋ํ๋ธ๋ค๊ณ ๊ฒฐ์ ํฉ๋๋ค. ์ด์ค์ ์ด๋ ์ง์ ์ ์ธ `panic!`์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ Wasm `throw`๋ก ์ปดํ์ผ๋์ด, ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋ 99.999%์ ๋จ๊ณ์ ํ๋ํฐ๋ฅผ ์ฃผ์ง ์๊ณ ๊ฒฐํจ์ด ์๋ ์๋ฎฌ๋ ์ด์ ๋จ๊ณ๋ฅผ ํจ์จ์ ์ผ๋ก ์ข ๋ฃํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํธ์คํธ๋ ์ด ์์ธ๋ฅผ ์ก์์ ๋๋ฒ๊น ์ ์ํด ์ค๋ฅ ์ํ๋ฅผ ๊ธฐ๋กํ๊ณ ์๋ฎฌ๋ ์ด์ ์ ์ฌ์ค์ ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๊ฒฌ๊ณ ํ๊ณ ์ฑ๋ฅ ์ข์ Wasm์ ์๋ก์ด ์๋
WebAssembly ์์ธ ์ฒ๋ฆฌ ์ ์์ ๋จ์ํ ํธ์ ๊ธฐ๋ฅ ์ด์์ ๋๋ค. ๊ฒฌ๊ณ ํ ํ๋ก๋์ ๋ฑ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ทผ๋ณธ์ ์ธ ์ฑ๋ฅ ํฅ์์ ๋๋ค. ์ ๋ก ์ฝ์คํธ ์ถ์ํ ๋ชจ๋ธ์ ์ฑํํจ์ผ๋ก์จ, ๊น๋ํ ์ค๋ฅ ์ฒ๋ฆฌ์ ์์ํ ์ฑ๋ฅ ์ฌ์ด์ ์ค๋ ๊ธด์ฅ์ ํด๊ฒฐํฉ๋๋ค.
๊ฐ๋ฐ์์ ์ค๊ณ์๋ฅผ ์ํ ํต์ฌ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ค์ดํฐ๋ธ EH๋ฅผ ์ฑํํ์ธ์: ์๋์ ์ธ ์ค๋ฅ ์ฝ๋ ์ ํ์์ ๋ฒ์ด๋์ญ์์ค. ํด์ฒด์ธ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ(์: Emscripten์ `-fwasm-exceptions`)์ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ Wasm EH๋ฅผ ํ์ฉํ์ญ์์ค. ์ฑ๋ฅ ๋ฐ ์ฝ๋ ํ์ง ์ด์ ์ด ๋ง๋ํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ธ์ ์ดํดํ์ธ์: "์ ์ ๊ฒฝ๋ก"์ "์์ธ ๊ฒฝ๋ก"์ ์ฐจ์ด๋ฅผ ๋ด์ฌํํ์ญ์์ค. Wasm EH๋ ์์ธ๊ฐ ๋ฐ์ํ๋ ์๊ฐ๊น์ง ๋ชจ๋ ๋น์ฉ์ ๋ฏธ๋ฃธ์ผ๋ก์จ ์ ์ ๊ฒฝ๋ก๋ฅผ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค.
- ์์ธ๋ ์์ธ์ ์ผ๋ก ์ฌ์ฉํ์ธ์: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ด ์์น์ ์ผ๋ง๋ ์ ์ค์ํ๋์ง์ ์ง์ ์ ์ผ๋ก ๋ฐ์๋ ๊ฒ์ ๋๋ค. ์์ธก ๊ฐ๋ฅํ ์ ์ด ํ๋ฆ์ด ์๋, ์ง์ ํ๊ณ ์์์น ๋ชปํ ์ค๋ฅ์ ์์ธ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ํ๋กํ์ผ๋งํ๊ณ ์ธก์ ํ์ธ์: ๋ชจ๋ ์ฑ๋ฅ ๊ด๋ จ ์์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ถ์ธกํ์ง ๋ง์ญ์์ค. ๋ธ๋ผ์ฐ์ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Wasm ๋ชจ๋์ ์ฑ๋ฅ ํน์ฑ์ ์ดํดํ๊ณ ํซ์คํ์ ์๋ณํ์ญ์์ค. ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค์ง ์๊ณ ์์๋๋ก ๋์ํ๋์ง ํ ์คํธํ์ญ์์ค.
์ด๋ฌํ ์ ๋ต์ ํตํฉํจ์ผ๋ก์จ, ๋ ๋น ๋ฅผ ๋ฟ๋ง ์๋๋ผ ๋ ์ ๋ขฐํ ์ ์๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ๋๋ฒ๊น ํ๊ธฐ ์ฌ์ด WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ์ํด ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ํํํ๋ ์๋๋ ๋๋ฌ์ต๋๋ค. ๊ณ ์ฑ๋ฅ์ ํ๋ ฅ์ ์ธ WebAssembly์ ์๋ก์ด ํ์ค์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.