์คํ ํฌ๋ ๋ํ๊ต, ์๋์์ด๊ณ ์บ๋ฆฌํฌ๋์ ๋ํ๊ต, ์ค์คํด ํ
์ฌ์ค ๋ํ๊ต ์ฐ๊ตฌ์ ๊ฐ๋ฐํ๋ค ๋๊ตฌ RL๋ฐ์ค, ์ด๋ ํจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ทจ์ฝ์ ์ ์ฐจ๋จํ๊ธฐ ์ํ ์ถ๊ฐ ๊ฒฉ๋ฆฌ ๊ณ์ธต์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. RLBox๋ ๊ฐ๋ฐ์์ ํต์ ํ์ ์์ง ์์ง๋ง ํด๋น ์ทจ์ฝ์ ์ผ๋ก ์ธํด ์ฃผ์ ํ๋ก์ ํธ๋ฅผ ์์์ํฌ ์ ์๋ ์ ๋ขฐํ ์ ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋ชจ์ง๋ผ ํ์ฌ ~์ ๊ณํํ๋ค Firefox 74์ Linux ๋น๋์ Firefox 75์ macOS ๋น๋์์ RLBox๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ์ ๊ฒฉ๋ฆฌํฉ๋๋ค. ์๋ฌต, ๊ธ๊ผด ๋ ๋๋ง์ ๋ด๋นํฉ๋๋ค. ๊ทธ๋ฌ๋ RLBox๋ Firefox์๋ง ๊ตญํ๋์ง ์์ผ๋ฉฐ ์์ ํ๋ก์ ํธ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ์ด ๊ณต์ฌ RL๋ฐ์ค ํ์ฐ MIT ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ. RLBox๋ ํ์ฌ Linux ๋ฐ macOS ํ๋ซํผ์ ์ง์ํ๋ฉฐ Windows๋ ๋์ค์ ์ง์๋ ์์ ์
๋๋ค.
๊ธฐ๊ตฌ RLBox์ ์์
์ ๊ฒฉ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ C/C++ ์ฝ๋๋ฅผ ๋ฎ์ ์์ค์ ์ค๊ฐ WebAssembly ์ฝ๋๋ก ์ปดํ์ผํ๋ ๊ฒ์ผ๋ก ์์ฝ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ฝ๋๋ WebAssembly ๋ชจ๋๋ก ์ค๊ณ๋๋ฉฐ ํด๋น ๋ชจ๋์ ๊ถํ์ ์ด ๋ชจ๋๊ณผ ๊ด๋ จํด์๋ง ์ค์ ๋ฉ๋๋ค(์: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋คํธ์ํฌ ์์ผ์ด๋ ํ์ผ์ ์ด ์ ์์ต๋๋ค). C/C++ ์ฝ๋๋ฅผ WebAssembly๋ก ๋ณํํ๋ ์์
์ ๋ค์์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. wasi-sdk.
์ง์ ์คํ์ ์ํด WebAssembly ๋ชจ๋์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋ฃจ์
๋๋จธ์ง ์ ํ๋ฆฌ์ผ์ด์
๋ฉ๋ชจ๋ฆฌ์ ๊ฒฉ๋ฆฌ๋ ๋ณ๋์ "๋๋
ธํ๋ก์ธ์ค"์์ ์คํ๋ฉ๋๋ค. Lucet ์ปดํ์ผ๋ฌ๋ JIT ์์ง๊ณผ ๋์ผํ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ํฌ๋ ์ธ ๋ฆฌํํธ, Firefox์์ WebAssembly๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์กฐ๋ฆฝ๋ ๋ชจ๋์ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์๋ํ๋ฉฐ ๋๋จธ์ง ์ฃผ์ ๊ณต๊ฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ทจ์ฝ์ ์ด ์
์ฉ๋๋ฉด ๊ณต๊ฒฉ์๋ ์ ํ์ ์ด๋ฉฐ ๊ธฐ๋ณธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ๊ฑฐ๋ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ ์ธ๋ถ๋ก ์ ์ด๊ถ์ ์ด์ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์์๊ฒ ๋์ ์์ค์ ์ ๋ณด๊ฐ ์ ๊ณต๋ฉ๋๋ค. API, ๊ฒฉ๋ฆฌ ๋ชจ๋์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. WebAssembly ํธ๋ค๋ฌ๋ ์ถ๊ฐ ๋ฆฌ์์ค๊ฐ ๊ฑฐ์ ํ์ํ์ง ์์ผ๋ฉฐ ์ด๋ค๊ณผ์ ์ํธ ์์ฉ์ ์ผ๋ฐ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋๋ฆฌ์ง ์์ต๋๋ค(๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋ ํ์์ผ๋ก ์คํ๋๋ฉฐ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ๊ณผ ์ํธ ์์ฉํ๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ ํ์ธํ ๋๋ง ์ค๋ฒํค๋ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค). ๊ฒฉ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ ์ง์ ํธ์ถํ ์ ์์ผ๋ฉฐ ๋ค์์ ์ฌ์ฉํ์ฌ ์ก์ธ์คํด์ผ ํฉ๋๋ค.
๋ ์ด์ด Invoke_sandbox_function().
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ธ๋ถ ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ํจ์๋ Register_callback ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ์ ์๋์ด์ผ ํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก RLBox๋ ํจ์์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค) ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ). ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ณด์ฅํ๋ ค๋ฉด ์ฝ๋ ์คํ ๊ฒฉ๋ฆฌ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ผ๋ฉฐ ๋ฐํ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ๋ ํ์ธํด์ผ ํฉ๋๋ค.
๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์์ฑ๋ ๊ฐ์ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ผ๋ก ํ์๋์ด ์ฌ์ฉ์ด ์ ํ๋ฉ๋๋ค. ์ค์ผ๋ ํ์ ๊ทธ๋ฆฌ๊ณ "์ฒญ์"๋ฅผ ์ํด์๋ ํ์ธ ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค.
์ ๋ฆฌ ์์ด ์ผ๋ฐ ๋ฐ์ดํฐ๊ฐ ํ์ํ ์ปจํ
์คํธ์์ ์ค์ผ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด(๋๋ ๊ทธ ๋ฐ๋) ์ปดํ์ผ ํ์์ ์ค๋ฅ๊ฐ ์์ฑ๋ฉ๋๋ค. ์์ ํจ์ ์ธ์, ๋ฐํ ๊ฐ ๋ฐ ๊ตฌ์กฐ๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ์๋๋ฐ์ค ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ณต์ฌ๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ์ง์ ์๋๋ฐ์ค ์ฐธ์กฐ ํฌ์ธํฐ๊ฐ ๊ธฐ๋ณธ ํ๋ก์ธ์ค๋ก ๋ฐํ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru