WASI(WebAssembly μμ€ν μΈν°νμ΄μ€) λ€νΈμν¬ μΈν°νμ΄μ€, νΉν μμΌ ν΅μ APIλ₯Ό μ¬μΈ΅ λΆμν©λλ€. μ΄μμ± μκ³ μμ ν λ€νΈμν¬ μ± κ΅¬μΆμ μν μν€ν μ², μ₯μ , 보μ λ° μ€μ μμ λ₯Ό λ°°μ보μΈμ.
WebAssembly WASI λ€νΈμν¬ μΈν°νμ΄μ€: μμΌ ν΅μ API - μ’ ν© κ°μ΄λ
WebAssembly(Wasm)λ κ³ μ±λ₯μ μ΄μμ± μκ³ μμ ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν νμ μ μΈ κΈ°μ λ‘ λΆμνμ΅λλ€. μ²μμλ μΉμ μν΄ μ€κ³λμμ§λ§, κ·Έ κΈ°λ₯μ λΈλΌμ°μ λ₯Ό ν¨μ¬ λ°μ΄λμ΄ ν΄λΌμ°λ μ»΄ν¨ν , μ£μ§ μ»΄ν¨ν , IoT μ₯μΉ λ± λ€μν λΆμΌμμ μμ©λκ³ μμ΅λλ€. Wasmμ κ΄λ²μν μ±νμ κ°λ₯νκ² νλ ν΅μ¬ μμλ WebAssembly μμ€ν μΈν°νμ΄μ€(WASI)λ‘, μ΄λ Wasm λͺ¨λμ΄ κΈ°λ³Έ μ΄μ 체μ μ μνΈ μμ©ν μ μλ νμ€νλ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
μ΄ μ’ ν© κ°μ΄λμμλ WASI λ€νΈμν¬ μΈν°νμ΄μ€, νΉν μμΌ ν΅μ APIμ λν΄ μμΈν μμλ΄ λλ€. μ°λ¦¬λ WasmμΌλ‘ κ°λ ₯νκ³ μ΄μμ± μλ λ€νΈμν¬ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λμμ΄ λλλ‘ μν€ν μ², μ₯μ , 보μ κ³ λ € μ¬νμ μ΄ν΄λ³΄κ³ μ€μ μμ λ₯Ό μ 곡ν κ²μ λλ€.
WASIλ 무μμΈκ°?
WASIλ WebAssemblyλ₯Ό μν λͺ¨λμ μμ€ν μΈν°νμ΄μ€μ λλ€. μ΄λ Wasm λͺ¨λμ΄ νμΌ, λ€νΈμνΉ, μκ°κ³Ό κ°μ μμ€ν 리μμ€μ μμ νκ³ μ΄μμ± μλ λ°©μμΌλ‘ μ‘μΈμ€ν μ μλλ‘ νλ κ²μ λͺ©νλ‘ ν©λλ€. WASI μ΄μ μλ Wasm λͺ¨λμ΄ λΈλΌμ°μ μ μλλ°μ€μ κ΅νλμ΄ μΈλΆ μΈκ³μ λν μ κ·Όμ΄ μ νμ μ΄μμ΅λλ€. WASIλ Wasm λͺ¨λμ΄ ν΅μ λκ³ μμ ν λ°©μμΌλ‘ μ΄μ 체μ μ μνΈ μμ©ν μ μλ νμ€νλ APIλ₯Ό μ 곡ν¨μΌλ‘μ¨ μ΄λ₯Ό λ³νμν΅λλ€.
WASIμ μ£Όμ λͺ©νλ λ€μκ³Ό κ°μ΅λλ€:
- μ΄μμ±: WASIλ νλ«νΌ λ 립μ μΈ APIλ₯Ό μ 곡νμ¬ Wasm λͺ¨λμ΄ μμ μμ΄ λ€λ₯Έ μ΄μ 체μ λ° μν€ν μ²μμ μ€νλ μ μλλ‘ ν©λλ€.
- 보μ: WASIλ κΈ°λ₯ κΈ°λ° λ³΄μ λͺ¨λΈμ μ¬μ©νμ¬ Wasm λͺ¨λμ΄ λͺ μμ μΌλ‘ λΆμ¬λ 리μμ€μλ§ μ‘μΈμ€ν μ μλλ‘ ν©λλ€.
- λͺ¨λμ±: WASIλ λͺ¨λμ μΈν°νμ΄μ€ μΈνΈλ‘ μ€κ³λμ΄ κ°λ°μκ° μμ μ μ ν리μΌμ΄μ μ νμν νΉμ κΈ°λ₯μ μ νν μ μμ΅λλ€.
WASI λ€νΈμν¬ μΈν°νμ΄μ€
WASI λ€νΈμν¬ μΈν°νμ΄μ€λ Wasm λͺ¨λμ΄ μμΌ μμ±, μ격 μλ² μ°κ²°, λ°μ΄ν° μ‘μμ , λ€μ΄μ€λ μ°κ²° μμ λκΈ°μ κ°μ λ€νΈμν¬ μμ μ μνν μ μλλ‘ ν©λλ€. μ΄λ Wasm μ ν리μΌμ΄μ μ λ€μκ³Ό κ°μ κ΄λ²μν κ°λ₯μ±μ μ΄μ΄μ€λλ€:
- WasmμΌλ‘ μλ² μΈ‘ μ ν리μΌμ΄μ ꡬμΆ.
- λ€νΈμν¬ νλ‘ν μ½ λ° μλΉμ€ ꡬν.
- μ격 APIμ μνΈ μμ©νλ ν΄λΌμ΄μΈνΈ μΈ‘ μ ν리μΌμ΄μ μμ±.
- λ€λ₯Έ μ₯μΉμ ν΅μ νλ IoT μ ν리μΌμ΄μ κ°λ°.
μμΌ ν΅μ API κ°μ
WASI μμΌ ν΅μ APIλ μμΌμ κ΄λ¦¬νκ³ λ€νΈμν¬ μμ μ μννκΈ° μν ν¨μ μΈνΈλ₯Ό μ 곡ν©λλ€. μ΄λ¬ν ν¨μλ POSIX μ΄μ 체μ μμ μ 곡νλ κ²κ³Ό κ°μ μ ν΅μ μΈ μμΌ APIμμ λ³Ό μ μλ ν¨μμ μ μ¬νμ§λ§, 보μ λ° μ΄μμ± κ³ λ € μ¬νμ΄ μΆκ°λμμ΅λλ€.
WASI μμΌ APIκ° μ 곡νλ ν΅μ¬ κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€:
- μμΌ μμ±: μ§μ λ μ£Όμ ν¨λ°λ¦¬ λ° μμΌ μ νμΌλ‘ μ μμΌ μλν¬μΈνΈλ₯Ό μμ±ν©λλ€.
- λ°μΈλ©: μμΌμ λ‘컬 μ£Όμλ₯Ό ν λΉν©λλ€.
- μμ λκΈ°: λ€μ΄μ€λ μ°κ²°μ μλ½νλλ‘ μμΌμ μ€λΉν©λλ€.
- μ°κ²°: μ격 μλ²μ λν μ°κ²°μ μ€μ ν©λλ€.
- μλ½: μμ λκΈ° μ€μΈ μμΌμμ λ€μ΄μ€λ μ°κ²°μ μλ½ν©λλ€.
- λ°μ΄ν° μ‘μμ : μμΌ μ°κ²°μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘νκ³ μμ ν©λλ€.
- λ«κΈ°: μμΌμ λ«κ³ 리μμ€λ₯Ό ν΄μ ν©λλ€.
μ£Όμ κ°λ λ° ν¨μ νΈμΆ
WASI μμΌ APIμ λͺ κ°μ§ μ£Όμ κ°λ κ³Ό ν¨μ νΈμΆμ λν΄ λ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
1. μμΌ μμ± (sock_open)
sock_open ν¨μλ μλ‘μ΄ μμΌμ μμ±ν©λλ€. λ κ°μ μΈμλ₯Ό λ°μ΅λλ€:
- μ£Όμ ν¨λ°λ¦¬: μμΌμ μ¬μ©ν μ£Όμ ν¨λ°λ¦¬λ₯Ό μ§μ ν©λλ€ (μ: IPv4μ κ²½μ°
AF_INET, IPv6μ κ²½μ°AF_INET6). - μμΌ μ ν: μμ±ν μμΌμ μ νμ μ§μ ν©λλ€ (μ: TCPμ κ²½μ°
SOCK_STREAM, UDPμ κ²½μ°SOCK_DGRAM).
μ΄ ν¨μλ μλ‘ μμ±λ μμΌμ λνλ΄λ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ°νν©λλ€.
μμ (κ°λ μ ):
``` wasi_fd = sock_open(AF_INET, SOCK_STREAM); ```
2. λ°μΈλ© (sock_bind)
sock_bind ν¨μλ μμΌμ λ‘컬 μ£Όμλ₯Ό ν λΉν©λλ€. μ΄λ μΌλ°μ μΌλ‘ μλ² μμΌμμ λ€μ΄μ€λ μ°κ²°μ μμ λκΈ°νκΈ° μ μ μνλ©λλ€. μΈ κ°μ μΈμλ₯Ό λ°μ΅λλ€:
- νμΌ λμ€ν¬λ¦½ν°: λ°μΈλ©ν μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
- μ£Όμ: λ°μΈλ©ν λ‘컬 μ£Όμμ ν¬νΈλ₯Ό ν¬ν¨νλ sockaddr ꡬ쑰체μ λν ν¬μΈν°μ λλ€.
- μ£Όμ κΈΈμ΄: sockaddr ꡬ쑰체μ κΈΈμ΄μ λλ€.
μμ (κ°λ μ ):
``` sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8080); // ν¬νΈ 8080 addr.sin_addr.s_addr = INADDR_ANY; // λͺ¨λ μΈν°νμ΄μ€μμ μμ λκΈ° wasi_error = sock_bind(wasi_fd, &addr, sizeof(addr)); ```
3. μμ λκΈ° (sock_listen)
sock_listen ν¨μλ μμΌμ΄ λ€μ΄μ€λ μ°κ²°μ μλ½νλλ‘ μ€λΉν©λλ€. μ΄λ μΌλ°μ μΌλ‘ μμΌμ λ‘컬 μ£Όμμ λ°μΈλ©ν ν, μ°κ²°μ μλ½νκΈ° μ μ μνλ©λλ€. λ κ°μ μΈμλ₯Ό λ°μ΅λλ€:
- νμΌ λμ€ν¬λ¦½ν°: μμ λκΈ°ν μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
- λ°±λ‘κ·Έ: μμΌμ λν΄ λκΈ°μ΄μ μΆκ°λ μ μλ μ΅λ 보λ₯ μ€μΈ μ°κ²° μμ λλ€.
μμ (κ°λ μ ):
``` wasi_error = sock_listen(wasi_fd, 5); // μ΅λ 5κ°μ 보λ₯ μ€μΈ μ°κ²° νμ© ```
4. μ°κ²° (sock_connect)
sock_connect ν¨μλ μ격 μλ²μ λν μ°κ²°μ μ€μ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ
μ΄ μλ²μ μ°κ²°νκΈ° μν΄ μνλ©λλ€. μΈ κ°μ μΈμλ₯Ό λ°μ΅λλ€:
- νμΌ λμ€ν¬λ¦½ν°: μ°κ²°ν μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
- μ£Όμ: μ°κ²°ν μ격 μ£Όμμ ν¬νΈλ₯Ό ν¬ν¨νλ sockaddr ꡬ쑰체μ λν ν¬μΈν°μ λλ€.
- μ£Όμ κΈΈμ΄: sockaddr ꡬ쑰체μ κΈΈμ΄μ λλ€.
μμ (κ°λ μ ):
``` sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(80); // ν¬νΈ 80 inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr); // λ‘컬νΈμ€νΈμ μ°κ²° wasi_error = sock_connect(wasi_fd, &addr, sizeof(addr)); ```
5. μλ½ (sock_accept)
sock_accept ν¨μλ μμ λκΈ° μ€μΈ μμΌμμ λ€μ΄μ€λ μ°κ²°μ μλ½ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ μλ² μ ν리μΌμ΄μ
μ΄ μλ‘μ΄ ν΄λΌμ΄μΈνΈ μ°κ²°μ μ²λ¦¬νκΈ° μν΄ μνλ©λλ€. νλμ μΈμλ₯Ό λ°μ΅λλ€:
- νμΌ λμ€ν¬λ¦½ν°: μμ λκΈ° μ€μΈ μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
μ΄ ν¨μλ μλ½λ μ°κ²°μ λνλ΄λ μλ‘μ΄ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ°νν©λλ€. μ΄ μλ‘μ΄ νμΌ λμ€ν¬λ¦½ν°λ ν΄λΌμ΄μΈνΈμ λ°μ΄ν°λ₯Ό μ‘μμ νλ λ° μ¬μ©λ μ μμ΅λλ€.
μμ (κ°λ μ ):
``` client_fd = sock_accept(wasi_fd); ```
6. λ°μ΄ν° μ‘μμ (sock_send, sock_recv)
sock_send λ° sock_recv ν¨μλ μμΌ μ°κ²°μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘νκ³ μμ νλ λ° μ¬μ©λ©λλ€. λ€μκ³Ό κ°μ μΈμλ₯Ό λ°μ΅λλ€ (λ¨μνλ 보기):
- νμΌ λμ€ν¬λ¦½ν°: λ°μ΄ν°λ₯Ό μ‘μμ ν μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
- λ²νΌ: μ‘μμ ν λ°μ΄ν°λ₯Ό ν¬ν¨νλ λ²νΌμ λν ν¬μΈν°μ λλ€.
- κΈΈμ΄: μ‘μμ ν λ°μ΄νΈ μμ λλ€.
μμ (κ°λ μ ):
``` char buffer[1024]; size_t bytes_sent = sock_send(client_fd, buffer, 1024); size_t bytes_received = sock_recv(client_fd, buffer, 1024); ```
7. λ«κΈ° (sock_close)
sock_close ν¨μλ μμΌμ λ«κ³ 리μμ€λ₯Ό ν΄μ ν©λλ€. νλμ μΈμλ₯Ό λ°μ΅λλ€:
- νμΌ λμ€ν¬λ¦½ν°: λ«μ μμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
μμ (κ°λ μ ):
``` wasi_error = sock_close(wasi_fd); ```
보μ κ³ λ € μ¬ν
λ€νΈμν¬ μ ν리μΌμ΄μ μ λ€λ£° λ 보μμ κ°μ₯ μ€μν κ΄μ¬μ¬μ λλ€. WASIλ κΈ°λ₯ κΈ°λ° λ³΄μ λͺ¨λΈμ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. μ¦, Wasm λͺ¨λμ λͺ μμ μΌλ‘ λΆμ¬λ 리μμ€μλ§ μ‘μΈμ€ν μ μμ΅λλ€. μ΄λ μ μμ μΈ λͺ¨λμ΄ λ―Όκ°ν λ°μ΄ν°μ μ‘μΈμ€νκ±°λ λ¬΄λ¨ μμ μ μννλ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
WASI λ€νΈμν¬ μΈν°νμ΄μ€μ λν μ£Όμ 보μ κ³ λ € μ¬νμ λ€μκ³Ό κ°μ΅λλ€:
- κΈ°λ₯ κΈ°λ° λ³΄μ: Wasm λͺ¨λμ λ€νΈμν¬μ μ‘μΈμ€νκΈ° μν΄ λͺ μμ μΈ κΆνμ λΆμ¬λ°μμΌ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ νμΌ λμ€ν¬λ¦½ν°μ μ μ¬ν λ©μ»€λμ¦μ ν΅ν΄ μ΄λ£¨μ΄μ§λ©°, λͺ¨λμ λ€νΈμν¬ μμ μ μννλ λ° μ¬μ©ν μ μλ μμΌμ λν νΈλ€μ λ°μ΅λλ€.
- μλλ°μ±: Wasm λͺ¨λμ μλλ°μ€ νκ²½μμ μ€νλμ΄ νΈμ€νΈ μμ€ν μ λν μ‘μΈμ€λ₯Ό μ νν©λλ€. μ΄λ μ μμ μΈ λͺ¨λμ΄ μλλ°μ€λ₯Ό νμΆνμ¬ νΈμ€νΈ μμ€ν μ μμμν€λ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
- μ£Όμ κ³΅κ° κ²©λ¦¬: κ° Wasm λͺ¨λμ μ체μ μΌλ‘ 격리λ μ£Όμ 곡κ°μ κ°μ§λ―λ‘ λ€λ₯Έ λͺ¨λμ΄λ νΈμ€νΈ μμ€ν μ λ©λͺ¨λ¦¬μ μ‘μΈμ€ν μ μμ΅λλ€.
- 리μμ€ μ ν: Wasm λͺ¨λμλ λ©λͺ¨λ¦¬ μ¬μ©λ λ° CPU μκ°κ³Ό κ°μ 리μμ€ μ νμ΄ μ μ©λ μ μμ΅λλ€. μ΄λ μ μμ μΈ λͺ¨λμ΄ κ³Όλν 리μμ€λ₯Ό μλΉνμ¬ νΈμ€νΈ μμ€ν μ μ±λ₯μ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
νΉμ WASI λ€νΈμν¬ μΈν°νμ΄μ€ 보μ μΈ‘λ©΄μ λ€μκ³Ό κ°μ΅λλ€:
- DNS νμΈ: λλ©μΈ μ΄λ¦μ νμΈνλ κΈ°λ₯μ μ μ¬μ μΈ κ³΅κ²© 벑ν°λ₯Ό λμ ν©λλ€. DNS νμΈμ λν μ μ΄(μ: λͺ¨λμ΄ νμΈν μ μλ λλ©μΈ μ ν)κ° μ€μν©λλ€.
- μμλ°μ΄λ μ°κ²°: Wasm λͺ¨λμ΄ μ°κ²°ν μ μλ IP μ£Όμμ ν¬νΈλ₯Ό μ ννλ κ²μ λ΄λΆ λ€νΈμν¬ λ¦¬μμ€λ μ μμ μΈ μΈλΆ μλ²μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§νλ λ° νμμ μ λλ€.
- μμ λκΈ° ν¬νΈ: Wasm λͺ¨λμ΄ μμμ ν¬νΈμμ μμ λκΈ°νλλ‘ νμ©νλ κ²μ μ¬κ°ν 보μ μνμ΄ λ μ μμ΅λλ€. WASI ꡬνμ μΌλ°μ μΌλ‘ λͺ¨λμ΄ λ°μΈλ©ν μ μλ ν¬νΈλ₯Ό μ νν©λλ€.
μ€μ©μ μΈ μμ
λ€μν νλ‘κ·Έλλ° μΈμ΄μμ WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ λ°©λ²μ λν λͺ κ°μ§ μ€μ©μ μΈ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ 1: Rustλ‘ κ΅¬νν κ°λ¨ν TCP μμ½ μλ²
μ΄ μμ λ WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ Rustλ‘ μμ±λ κ°λ¨ν TCP μμ½ μλ²λ₯Ό 보μ¬μ€λλ€. μ΄λ *μμ΄λμ΄*λ₯Ό 보μ¬μ£Όλ κ°λ μ μμ μ΄λ©° μ€ννλ €λ©΄ μ μ ν WASI Rust λ°μΈλ©κ³Ό WASI λ°νμμ΄ νμνλ€λ μ μ μ μνμμμ€.
```rust
// μ΄κ²μ λ¨μνλ μμ μ΄λ©° μ μ ν WASI λ°μΈλ©μ΄ νμν©λλ€.
fn main() -> Result<(), Box
μ€λͺ :
- μ½λλ TCP 리μ€λλ₯Ό
0.0.0.0:8080μ£Όμμ λ°μΈλ©ν©λλ€. - κ·Έλ° λ€μ 루νμ μ§μ νμ¬ λ€μ΄μ€λ μ°κ²°μ μλ½ν©λλ€.
- κ° μ°κ²°μ λν΄ ν΄λΌμ΄μΈνΈλ‘λΆν° λ°μ΄ν°λ₯Ό μ½μ΄ λ€μ μμ½ν©λλ€.
- κ²¬κ³ μ±μ μν΄ μ€λ₯ μ²λ¦¬(
Resultμ¬μ©)κ° ν¬ν¨λμ΄ μμ΅λλ€.
μμ 2: C++λ‘ κ΅¬νν κ°λ¨ν HTTP ν΄λΌμ΄μΈνΈ
μ΄ μμ λ WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ C++λ‘ μμ±λ κ°λ¨ν HTTP ν΄λΌμ΄μΈνΈλ₯Ό 보μ¬μ€λλ€. λ€μ λ§νμ§λ§, μ΄κ²μ κ°λ μ μμ μ΄λ©° WASI C++ λ°μΈλ©κ³Ό λ°νμμ μμ‘΄ν©λλ€.
```cpp
// μ΄κ²μ λ¨μνλ μμ μ΄λ©° μ μ ν WASI λ°μΈλ©μ΄ νμν©λλ€.
#include
μ€λͺ :
- μ½λλ
sock_openμ μ¬μ©νμ¬ μμΌμ μμ±νλ €κ³ μλν©λλ€. - κ·Έλ° λ€μ (κ°μμΌλ‘) νΈμ€νΈ μ΄λ¦μ IP μ£Όμλ‘ νμΈν©λλ€.
sock_connectλ₯Ό μ¬μ©νμ¬ μλ²μ μ°κ²°νλ €κ³ μλν©λλ€.- HTTP GET μμ²μ λΉλνκ³
sock_sendλ₯Ό μ¬μ©νμ¬ μ μ‘ν©λλ€. sock_recvλ₯Ό μ¬μ©νμ¬ HTTP μλ΅μ μμ νκ³ μ½μμ μΆλ ₯ν©λλ€.- λ§μ§λ§μΌλ‘
sock_closeλ₯Ό μ¬μ©νμ¬ μμΌμ λ«μ΅λλ€.
μ€μ μ°Έκ³ : μ΄ μμ λ€μ λ§€μ° λ¨μνλμμΌλ©° μ€λͺ μ μ λλ€. μ€μ ꡬνμμλ μ μ ν μ€λ₯ μ²λ¦¬, μ£Όμ νμΈ(λ³λμ WASI APIλ₯Ό ν΅ν΄ κ°λ₯μ±μ΄ λμ), λ κ°λ ₯ν λ°μ΄ν° μ²λ¦¬κ° νμν©λλ€. λν ν΄λΉ μΈμ΄μ WASI νΈν λ€νΈμνΉ λΌμ΄λΈλ¬λ¦¬κ° μ‘΄μ¬ν΄μΌ ν©λλ€.
WASI λ€νΈμν¬ μΈν°νμ΄μ€ μ¬μ©μ μ΄μ
WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ©΄ λͺ κ°μ§ μ΄μ μ΄ μμ΅λλ€:
- μ΄μμ±: Wasm λͺ¨λμ μμ μμ΄ λ€λ₯Έ μ΄μ 체μ λ° μν€ν μ²μμ μ€νλ μ μμΌλ―λ‘ λ€μν νκ²½μ μ ν리μΌμ΄μ μ λ μ½κ² λ°°ν¬ν μ μμ΅λλ€.
- 보μ: κΈ°λ₯ κΈ°λ° λ³΄μ λͺ¨λΈμ κ°λ ₯ν 보μ κ³μΈ΅μ μ 곡νμ¬ μ μμ μΈ λͺ¨λμ΄ λ―Όκ°ν 리μμ€μ μ‘μΈμ€νκ±°λ λ¬΄λ¨ μμ μ μννλ κ²μ λ°©μ§ν©λλ€.
- μ±λ₯: Wasmμ λ€μ΄ν°λΈμ κ°κΉμ΄ μ±λ₯μΌλ‘ κ³ μ±λ₯ λ€νΈμν¬ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.
- λͺ¨λμ±: WASIμ λͺ¨λμ μ€κ³λ₯Ό ν΅ν΄ κ°λ°μλ μ ν리μΌμ΄μ μ νμν νΉμ κΈ°λ₯μ μ ννμ¬ λͺ¨λμ μ 체 ν¬κΈ°μ 볡μ‘μ±μ μ€μΌ μ μμ΅λλ€.
- νμ€ν: WASIλ νμ€νλ APIλ₯Ό μ 곡νμ¬ κ°λ°μκ° λ μ½κ² λ°°μ°κ³ μ¬μ©ν μ μλλ‘ νλ©°, μλ‘ λ€λ₯Έ Wasm λ°νμ κ°μ μνΈ μ΄μ©μ±μ μ΄μ§ν©λλ€.
κ³Όμ λ° ν₯ν λ°©ν₯
WASI λ€νΈμν¬ μΈν°νμ΄μ€λ μλΉν μ΄μ μ μ 곡νμ§λ§, κ³ λ €ν΄μΌ ν λͺ κ°μ§ κ³Όμ λ μμ΅λλ€:
- μ±μλ: WASI λ€νΈμν¬ μΈν°νμ΄μ€λ μμ§ λΉκ΅μ μλ‘κ³ νλ°νκ² κ°λ° μ€μ λλ€. APIλ μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½λ μ μμΌλ©°, μΌλΆ κΈ°λ₯μ μμ§ μμ ν ꡬνλμ§ μμμ μ μμ΅λλ€.
- λΌμ΄λΈλ¬λ¦¬ μ§μ: κ³ νμ§μ WASI νΈν λ€νΈμνΉ λΌμ΄λΈλ¬λ¦¬μ κ°μ©μ±μ μμ§ μ νμ μ λλ€.
- λλ²κΉ : WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ Wasm μ ν리μΌμ΄μ μ λλ²κΉ νλ κ²μ κΈ°μ‘΄ λλ²κΉ λκ΅¬κ° μμ ν μ§μλμ§ μμ μ μμΌλ―λ‘ μ΄λ €μΈ μ μμ΅λλ€.
- λΉλκΈ° μμ : λΉλκΈ° λ€νΈμν¬ μμ μ νμ€νλ λ°©μμΌλ‘ μ§μνλ κ²μ μ§μμ μΈ λ Έλ ₯μ λλ€. νμ¬ μ루μ μ μ’ μ’ ν΄λ§μ΄λ μ½λ°±μ μμ‘΄νλ©°, μ΄λ μ§μ ν λΉλκΈ° I/Oλ³΄λ€ ν¨μ¨μ±μ΄ λ¨μ΄μ§ μ μμ΅λλ€.
WASI λ€νΈμν¬ μΈν°νμ΄μ€μ ν₯ν λ°©ν₯μ λ€μκ³Ό κ°μ΅λλ€:
- API κ°μ : κ°λ°μ λ° κ΅¬νμμ νΌλλ°±μ κΈ°λ°μΌλ‘ APIλ₯Ό κ°μ ν©λλ€.
- μλ‘μ΄ κΈ°λ₯ μΆκ°: λ λ°μ λ λ€νΈμν¬ νλ‘ν μ½ λ° κΈ°λ₯μ λν μ§μμ μΆκ°ν©λλ€.
- λꡬ κ°μ : WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ Wasm μ ν리μΌμ΄μ μ μν λ λμ λλ²κΉ λ° νλ‘νμΌλ§ λꡬλ₯Ό κ°λ°ν©λλ€.
- 보μ κ°ν: 보μ λͺ¨λΈμ κ°ννκ³ μ μ¬μ μΈ μ·¨μ½μ μ ν΄κ²°ν©λλ€.
- νμ€νλ λΉλκΈ° I/O: WASIμμ λΉλκΈ° λ€νΈμν¬ μμ μ μν νμ€ APIλ₯Ό κ°λ°ν©λλ€.
κ²°λ‘
WebAssembly μμ€ν μΈν°νμ΄μ€(WASI) λ€νΈμν¬ μΈν°νμ΄μ€, νΉν μμΌ ν΅μ APIλ Wasmμ΄ λ€νΈμν¬ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν μ§μ μΌλ‘ μ΄μμ± μκ³ μμ ν νλ«νΌμ΄ λλλ‘ νλ μ€μν μ§μ μ λλ€. μμ§ λ°μ μ€μ΄μ§λ§, μ΄μμ±, 보μ, μ±λ₯ λ° λͺ¨λμ± μΈ‘λ©΄μμ μλΉν μ΄μ μ μ 곡ν©λλ€.
WASI μνκ³κ° μ±μνκ³ λ λ§μ λΌμ΄λΈλ¬λ¦¬μ λꡬλ₯Ό μ¬μ©ν μ μκ² λ¨μ λ°λΌ μλ² μΈ‘ μ ν리μΌμ΄μ λ° λ€νΈμν¬ μλΉμ€μμλΆν° IoT μ₯μΉ λ° μ£μ§ μ»΄ν¨ν μ μ΄λ₯΄κΈ°κΉμ§ λ€νΈμν¬ μ§μ½μ μΈ μ ν리μΌμ΄μ μμ Wasmμ΄ λ λ리 μ±νλ κ²μΌλ‘ κΈ°λν μ μμ΅λλ€. κ°λ°μλ WASI λ€νΈμν¬ μΈν°νμ΄μ€μ κ°λ , κΈ°λ₯ λ° λ³΄μ κ³ λ € μ¬νμ μ΄ν΄ν¨μΌλ‘μ¨ Wasmμ νμ νμ©νμ¬ μ μΈκ³ μ¬μ©μλ₯Ό μν κ°λ ₯νκ³ μ΄μμ± μμΌλ©° μμ ν λ€νΈμν¬ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.
μ΄ κ°μ΄λλ WASI λ€νΈμν¬ μΈν°νμ΄μ€λ₯Ό νμνκΈ° μν κ²¬κ³ ν κΈ°λ°μ μ 곡ν©λλ€. λ€μν νλ‘κ·Έλλ° μΈμ΄λ‘ μ€ννκ³ , μ¬μ© κ°λ₯ν WASI ꡬνμ νμνκ³ , WASI μνκ³μ μ΅μ κ°λ° λν₯μ νμ νμ¬ νμ΅μ κ³μνμμμ€.