WASI Preview 2์ ์ปดํฌ๋ํธ ๋ชจ๋ธ๋ก ์งํํ๋ WebAssembly๋ฅผ ๋ง๋๋ณด์ธ์. ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ, ๋ชจ๋์ฑ, ๋ณด์ ์คํ์ ๋ฏธ์น๋ ์ํฅ๊ณผ ์ ์ธ๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ณํ๋ฅผ ํ์ธํ์ธ์.
WebAssembly ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค: WASI Preview 2์ ์ปดํฌ๋ํธ ๋ชจ๋ธ ์ฌ์ธต ๋ถ์
WebAssembly(Wasm)๋ ๋ค์ํ ํ๋ซํผ์์ ์ฝ๋๋ฅผ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์๊ฒ ํ๋ ํ์ ์ ์ธ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. WASI(WebAssembly System Interface)์ ์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ ๊ฐ์ ์ด๋์ ํฐ๋ธ์ ์ํด ์ฃผ๋๋๋ ๊ทธ ๋ฐ์ ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ํํธ์จ์ด๊ฐ ๊ฐ๋ฐ๋๊ณ ๋ฐฐํฌ๋๋ ๋ฐฉ์์ ์ฌํธํ๊ณ ์์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ ์ด๋ฌํ ํต์ฌ ๊ธฐ์ ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ทธ ์ด์ , ๊ธฐ์ ์ ๊ธฐ๋ฐ, ๊ทธ๋ฆฌ๊ณ ์ปดํจํ ์ ๋ฏธ๋์ ๋ฏธ์น ์ํฅ์ ํ๊ตฌํฉ๋๋ค.
WebAssembly์ ๊ทธ ์ค์์ฑ ์ดํดํ๊ธฐ
WebAssembly๋ ์คํ ๊ธฐ๋ฐ ๊ฐ์ ๋จธ์ ์ ์ํด ์ค๊ณ๋ ๋ฐ์ด๋๋ฆฌ ๋ช ๋ น์ด ํ์์ ๋๋ค. ์ด์์ฑ, ํจ์จ์ฑ, ๋ณด์์ฑ์ด ํน์ง์ ๋๋ค. ์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๊ณ ์ฑ๋ฅ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ ์๋จ์ผ๋ก ๊ณ ์๋์์ง๋ง, Wasm์ ๋ธ๋ผ์ฐ์ ์ค์ฌ์ ๊ธฐ์์ ๋์ด ํด๋ผ์ฐ๋ ์ปดํจํ ์์ ์ฃ์ง ๋๋ฐ์ด์ค์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ค์ฉ๋ ํ๋ซํผ์ด ๋์์ต๋๋ค.
WebAssembly์ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฑ๋ฅ: Wasm ์ฝ๋๋ ํจ์จ์ ์ธ ๋ฐ์ดํธ์ฝ๋ ํ์๊ณผ ์ต์ ํ๋ ๊ฐ์ ๋จธ์ ๊ตฌํ ๋๋ถ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์๋๋ก ์คํ๋ฉ๋๋ค.
- ์ด์์ฑ: Wasm ๋ฐ์ด๋๋ฆฌ๋ ๋ค์ํ ์ด์ ์ฒด์ ์ ํ๋์จ์ด ์ํคํ ์ฒ์์ ์คํ๋๋๋ก ์ค๊ณ๋์ด ์ด์์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค.
- ๋ณด์: Wasm์ ์๋๋ฐ์ค ์คํ ํ๊ฒฝ์ ์์คํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ์ ํํ์ฌ ๋ณด์์ ๊ฐํํ๊ณ ์ ์ฑ ์ฝ๋๊ฐ ํด๋ฅผ ๋ผ์น๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ๋ชจ๋์ฑ: Wasm์ ๋ชจ๋์ฑ์ ์ด์งํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ซํผ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ธ์ด ๋ ๋ฆฝ์ฑ: ๊ฐ๋ฐ์๋ C, C++, Rust, Go์ ๊ฐ์ ์ธ์ด๋ก Wasm ๋ชจ๋์ ์์ฑํ ์ ์์ด ์ ์ฐ์ฑ์ ์ ๊ณตํ๊ณ ํน์ ๊ณต๊ธ์ ์ฒด์ ๋ํ ์ข ์์ฑ์ ์ค์ ๋๋ค.
์์: ๊ธ๋ก๋ฒ ๋ฌผ๋ฅ ํ์ฌ๊ฐ ๊ฒฝ๋ก ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐํฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด์ ์๋ค์ด ์ฌ์ฉํ๋ ๊ฐ ์ด์ ์ฒด์ (iOS, Android, Windows)์ ๋ํด ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋์ , ์๊ณ ๋ฆฌ์ฆ์ Wasm์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ์ด ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ ๋ชจ๋ ๊ธฐ๊ธฐ์ ๋ฐฐํฌ๋ ์ ์์ด ์ผ๊ด๋ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ณ ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ์ค์ฌ์ค๋๋ค. ์ด๋ ์๋นํ ๋น์ฉ ์ ๊ฐ์ ์๋ฏธํ๋ฉฐ ๋ ๋น ๋ฅธ ๊ธฐ๋ฅ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
WASI ์๊ฐ: Wasm๊ณผ ์ด์ ์ฒด์ ์ฌ์ด์ ๊ฐ๊ทน ๋ฉ์ฐ๊ธฐ
Wasm์ ์์ ํ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ์ง๋ง, ์ด๊ธฐ์๋ ์์คํ ๋ฆฌ์์ค์ ์ง์ ์ ๊ทผํ ์ ์์์ต๋๋ค. WASI๋ Wasm ๋ชจ๋์ด ๊ธฐ๋ณธ ์ด์ ์ฒด์ ์ ์ํธ ์์ฉํ ์ ์๋ ํ์คํ๋ ์์คํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์ด ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. WASI๋ Wasm ๋ชจ๋์ด ํ์ผ I/O, ๋คํธ์ํฌ ํต์ , ํ๊ฒฝ ์ ๊ทผ๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ API ์ธํธ๋ฅผ ์ ์ํฉ๋๋ค.
WASI์ ์ฃผ์ ํน์ง:
- ํ์คํ: WASI๋ Wasm ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ํ์คํํ์ฌ ์ํธ ์ด์ฉ์ฑ๊ณผ ์ด์์ฑ์ ์ฆ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๋ณด์: WASI๋ ํต์ ๋๊ณ ์๋๋ฐ์คํ๋ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ ์์คํ ๋ฆฌ์์ค์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ง์์ผ๋ก์จ ๋ณด์์ ์ต์ฐ์ ์ผ๋ก ํฉ๋๋ค.
- ๋ชจ๋์ฑ: WASI๋ ๊ฐ๋ฐ์๊ฐ ํน์ ๊ธฐ๋ฅ๋ง ์ ํํ ์ ์๊ฒ ํ์ฌ ๊ณต๊ฒฉ ํ๋ฉด์ ์ค์ด๊ณ ๋ณด์์ ๊ฐํํฉ๋๋ค.
- ํ์ฅ์ฑ: WASI๋ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์ด, ์งํํ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ๊ธฐ ์ํด ์๋ก์ด ๊ธฐ๋ฅ๊ณผ API๊ฐ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
WASI Preview 1์ ํ๊ณ: ์ด๊ธฐ์ WASI๋ ์ฃผ๋ก ํ์ผ I/O์ ์ผ๋ถ ๊ธฐ๋ณธ ํ๊ฒฝ ๋ณ์์ ์ด์ ์ ๋ง์ถ ๋น๊ต์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ ๊ณตํ์ต๋๋ค. Wasm ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๊ณ , ๋ค๋ฅธ ๋ชจ๋์ ํตํฉํ๋ ค๋ฉด ์ข ์ข ๋ณต์กํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ์ต๋๋ค.
WASI Preview 2: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ฐ์
WASI Preview 2๋ WebAssembly ๊ธฐ์ ์ ์ค์ํ ๋์ฝ์ ์๋ฏธํฉ๋๋ค. ์ด๋ Wasm ๋ชจ๋์ด ์ํธ ์์ฉํ๊ณ ๊ตฌ์ฑ๋๋ ๋ฐฉ์์ ๋ํ ํจ๋ฌ๋ค์ ์ ํ์ธ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋์ ํฉ๋๋ค. ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ชจ๋ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ค์ ์ ๋๋ฉฐ WASI Preview 1์ ๋ง์ ํ๊ณ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
WASI ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ํต์ฌ ๊ฐ๋ :
- ์ปดํฌ๋ํธ(Components): ์ด๊ฒ๋ค์ ๊ธฐ๋ณธ์ ์ธ ๋น๋ฉ ๋ธ๋ก์ ๋๋ค. ์ปดํ์ผ๋๊ณ ํจํค์ง๋ Wasm ๋ชจ๋์ ๋๋ค. ์ปดํฌ๋ํธ๋ ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ก ์ํธ ์์ฉํ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ์ฝ๋ ๋จ์์ ๋๋ค.
- ์ธํฐํ์ด์ค(Interfaces): ์ธํฐํ์ด์ค๋ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณ์ฝ์ ์ ์ํ๋ฉฐ, ์ปดํฌ๋ํธ๊ฐ ๋ ธ์ถํ๊ณ ์๋นํ๋ ํจ์, ๋ฐ์ดํฐ ์ ํ ๋ฐ ๋์์ ๋ช ์ํฉ๋๋ค.
- ์๋(Worlds): ์๋๋ ์ธํฐํ์ด์ค์ ์ปฌ๋ ์ ๊ณผ ์ปดํฌ๋ํธ์ ๊ตฌ์ฑ์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ค์ด ํจ๊ป ์๋ํ๋๋ก ์กฐ๋ฆฝ๋ ์ ์์ต๋๋ค. ์๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ ์ ์ํ ์๋ ์์ต๋๋ค.
- ์ํฌํธ(Imports)์ ์ต์คํฌํธ(Exports): ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ํฌํธํ๊ณ , ์์ ์ ๊ธฐ๋ฅ์ ์ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ต์คํฌํธํฉ๋๋ค.
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ด์ :
- ํฅ์๋ ๋ชจ๋์ฑ: ์ปดํฌ๋ํธ๋ ์ฝ๊ฒ ๊ตฌ์ฑ, ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ ์ ์์ด ๋ ๋ชจ๋ํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ฐ์ ๋ ์ํธ ์ด์ฉ์ฑ: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ธํฐํ์ด์ค๋ฅผ ํ์คํํ์ฌ, ๋ค๋ฅธ ์ธ์ด๋ก ๋น๋๋๊ณ ๋ค๋ฅธ ์์ค์์ ์จ Wasm ๋ชจ๋๋ค์ด ์ํํ๊ฒ ์ํธ ์์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ฐํ๋ ๋ณด์: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๊ธฐ๋ฅ์ ๋ ์๊ฒฉํ ์บก์ํ๋ฅผ ์ด์งํ์ฌ, ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ์ํธ ์์ฉ์ ์ ์ดํจ์ผ๋ก์จ ๋ณด์์ ๋์ฑ ๊ฐํํฉ๋๋ค.
- ๋จ์ํ๋ ๊ฐ๋ฐ: ๊ฐ๋ฐ์๋ ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๊ณํ๊ณ ๊ด๋ฆฌํ๋ ๋ ๋ช ํํ ๋ฐฉ๋ฒ์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ์์ฌ์ด ๊ต์ฐจ ์ธ์ด ํตํฉ: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด ์ธ์ด ๊ฐ ํต์ ์ ์ธ๋ถ ์ฌํญ์ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ค๋ฅธ ์ธ์ด๋ค์ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ญ์์ค. ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ๊ฒฐ์ ์ฒ๋ฆฌ, ์ฌ๊ณ ๊ด๋ฆฌ, ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ฐ์ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๋ ๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด ์ปดํฌ๋ํธ๋ค์ ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ ์์ต๋๋ค (์: Rust๋ก ๊ฒฐ์ ์ฒ๋ฆฌ, Go๋ก ์ฌ๊ณ ๊ด๋ฆฌ). ์ด๋ค์ ์๋(World) ๋ด์์ ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํจ๊ป ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ํ๋ซํผ์ ๋ ์ฝ๊ฒ ์งํํ๊ณ , ์ ๋ฐ์ดํธ๋๊ณ , ๋ค๋ฅธ ๊ตญ๊ฐ์ ๊ท์ ํ๊ฒฝ์ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ์ฒด ํ๋ซํผ์ ์ ๋ฐ์ดํธํ๋ ๋ฐ ๋ฐ๋ฅด๋ ์ํ์ ์ค์ด๊ณ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ ์ง๋ณด์๋ฅผ ๋จ์ํํฉ๋๋ค.
๊ธฐ์ ์ฌ์ธต ๋ถ์: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์๋ ๋ฐฉ์
์ปดํฌ๋ํธ ๋ชจ๋ธ์ Wasm ๋ชจ๋์ด ์๋ก ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์ธ๊ณ์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ค์ ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํต์ฌ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. ์ธํฐํ์ด์ค์ WIT(WebAssembly Interface Types):
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ํต์ฌ์๋ ์ธํฐํ์ด์ค๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ ์ธ๊ณ์ ์ ๊ณตํ๋(์ต์คํฌํธ) ๋๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์๊ตฌํ๋(์ํฌํธ) ํจ์, ๋ฐ์ดํฐ ๋ฐ ๊ธฐํ ์์์ ์ ํ์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ WIT(WebAssembly Interface Types)๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ช ๋ฉ๋๋ค.
WIT๋ ์ธํฐํ์ด์ค๋ฅผ ์ค๋ช ํ๋ ๋๋ฉ์ธ ํนํ ์ธ์ด(DSL)์ ๋๋ค. ์ ์, ๋ถ๋ ์์์ , ๋ฌธ์์ด, ๋ ์ฝ๋์ ๊ฐ์ ์ ํ์ ์ ์ํฉ๋๋ค. WIT ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ ์ ์ธ์ ์คํ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
WIT ์ฝ๋ ์์:
package my-component;
interface greeter {
greet: func(name: string) -> string;
}
์ด ์์์ WIT๋ "greeter"๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉฐ, ์ด ์ธํฐํ์ด์ค์๋ ๋ฌธ์์ด(์ด๋ฆ)์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฌธ์์ด(์ธ์ฌ๋ง)์ ๋ฐํํ๋ "greet"๋ผ๋ ๋จ์ผ ํจ์๊ฐ ์์ต๋๋ค.
2. ์ด๋ํฐ(Adapters):
์ด๋ํฐ๋ ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ ๋ฐ ์ปดํฌ๋ํธ ๊ฐ ํต์ ์ ์ฒ๋ฆฌํ๋ ์ค๊ฐ ์ปดํฌ๋ํธ์ ๋๋ค. WIT ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด์ฒด์ธ์ ์ํด ์๋์ผ๋ก ์์ฑ๋ ์ ์์ต๋๋ค. ์ด๋ํฐ๋ ์ธ์ด๋ณ ํธ์ถ ๊ท์น๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ํ์คํ๋ ์ธํฐํ์ด์ค ๊ฐ์ ๋ณํํฉ๋๋ค.
3. ์๋์ ๊ตฌ์ฑ(Worlds and Composition):
์๋๋ ์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌ์ฑ์ ์ปฌ๋ ์ ์ ๋๋ค. ์๋๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ค์ ์ฐ๊ฒฐํฉ๋๋ค. ์๋๋ ์ปดํฌ๋ํธ๋ฅผ ์กฐ์จํ๋ ์ต์์ ๊ตฌ์ฑ์ ๋๋ค. ์๋์ ์ญํ ์ ์ปดํฌ๋ํธ๋ค์ ํจ๊ป ์ฐ๊ฒฐํ๊ณ , ๊ทธ๋ค์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ฉฐ, ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ผ๋ก ๋ ธ์ถ๋ ์ง๋ฅผ ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
4. ํด๋ง ์ง์:
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ง์ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋๊ตฌ๋ค์ด ์ ๊ณต๋ฉ๋๋ค:
- Wasmtime, Wizer: ์ด๊ฒ๋ค์ Wasm ๋ชจ๋์ ์คํํ๋ ๋ฐํ์ ํ๊ฒฝ์ผ๋ก, ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ง์ํฉ๋๋ค.
- Cargo ๋ฐ ๊ธฐํ ๋น๋ ๋๊ตฌ (Rust, Go ๋ฑ): ์ด ๋น๋ ๋๊ตฌ๋ค์ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๋น๋ํ๊ณ ํจํค์งํ๋ ์ง์์ ์ ๊ณตํฉ๋๋ค. ๋ํ ์ข ์ข WIT ์ ์๋ฅผ ์์ฑํ๊ณ ํ์ํ ์ด๋ํฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ๋ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
- wasi-sdk: ์ด ํด์ฒด์ธ์ C/C++ ์ฝ๋๋ฅผ WebAssembly ์ปดํฌ๋ํธ๋ก ์ปดํ์ผํ๋ ๋ฐ ํ์ํ SDK์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
WASI Preview 2์ ํด๋ผ์ฐ๋ ์ปดํจํ ์ ๋ฏธ๋
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ํฅ๋ ฅ์ ํด๋ผ์ฐ๋ ์ปดํจํ ํ๊ฒฝ๊น์ง ํ์ฅ๋ฉ๋๋ค. ์ด๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฃ์ง ์ปดํจํ ์๋ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
1. ์๋ฒ๋ฆฌ์ค ๋ฐ ์ฃ์ง ์ปดํจํ :
Wasm์ WASI์ ๊ฒฐํฉํ์ฌ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ํนํ ์ ํฉํฉ๋๋ค. ์์ ํฌ๊ธฐ, ํจ์จ์ ์ธ ์คํ, ๋ณด์ ์์ฑ ๋๋ถ์ ์ฃ์ง ๋๋ฐ์ด์ค์ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ์ ์ด์์ ์ ๋๋ค. ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ชจ๋์ ์๋ฒ๋ฆฌ์ค ํจ์๋ฅผ ์ฝ๊ฒ ํจํค์ง, ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
์์: ๊ธ๋ก๋ฒ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์ฃ์ง ์๋ฒ ์ ๋ฐ์ ๊ฑธ์ณ ํนํ๋ Wasm ์ปดํฌ๋ํธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ ์ด๋ฏธ์ง ์ต์ ํ, ์ฝํ ์ธ ๋ณํ, ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ์ฐ ์ํคํ ์ฒ๋ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ์ง์ฐ ์๊ฐ์ ์ค์ด๋ฉฐ, ๊ฐํ๋ ๋ณด์์ ์ ๊ณตํฉ๋๋ค.
2. ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ:
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ชจ๋์ฑ ๋ฐ ์ํธ ์ด์ฉ์ฑ ๊ธฐ๋ฅ์ ๋ง์ดํฌ๋ก์๋น์ค ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์๋น์ค์ ๊ฐ ์ปดํฌ๋ํธ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ญํ ์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋์ฑ์ ๋ง์ดํฌ๋ก์๋น์ค์ ์ ๋ฐ์ดํธ ๋ฐ ํ์ฅ์ ๋จ์ํํฉ๋๋ค. ํ์ค ์ธํฐํ์ด์ค๋ ์ฌ์ด ํต์ ๊ณผ ์๋น์ค ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์์: ๋๊ท๋ชจ ๋ค๊ตญ์ ๊ธฐ์ ์ ๋ฒ๋ฅ , ํตํ, ์์ฅ ์ญํ์ ์ง์ญ์ ์ฐจ์ด๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋ฏผ์ฒฉํ ์ํคํ ์ฒ๊ฐ ํ์ํ ์ ์์ต๋๋ค. ๊ฐ ๊ธฐ๋ฅ ์์ญ(๊ฒฐ์ , ์ฌ๊ณ , ์ฌ์ฉ์ ์ธ์ฆ)์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ฌ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋์ฑ์ ํตํด ๊ธฐ์ ์ ํต์ผ๋ ์ ์ฒด ์์คํ ์ ์ ์งํ๋ฉด์ ๋ค์ํ ์ง๋ฆฌ์ ์๊ตฌ ์ฌํญ์ ์ ์ํ ์ ์์ต๋๋ค.
3. ํฌ๋ก์ค ํ๋ซํผ ๋ฐฐํฌ:
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ค๋ฅธ ํ๋ซํผ์์ ํ๋ก๊ทธ๋จ์ ๋ ์ฝ๊ฒ ์คํํ ์ ์๊ฒ ํด์ค๋๋ค. Wasm์ ์ฌ์ฉํ๋ฉด ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค๊ฐ ํด๋ผ์ฐ๋ ํ๋ซํผ ๋ฐ ์ฃ์ง ๋๋ฐ์ด์ค๋ฅผ ํฌํจํ ๋ค์ํ ํ๊ฒฝ์์ ์คํ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ฐ ํ๋ซํผ์ ๋ํด ๋ณ๋์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ์ธ๊ณ์ ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ WASI Preview 2์ ์ด์
์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๊ฐ๋ฐ์์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ชจ๋์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ด์งํ์ฌ ๊ฐ๋ฐ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ค์ ๋๋ค.
- ํฅ์๋ ์ฝ๋ ํ์ง: ํ์คํ๋ ์ธํฐํ์ด์ค์ ๊ฒฉ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ , ํ ์คํธํ๊ณ , ์ ์ง๋ณด์ํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
- ๊ฐํ๋ ๋ณด์: Wasm์ ์๋๋ฐ์ค ํน์ฑ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์ฌ์ค๋๋ค.
- ์ฆ๊ฐ๋ ์ํธ ์ด์ฉ์ฑ: ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ธ์ด์ ๊ด๊ณ์์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ ๊ฐ์ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๋จ์ํ๋ ๋ฐฐํฌ: ์ปดํฌ๋ํธ๋ ์ฝ๊ฒ ํจํค์ง๋์ด ๋ค์ํ ํ๋ซํผ์ ๋ฐฐํฌ๋ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ง์ ์ธ ์กฐ์ธ:
- WIT ๋ฐฐ์ฐ๊ธฐ: ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ธฐ ์ํด WIT์ ๊ธฐ๋ณธ์ ๋ฐฐ์ฐ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์.
- ํด์ฒด์ธ ์ฌ์ฉํ๊ธฐ: wasmtime, wizer์ ๊ฐ์ Wasm ์ปดํฌ๋ํธ ๊ตฌ์ถ์ ์ํ ๊ฐ์ฉ ํด๋ง์ ์ต์ํด์ง์ธ์.
- ๋ชจ๋์ฑ ์์ฉํ๊ธฐ: ์ฝ๊ฒ ๊ตฌ์ฑํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ์ปดํฌ๋ํธ ์ค์ฌ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ์ธ์.
- ๋ณด์ ๊ณ ๋ คํ๊ธฐ: ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ๊ฐ์ ์์ ํ Wasm ๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌํํ์ธ์.
- ๋ค์ํ ์ธ์ด๋ก ์คํํ๊ธฐ: ์๊ณ ์๋ ์ธ์ด๋ก ์คํํด๋ณด๊ณ Wasm ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ์ํธ ์์ฉํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด์ง ํ์ธํด ๋ณด์ธ์.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์์
์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ WASI Preview 2๋ ๋ค์ํ ์ฐ์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฃผ๋ชฉ๋ฐ๊ณ ์์ต๋๋ค:
- ํด๋ผ์ฐ๋ ์ปดํจํ : ์๋ฒ๋ฆฌ์ค ํจ์, ๋ง์ดํฌ๋ก์๋น์ค, ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ.
- ์ฃ์ง ์ปดํจํ : IoT ๋๋ฐ์ด์ค, ๊ฒ์ดํธ์จ์ด, ์ฃ์ง ์๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ.
- ๋ณด์: ์์ ํ ์๋๋ฐ์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐ ๋ณด์ ๊ฐ์ฌ.
- ๊ธ์ต ๊ธฐ์ : ์์ ํ๊ณ ํจ์จ์ ์ธ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์ ์.
- ๊ฒ์: ๊ฒ์ ๋ก์ง, ๋ฌผ๋ฆฌ ์์ง, ํฌ๋ก์ค ํ๋ซํผ ๊ฒ์ํ๋ ์ด ์คํ.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN): ์ฝํ ์ธ ์ ์ก ์ต์ ํ ๋ฐ ์ฃ์ง ๊ธฐ๋ฐ ์๋น์ค ์คํ.
Wasm๊ณผ WASI๋ฅผ ์ฌ์ฉํ๋ ํ์ฌ๋ค์ ์:
- Cloudflare: Cloudflare Workers๋ Wasm์ ํ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์์ ๊ฐ๊น์ด ์ฃ์ง์์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
- Fastly: Fastly๋ Wasm์ ์ง์ํ๋ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์๋น์ค๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝํ ์ธ ์ ์ก์ ๋ง์ถค ์ค์ ํ ์ ์๋๋ก ํฉ๋๋ค.
- Deno: Deno๋ ์์ ํ ์๋ฒ์ฌ์ด๋ ๋ฐ ์ฃ์ง JavaScript ์คํ์ ์ํ ํต์ฌ ๊ธฐ์ ๋ก Wasm์ ์ง์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ์ํฅ: Wasm๊ณผ WASI์ ์ฑํ์ ์ ์ธ๊ณ์ ์ด๋ฉฐ, ๋ถ๋ฏธ, ์ ๋ฝ, ์์์ ๋ฐ ๊ธฐํ ์ง์ญ์ ๊ฐ๋ฐ์์ ๊ธฐ์ ๋ค์ด ์ด๋ฌํ ๊ธฐ์ ์ ํ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ค์ ์ํธ ์ด์ฉ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ด์งํ์ฌ ์ ์ธ๊ณ์ ์ผ๋ก ํ์ ๊ณผ ํ๋ ฅ์ ๊ฐํํฉ๋๋ค.
๊ณผ์ ์ ๋ฏธ๋ ๋ฐฉํฅ
์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ WASI Preview 2๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ๋ ์์ต๋๋ค:
- ์ํ๊ณ ์ฑ์๋: Wasm ์ํ๊ณ๋ ๋น๊ต์ ์ด๊ธฐ ๋จ๊ณ์ ๋๋ค. ํ๋ฐํ๊ฒ ์ฑ์ฅํ๊ณ ์์ง๋ง, ๋ ํ๋ฆฝ๋ ํ๋ซํผ๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ๊ฐ ์ ์ต๋๋ค.
- ๋๋ฒ๊น : Wasm ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋: WASM ๋ฐ ๋ชจ๋ ๊ฐ ํต์ ๊ณผ ๊ด๋ จ๋ ์ด๊ธฐ ์ค๋ฒํค๋๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ํด๋ง ๋ณต์ก์ฑ: Wasm ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ค์ ์ด๊ธฐ ํ์ต ๊ณก์ ์ด ์์ ์ ์์ต๋๋ค.
๋ฏธ๋ ๋ฐฉํฅ:
- ์ง์์ ์ธ ์ํ๊ณ ์ฑ์ฅ: Wasm ์ํ๊ณ๋ ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋๊ตฌ, ํ๋ ์์ํฌ์ ํจ๊ป ์ฑ์ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: Wasm ๋ฐ WASI ๋ฐํ์์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํ ์ง์์ ์ธ ๋ ธ๋ ฅ์ด ์ง์ค๋ ๊ฒ์ ๋๋ค.
- ํ์คํ ๋ ธ๋ ฅ: ์ํธ ์ด์ฉ์ฑ๊ณผ ๊ฐ๋ฐ ์ฉ์ด์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ํ์คํ ๋ ธ๋ ฅ์ด ์์๋ฉ๋๋ค.
- ๋ ๋ง์ ์ธ์ด ์ง์: ๋ ๋ง์ ์ธ์ด์ ๋ํ ์ง์์ ๋ ๋์ ๋ฒ์์ ๊ฐ๋ฐ์๊ฐ Wasm์ ์ฌ์ฉํ ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
WASI Preview 2๋ก ๊ตฌ๋๋๋ WebAssembly ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์ ์ ์ธ ๋ณํ๋ฅผ ๋ํ๋ ๋๋ค. ๋ชจ๋์ฑ, ์ํธ ์ด์ฉ์ฑ ๋ฐ ๋ณด์์ ์ด์งํจ์ผ๋ก์จ ๊ฐ๋ฐ์๊ฐ ๋ค์ํ ํ๋ซํผ์ ์ํ ํจ์จ์ ์ด๊ณ ์ด์ ๊ฐ๋ฅํ๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. Wasm ์ํ๊ณ๊ฐ ์ฑ์ํจ์ ๋ฐ๋ผ ์ด ๊ธฐ์ ์ ํด๋ผ์ฐ๋ ์ปดํจํ , ์ฃ์ง ์ปดํจํ ๋ฐ ์ ์ธ๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. Wasm์ ๋๋ฌ์ผ ๋๊ตฌ, ์ง์ ๋ฐ ์ปค๋ฎค๋ํฐ๋ ์ง์์ ์ผ๋ก ์ฑ์ฅํ๊ณ ์์ด ์ด ๊ธฐ์ ์ ํ์ฉํ๊ธฐ๊ฐ ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฌ์์ก์ต๋๋ค.
WASI Preview 2์ ์ปดํฌ๋ํธ ๋ชจ๋ธ๋ก์ ์ ํ์ WebAssembly ์งํ์ ์ค์ํ ์๊ฐ์ ๋๋ค. ์ด๋ ์ด์ ๊ฐ๋ฅํ๊ณ ๋ชจ๋์์ด๋ฉฐ ์์ ํ ์ํํธ์จ์ด ์์ฑ์ ์ํ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ๋งค๋ ฅ์ ์ธ ํ๋ซํผ์ด ๋ฉ๋๋ค. ์ด ํ๋ซํผ์์ ์ฑ๊ณต์ ์ด์ ๋ Wasm์ ํต์ฌ์ ์ด๋ฃจ๋ ์ธํฐํ์ด์ค, ํด๋ง ๋ฐ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค.