WebAssembly์ ๋ณด์ ๋ชจ๋ธ์ ๋ฒ๊ทธ๊ฐ ์๊ฑฐ๋ ์
์ฑ .wasm
ํ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฐ์๊ฐ ๋ณด์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค! ์ฐ๋ฆฌ์ ๋์์ธ์ ๊ทธ ๊ตฌ๋ถ์ ๋ช
ํํ๊ฒ ํ๊ณ , WebAssembly๊ฐ ๊ทธ ๋ณด์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ, WebAssembly๊ฐ ๊ฐ๋ฐ์๊ฐ ๋ณด์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๋๊ตฌ๋ฅผ ์ค๋ช
ํด์ผ ํฉ๋๋ค(์ด๋ WebAssembly์์ ์ฌ๋ฐ๋ฅธ ๊ธฐ๋ณธ ์์ ์ ๊ณต์ ์์กด).
์ด๊ฒ์ ๋์์ธ์ ์ด๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ฃผ๋ก ๋ ์์ ์ ๋ฌธ์ ์ ๋๋ค.
์๋ ํ์ธ์!
์ง๋ฌธ์ด ์์ต๋๋ค. ์ด ๋งฅ๋ฝ์์ ๋ค์์ ๋ํด ์์ธํ ์ค๋ช ํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น?
"๊ทธ ์ธ์ ์์ค ์ธ์ด ์์ค์์ ์ ์๋์ง ์์ ๋์์ ํธ์ถํ๋ ํ๋ก๊ทธ๋จ์ ์์ฉ ํ๋ก๊ทธ๋จ ํ์ ๋ด์ฉ ์์, ์์ ๋งค๊ฐ๋ณ์๋ก API ํธ์ถ, ์ค๋จ, ํธ๋ํ ๋๋ ์์์ ์์ ๋ฆฌ์์ค(ํ๋ ๋ด์์)."
https://github.com/WebAssembly/design/blob/master/CANdC++.md#undefined-and-implementation-defined-behavior
๋ด๊ฐ ์๊ฐํ๊ณ ์๋ ๊ฒ์ ์์ ์ ์ถ๊ฐ ํ ๋ก ์ ์ ๊ณตํ์ฌ ๋ค์ดํฐ๋ธ๊ฐ ์๋ ๋ฐฐ๊ฒฝ์์ ์จ ์น ๊ฐ๋ฐ์์๊ฒ (์๋ง๋) ์ฌ์ฉํ ์ ์๋ ์ปจํ ์คํธ/์ฐธ์กฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, CERT์ MSC14-C. MSC15-CPP. ์ทจ์ฝ์ฑ ์ ์์กดํ์ง ๋ง์ญ์์ค. C ์ปดํ์ผ๋ฌ๋ ์ผ๋ถ ๋ฉ์ด๋ผ์ด๋ ๊ฒ์ฌ๋ฅผ ์๋์ผ๋ก ๋ฒ๋ฆด ์ ์์ต๋๋ค. ์ด "๊ฒฝ๊ณ ๊ฒ์ฌ์ ์๋ ์ ๊ฑฐ" ์์ ์ด์ ๋ํด ๋ ์์ธํ ์ค๋ช ํจ).
๋ณด๋ค ์ฌ์ธต์ ์ธ ์น๋ฃ:
๊ธฐํ ์ ์ฌ์ ์ผ๋ก ๊ด๋ จ๋ ์กฐ์ธ:
wasm ํ์ผ์ ์ ์ดํ๊ธฐ ์ํ ๊ณ ์ ํ CSP ํค๋๊ฐ ๋์์ด ๋ ๊น์? ์ฌ์ดํธ ์์ ์๊ฐ ํ์ ๋ฆฌ์์ค๊ฐ wasm์ ๋ก๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์
๋๋ค. eval
๋ฐ Function
๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ์ฐ์ ์ฌ์ดํธ์์ WebAssembly์ ๋์ ๋ก๋ ๋ฐ ํ๊ฐ๋ฅผ ํ์ฉํ์ง ์์์ผ ํฉ๋๋ค(์ด๋ Loader
์ ๋ํ ES6 ๋ชจ๋ ํตํฉ ๋ฐ CSP ๊ฒ์ฌ์์ ์ ์ธ๋ฉ๋๋ค.
๋์ ์ฐ๊ฒฐ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ณด์ ๋ฌธ์ ์ ๋ํ ๋ ผ์๋ #53์ ์ฐธ์กฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
@jfbastien yup CORS ๋ฐ SRI๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
@lukewagner ๋๋ wasm์ด ํ์ฑํํ ๋ฆฌ์์ค์ ๋ํ ๋ฎ์ ์์ค์ ์ก์ธ์ค์ ๋ฌ๋ ค ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ด ์์์์ ๋งํ๋ฏ์ด ๊ทธ๊ฒ์ ๋จ์ง JS์
๋๋ค. ๊ทธ๋ฌ๋ wasm์ ๊ฐ์ฅ ์ค์ํ ๋ชฉํ๋ ๊ธฐ๊ณ ๊ธ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ญ ์ ์ด์ ๋ํ CSP ์ง์๋ฌธ์ ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ํ ๋ณด๋ค ์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์๋ ๋ ์ข์ ๊ฒ์
๋๋ค.
๋ค๋ฅธ ์ฆ๊ฐ์ ์ธ ๊ฐ๋ฅ์ฑ์ ๋ค๋ฅธ ์ ์์ค ์ก์ธ์ค์ ๊ถํ API๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
์, ์ฑ๋ฅ ๋ฉด์์ ๊ธ์์ ๊ฐ๊น์ต๋๋ค. ๋ณด์, ๊ถํ ๋ฐ ์๋๋ฐ์ฑ ๊ด์ ์์ WebAssembly๊ฐ JS์์ ๋ถ๊ธฐ๋๋ ๊ฒ์ ๋ํ ๋ ผ์๋ ์์ต๋๋ค.
MVP ์ดํ์ Brendan Eichs ๋ฐํ์์ ์ป์ ๋๋์ ์๋์์ง๋ง ๊ด์ฐฎ์ต๋๋ค. +1:
๋๋ ๋น์ ์ด ์ธ๊ธํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐํ๋ค๊ณ ์๊ฐ ์ ๋์ ํ MVP, WebAssembly ์๋ฏธ๊ฐ ํจ์จ์ ์ผ๋ก JS์์ polyfilled ํ ์์๋ ๊ฒ์ ๊ฐ๋ผ์ง๋์ ํ์ฉ ๋ ๊ฒ์ด๋ผ๊ณ . ์ด ์ฐจ์ด๋ ๋ณด์/๊ถํ๊ณผ๋ ์๋ฌด ๊ด๋ จ์ด ์๋ ๊ณ์ฐ ๊ธฐ๋ฅ์ ๊ดํ ๊ฒ์ ๋๋ค. ์ฆ, ํด๋ฆฌํ์ _ํจ์จ์ ์ผ๋ก_ ํ ์๋ ์์ง๋ง JS( Emterpreter ์คํ์ผ )๋ก ์์ฑ๋ WebAssembly ์ธํฐํ๋ฆฌํฐ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ _์๋ฎฌ๋ ์ดํธํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด ํจ๊ณผ์ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ์ฌ "JS์์ ๋ถ๊ธฐ"๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋ฌถ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
๋ค, ํ์คํ ๋ฌธ์์ ์ข์ ๊ฐ์ ์ฌํญ์ด ๋ ๊ฒ์ ๋๋ค. ๋ฌธ์๋ฅผ ๋๋ฌด ๋นจ๋ฆฌ ์ฝ์์ ์๋ ์์ง๋ง ๋ช ํํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋ด๊ฐ wass๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ์ป์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋ง๋ ๋ ๋ง์ ์ค๋ ๋ฉ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํ Eichs์ ์ด์ผ๊ธฐ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๊ฒ๋ค์ด JavaScript์๋ ์ถ๊ฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์ผ๋ฐ์ ์ธ ์กฐ์ฌ์ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
"JS๋ณด๋ค ๋ณด์ POV์ ๋ค๋ฅด์ง ์์"์ด ์ด์ Web.md ์ ์์ต๋๋ค.
๊ทธ ์ฐจ์ด๋ฅผ ๋ ์ ์ค๋ช ํ๊ณ ์ถ์ต๋๋ค. JS๋ฅผ ์ธ๊ธํ๋ ๊ฒ์ ์์ฒด์ ์ธ ๊ด์ ์์ ๊ทธ๋ฆฌ ์ข์ง ์์ผ๋ฉฐ, ์ ๋ ์ค์ ๋ก JS๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ณด์ ๋ ธ์ถ ์์ญ(์: cross-origin ์คํฌ๋ฆฝํธ ๋ฑ)์ ์ค์ด๊ณ ์ถ๋ค๊ณ ์๊ฐํฉ๋๋ค.
CppCon์์ ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋ด์ผ๋ ์ด์ ์ด๊ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค :-)
WebAssembly๋ฅผ ์ํธํ ๊ตฌํ์ ๋์์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์๊ฒ๋ ๊ณ ์ ์๊ฐ ๊ตฌํ ์ง์ ์ธก๋ฉด์์ JS/asm.js JIT์ WebAssembly JIT์ ์ฐจ์ด์ ์ ๋ํด ์์ธํ ์ค๋ช ํ๋ ๊ฒ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค. ๋นํธ ์ํํธ, JIT ๋์ ํ ๋ถ๊ธฐ, ์กฐ๊ฑด๋ถ ์ ํ ๋๋ ์กฐํ ๋๋ JIT๊ฐ ํ์ด๋ฐ ๋์๋ฅผ ์ ๋ฐํ ์ ์๋ ๊ธฐํ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ฐ์ ์์ ์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ์๊ฐํ๊ณ ์์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ WebAssembly๊ฐ ์ด๋ฏธ asm.js์ ๋ํด ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ณด๋ค ๋ ๋์ ๊ณ ์ ์๊ฐ ๊ตฌํ์ ์ง์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง ์์์ผ ํ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ์ ๋ํ WebAssembly์ ๋ณด์ ์๋ฏธ์ ๋ํด ์์ธํ ์ค๋ช ํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์ธ๊ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. WebAssembly๊ฐ ํ์ฌ ์กด์ฌํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ๋ ๋์ ๊ฐํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋จ์ ์ ๊ณตํ๋ค๋ฉด(ํ์ฌ ๋๋ MVP ์ดํ, ์ฌ์์ ์์ธํ ์ฝ์ง ์์์ต๋๋ค), ๊ทธ๊ฒ๋ ์์ธํ ์ค๋ช ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://github.com/jedisct1/libsodium.js/issues/24#issuecomment -128002942์๋ ํด๋ผ์ด์ธํธ ์ธก JavaScript ์ํธํ์ ๊ด๋ จ๋ ๊ธฐ์กด ๋ฌธ์ ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ต๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ด๊ฒ์ ๋ชจ๋ ๋งค์ฐ ํฅ๋ฏธ ์ง์งํฉ๋๋ค. :NS
@dconnolly๊ฐ ์ ์ํ ๋๋ก ๋ช ํํ ์ง์ ์ด ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํ์ต๋๋ค. ์ง๊ธ๊น์ง ๋ ผ์ํ ๋ด์ฉ์ MVP์ ๊ฒฝ์ฐ JIT๊ฐ ํ ์ ์๋ ๊ฒ๊ณผ ํ ์ ์๋ ๊ฒ์ ๋ํ ๋ณด์ฅ์ด ์์ผ๋ฉฐ, ์ผ์ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ด๋ MVP์์๋ wasm์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ด์์ต๋๋ค. ์ด๋ ํฅํ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
ํ์ฌ๋ก์๋ ์ ์ ํ ๊ณ ์ ์๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ด์ ๋ธ๋ฆฌ์ ๋ง์ดํฌ๋ก ์ํคํ ์ฒ์ ๋ํ ์ถฉ๋ถํ ์ดํด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ API(์น ํ๋ซํผ๊ณผ ๊ฐ์ ์๋ฒ ๋์์ ์ ๊ณตํ๋)๊ฐ ๊ทธ๋ฌํ ๋ณด์ฆ์ ์ ๊ณตํ๋ ๋ฐ ๋ ๋์ ์์น์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋์ ๋ฐ์ด๋๋ฆฌ ๋ณํ์ ์ํํ๋ CPU์ ๊ทน๋จ์ ์ธ ์๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. WebAssembly๋ CPU๊ฐ ํ ์ ์๋ ๊ฒ๊ณผ ํ ์ ์๋ ๊ฒ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ด ๊ฒฌํด๋ WebAssembly๊ฐ ์ง์ ํ ์์ ์๊ฐ ์ฝ๋๋ฅผ ํํํ๊ธฐ์๋ ๋๋ฌด ๋์ ์ถ์ํ ์์ค์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฟจ, ์ค๋ช ๊ฐ์ฌํฉ๋๋ค. ์น ํ๋ซํผ API๋ฅผ ํนํ ํ๋ฆฌ๋ฏธํฐ๋ธ, ์ด๋ฐ ์ข ๋ฅ์ ๋ฌผ๊ฑด์์ํ ์ต์ ์ ์ฅ์์์ ํฉ์ ( WebCrypto์ด ์๋ค /๋ฅผ ํตํด ์๋ก์ด ํ์ ๊ณก์ ๊ณผ ๊ฐ์ ํฅํ ์ถ๊ฐ๋ฅผ์ํ ๊ณต๊ฐ, ํ์ ์ง์๋ฉ๋๋ค ๋ ธํธ ). ๋ณด์์ ๋ํ ์ถ๊ฐ ์ธ์ด๋ฅผ ๊ธฐ๋ํ๋ฉด WebAssembly์ ์๋ฏธ๋ฅผ ์๋ชป ํด์ํ ์ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ๊ฒ์ ๋๋ค. :+1:
@jfbastien , wasm ํ์ด๋ฐ ๋ณด์ฅ์ ๋ํด ๋งํ ๋ชจ๋ ๊ฒ์ด ์ค๋๋ ์๋ ์ฌ์ ํ ์ ์ฉ๋ฉ๋๊น?
ํ์ฌ ๋ฌธ์์์ ๋ฌธ์ํ๋ ์์ง ์ผ์ด์ค์ ์์ ๋ชฉ๋ก์ ์ ์ธํ๊ณ ๊ฒฐ์ ๋ก ์ ์คํ์ด ๋ชฉํ์์ ์ ์ ์์ต๋๋ค. ์ด๋ ์์ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ ์ฌ์ ์ผ๋ก ๊ธ์ ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ webassembly.org/docs/security ๋ ํ์ด๋ฐ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ธ์ ํ๊ณ ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ๋ฏธ๋ ์ํ๋ฅผ ๋์ดํ์ง๋ง ์๋ฏธ๊ฐ "๋ฒ๊ทธ๊ฐ ์๋ C ์ฝ๋๊ฐ ๋ง๋ฒ์ฒ๋ผ ์์ ๋์ง ์์ ๊ฒ์ ๋๋ค... ์์ง" ๋๋ "์ผ๋ฐ์ ์ธ C ์ปดํ์ผ๋ฌ์์๋ ๋ฐ์ํ์ง ์๋ ์ฌ์ด๋ ์ฑ๋ ์ทจ์ฝ์ ์ด ๋์ ๋ ์ ์์ต๋๋ค."
ํ์คํ ๋ณด์ฅ์ ์ ์ณ๋๊ณ , "์ผ์ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํ์คํ 100% ์๋ง์ด ๋ ๊ฒ"๊ณผ "ํญ์ clang์ ๊ธฐ๋ณธ ๋ฐ์ด๋๋ฆฌ ์ถ๋ ฅ์ ํ์ ํ๋ ํ์ด๋ฐ ํน์ฑ์ ๊ธฐ๋ํ์ง ์์ ๋ถ๋ช
ํ ์ด์ ๊ฐ ์์ต๋๋ค" ์ฌ์ด์ ์ฐ๋ฆฌ๊ฐ ์ ์๋ ์์น๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. @dconnolly ์ ์์ ์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ asm.js์ ๊ตฌ์ฒด์ ์ผ๋ก ๋น๊ตํ๋ ์ผ๋ถ ์ธ์ด๋ ์ ๋ง ์ ์ฉํ ๊ฒ์
๋๋ค. ํนํ 'use asm'
๋ฌธ์ ์์ ํ ์กด์คํ๋ Firefox์ ๊ฐ์ ๊ตฌํ๊ณผ ์ข ๋ ๋์จํ๊ฒ ์ฌ์ํ๋ Chrome๊ณผ ๊ฐ์ ๊ตฌํ์ ๋ชจ๋ ๊ณ ๋ คํ๋ฉด .
@buu700 ๋ชจ๋ opcode์ ๋ํ ๊ฒฐ์ ์ ๊ฒฐ๊ณผ๋ ๋ชจ๋ opcode์ ๋ํด ํ์ด๋ฐ์ด ๋ณด์ฅ๋๋ค๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค. Clang์ ์ผ์ ์๊ฐ ์คํ์ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ ์ ๋ณด ๋์ถ์ ๋ฏผ๊ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ์ผ์ ์๊ฐ๋ง ํ์ํ ๊ฒ์ ์๋๋๋ค.
ํ์ฌ WebAssembly๋ ์ ๋ณด ๋์ถ๊ณผ ๊ด๋ จํ์ฌ ์ด๋ค ๊ฒ๋ ๋ณด์ฅํ์ง ์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. @jfbastien์ ๊ฒฐ์ ๋ก ์ ๋ํ ์น์ ์ ๋ช ํํ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
ํ์ด๋ฐ/์ฌ์ด๋ ์ฑ๋(๋ฐ ๋ณด์ฅ ๋๋ ๋ถ์กฑ ๋ฌด์)์ ๊ดํด์๋ ํ์ฌ ์ฌ์์ ๊ด๋ จ์ฑ์ด ์๊ณ ์ค์ ๊ตฌํ์ด clang๊ณผ ์ด๋ป๊ฒ ๋น๊ต๋๋์ง์ ๋ํ ์ ์ฉํ ๋ฐ์ดํฐ๊ฐ ์์ง ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด์ ์๊ฒฌ์ ์ฝ์ ํ ๋ด๊ฐ ์ค์ ๋ก ํ์ ํ ๊ฒ์ wasm ๊ตฌํ์ด ์ด ์์ญ์์ ๋ฐ๋์ gcc/clang๋ณด๋ค _๋์_ ๊ณ ์ ํ ์ด์ ๊ฐ ์๋์ง ์ฌ๋ถ์ ๋๋ค. ์ถ์ํ ์์ค์ ์ฐ๋ ค ์ฌํญ์ผ๋ก ์ธ๊ธํ์ง๋ง "์ถฉ๋ถํ ์ข์"์ผ์ ํ ํ์ด๋ฐ(๋ค์ดํฐ๋ธ C, ์ด์ ๋ธ๋ฆฌ, ํ๋์จ์ด ๋ฑ)์ ๋ํ ๊ธฐ์ค ๋น๊ต๋ก ๋ฌด์์ ์ฌ์ฉํ๊ณ ์๋์ง ๋ช ํํ์ง ์์์ต๋๋ค.
๋ค์ ๋งํด, clang์์ ์ ๋ณด ๋์ถ์ ๋ฏผ๊ฐํ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ์ค๋๋ WebAssembly ์ฌ์์ ๋ํ ๊ฐ์์ ์ต๊ณ /๊ฐ์ฅ ์ฑ์ํ/๊ฐ์ฅ ์ ๋ณด ๋์ถ ๊ฐํ ๊ตฌํ ์ค์์ ์ ํํ๋ ๊ฒ์ด ์ฃผ์ด์ง๋ค๋ฉด ์ ์๊ฐ ์ฌ์ ํ ๋ถ๋ช ํ ์ ํธ๋ฉ๋๊น?
์ด ์์ ์์ ๋๋ ์ ๋ณด ์ ์ถ์ ๋ฏผ๊ฐํ ์ฝ๋์ ๋ํด clang์ด๋ WebAssembly์ ์์กดํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ํ๋ ๋ณด์ฅ์ ์ค์ ๋ก ์ป์ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ด๊ฐ ๋์์ผ๋ก ํ๋ ํน์ CPU์ ๋ํ ์ค๋ช ์๋ฅผ ์ฝ๊ณ ์ปค๋๊ณผ ๊ธด๋ฐํ ํ๋ ฅ์ ํตํด ์ด์ ๋ธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. "x86" ๋๋ "ARM 64"๋ฅผ ์๋ ๊ฒ๋ง์ผ๋ก๋ ํ์ด๋ฐ์ ๋ ๋ฆฝ์ ์ด๊ณ ์ถ๋ค๋ฉด ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์ผ๋ถ ์ปดํ์ผ๋ฌ/์ธ์ด๋ก ์ผ๋ถ ๋ณด์ฅ์ ๋ฐ์ ์ ์์ง๋ง ํ๋์ ์ ๋ณด ๋์ถ์ด ์ฝ๋๋ฅผ ๋ฌด๋ ฅํํ๋ ๋ฐ ํ์ํ ์ ๋ถ์ธ ๊ฒฝ์ฐ "์ผ๋ถ"๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์๋ฒฝํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ ๋ณด ์ ์ถ ์ํ ๋ชจ๋ธ๋ง์ ๋ํ ๋ชจ๋ ์ฌํญ์ ๋์ํฉ๋๋ค. ๋๋ ๊ทธ๋ฅ wasm์ด ๋ค๋ฅธ ์ด๋ค (asm-free) C ์ปดํ์ผ ํ๊ฒ๋ณด๋ค ๋ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํ๋์ง์ ๋ํ ์์ด๋์ด๋ฅผ ์ป๊ณ ์ถ์์ต๋๋ค.
๋๋ "๋ ๋ง์ ๋์ถ"์ด ์ ์ฉํ ์ธก์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ "์ ํ ์๋๊ฐ?"์ ๋๋ค. WebAssembly, clang, C++ ๋ฐ C์ ๋ํ ๋๋ต์ "์"์ ๋๋ค.
์, ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด @dconnolly๋ก ์ฐ๊ฒฐ๋ libsodium/NaCl์ ์์ ๊ฐ์ด ์์ํ C ๊ตฌํ์ผ๋ก ํน์ ๋ถ์ฑ๋ ์ ํญ ์์ฑ์ ๋ฌ์ฑํ๋๋ก ์ค๊ณ๋ ์๊ณ ๋ฆฌ์ฆ์ด์์ต๋๋ค. ์ด๋ค ๊ฒ์ด ๊ฐ๋ฅํ ๋ชจ๋ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค์์ ์ด์๋จ๋๋ค๋ฉด ํ์คํ ์ด์์ ์ด์ง๋ง ๋ ๊ฐ์ง ์ฌ์ด์ ๋ธํ๋ฅผ ์๋ ๊ฒ๋ ์ ์ฉํฉ๋๋ค. ํ์ ์ libsodium์ ์๋๋ ์ํ ๋ชจ๋ธ์ ๊นจ๋จ๋ฆด ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
libsodium ๋ฌธ์ ์ค๋ ๋์ ๋ํ ๋งํฌ๋ ์ฃผ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ asm.js์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋ํด ๋งค์ฐ ์ ์ตํ์ง๋ง ๋น์ ๋ฌธ๊ฐ๋ก์ ํด๋น ํน์ ๋ถ์์ด WebAssembly์ ๋ํด ๋ค์ ์์ฑ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆด์ง ๋ถ๋ช ํ์ง ์์ต๋๋ค(i64 ์ง์ ๋ฐ ๋ธ๋ผ์ฐ์ ์ ์ธ asm.js๋ณด๋ค wasm์ ๋ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํจ).
ํ์ง๋ง ์ด์จ๋ , ๋๋ 1๋ ์ ๋น์ ์ ์๋ ์์ ์ด ๋ฌด์์ธ์ง ์ดํดํ๊ณ , ๋ด๊ฐ ์ ๋ง๋ก ๊ฑฑ์ ํ ๊ฒ์ ๋น์ ์ด ์ค์ ๋ณด๋ค ๋ ๊ฐ๋ ฅํ ์ง์ ์ ํ๊ณ ์๋์ง ์ฌ๋ถ์์ต๋๋ค. ํ์ค C/clang์๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํด๋น ๋ชฉ์ ์ ์ ํฉํ์ง ์์), ๋ช ํํ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
>
๋๋ "๋ ๋ง์ ๋์ถ"์ด ์ ์ฉํ ์ธก์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@jfbastien , ์์ ๋ณด์์
์ ๊ฒ. ์ผ๋ฐ์ ์ธ ๋ฉํธ๋ฆญ์ ์ ๋ณด์ ๋นํธ ์์ ๋๋ค.
์ฑ๊ณต์ ์ธ ๊ณต๊ฒฉ -- ์๋ฅผ ๋ค์ด 1๋นํธ์ 32๋นํธ๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค.
์ฐ์ต ๊ฑฐ์ ๋ชจ๋ ์์คํ ์ ์ธก๋ฉด์ ํตํด ์ ์ฌ์ ์ธ ๋์ถ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
์ฑ๋). ๊ทธ๋ฌ๋ ์ข ์ข ๊ทธ๋ฌํ ์ ๋ํ๋ ๋ค์ ์ด๋ ต์ต๋๋ค.
>
๋๋ "๋ ๋ง์ ๋์ถ"์ด ์ ์ฉํ ์ธก์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@jfbastien , ์์ ๋ณด์์
์ ๊ฒ. ์ผ๋ฐ์ ์ธ ๋ฉํธ๋ฆญ์ ์ ๋ณด์ ๋นํธ ์์ ๋๋ค.
์ฑ๊ณต์ ์ธ ๊ณต๊ฒฉ -- ์๋ฅผ ๋ค์ด 1๋นํธ์ 32๋นํธ๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค.
์ฐ์ต ๊ฑฐ์ ๋ชจ๋ ์์คํ ์ ์ธก๋ฉด์ ํตํด ์ ์ฌ์ ์ธ ๋์ถ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
์ฑ๋). ๊ทธ๋ฌ๋ ์ข ์ข ๊ทธ๋ฌํ ์ ๋ํ๋ ๋ค์ ์ด๋ ต์ต๋๋ค.
๋๋ ์ด๊ฒ์ ์๊ณ ์๊ณ , ๋์ถ์ ๋์ถ์ด๊ธฐ ๋๋ฌธ์ ์ฒ ์ ํ ๋ฌด๊ด์ฌํฉ๋๋ค. ๊ฐ๋ฐ์์๊ฒ ์ค์ํ๋ค๋ฉด ๊ฒฐ๊ตญ ์ฐ๋ฆฌ(WebAssembly ๊ตฌํ์)๋ฅผ ๋ฌผ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋๋ WebAssembly๊ฐ ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ฐ์ ์์๋ฅผ ๊ฐ์ํ ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ณง ํด๊ฒฐํ๋ ค๊ณ ํด์๋ ์ ๋๋ค๊ณ ์๊ฐํ๊ณ WebCrypto๊ฐ ์ด๋ฏธ ๋ ธ๋ ฅ์ผ๋ก ์กด์ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ). ๋ฌผ๋ก ์ฌ๊ฐ ์๊ฐ์ ์ด๊ฒ์ ํ์ํ ์ ์์ต๋๋ค.
@jfbastien , ์ด ์ฃผ์ ๊ฐ ํ์ฌ ์ฐ์ ์์๊ฐ ์๋ค๋ ๋ฐ ๋์ํ์ต๋๋ค.
Wasm์ C๋ณด๋ค ๋ ์์ง ์์ผ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ๋์ฒํ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ
๋๋ค.
๊ทธ๊ฒ. ๊ทธ๋ฌ๋ "๋์ถ์ ๋์ถ์ด๋ค"์ ๊ฐ์ ์ง๋์น๊ฒ ๋จ์ํํ๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค.
๋ฌธ์ -- ๋ชจ๋ ์์คํ
์ด ์ด๋ ์ ๋ ๋์ถ๋๋ฏ๋ก ์๋์ ์ฌ์ค ์ ๋ถ์
๋๋ค.
์ค์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ "๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๋ฅผ ๋ฌผ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์" ์ ๋ต์ด ์๋๋๋ค.
์ค์ ์ ์ฌ์ ํฌ์์๋ค ์ฌ์ด์ ๋ง์ ์ ๋ขฐ๋ฅผ ๋ถ๋ฌ์ผ์ผํค๋ ๊ฒ, ์ฆ
๋ธ๋ผ์ฐ์ ์ฌ์ฉ์.
๋์ํ์ต๋๋ค ... Wasm์ C๋ณด๋ค ๋ ์์ง ์์ต๋๋ค
์ข์ต๋๋ค. ๋ช ์์ ์ผ๋ก ํ์ธํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๊ทธ๊ฒ์ด ๋ด๊ฐ ์ฌ๊ธฐ์ ์จ ์ ๋ถ์ ๋๋ค. ๋ด๊ฐ ๊ทธ๊ฒ์ ๋น๊ตํด์ผ ํ๋ ์ผ๋ฐ์ ์ธ ์๋ฏธ๊ฐ ์๋๋ผ "๋์๋์ง ์์ ๊ฒ"์ด๋ผ๋ ๋ณด์ฅ์ด ์๋๋๋ค.
@rossberg-chromium ๋๋ wasm์ด C๋ณด๋ค ๋ ์์ง ์๋๋ค๋ ์๊ฐ์ ๋์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฐ๊ตญ ๊ฐ ์์ง์ด ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฌ๋ ค ์์ต๋๋ค. ์๋ฅผ ๋ค์ด JavaScriptCore๋ ์ฝ๋๋ฅผ ๊ณ์ธตํํ๊ณ ์คํ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ ์ฝ๋ ๊ณ์ธตํ๋ฅผ ์ค์งํฉ๋๋ค. ์ด๊ฒ์ C ์ฝ๋์๋ ์กด์ฌํ์ง ์๋ ๋์์ ๋๋ค. wasm ์์ง์ด ๋ ๋ฐ์ ํจ์ ๋ฐ๋ผ wasm์ด JVM๊ณผ ๊ฐ์ ๋์๊ฐ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๊ถ๊ทน์ ์ผ๋ก, ๋๋ ์ฌ์์ด๋ ๊ตฌํ์๊ฐ ํนํ ์ฑ๋ฅ์ ํฌ์ํ์ง ์๊ณ ์ ๋ณด ๋์ถ ๋ฐฉ์ง๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.