์ด๋ฒ ์ฃผ์๋ OCaml ์ปดํ์ผ๋ฌ์ ๊ทธ ์ปดํ์ผ๋ฌ์ ์์ญ์ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. OCaml์ ํญ์ ๋ฐฑ์๋ ์ธ์ด์์ง๋ง, ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๊น์ง ๋ชฉํ๋ก ์ผ๊ณ ์์ต๋๋ค. ์ค๋ ์ ์ ํจ๊ป OCaml์ด JavaScript ์ธ๊ณ๋ก ์ง์ถํ๋๋ก ๋๋ ํฅ๋ฏธ๋กญ๊ณ ์ ๊ตํ ์ปดํ์ผ๋ฌ ์์ ์ ๋ง์ด ํด์จ Antonio Monteiro๊ฐ ํจ๊ปํฉ๋๋ค. ๋ํ ๊ธฐ์กด JavaScript ๊ฐ๋ฐ์๋ค์ด OCaml์ ํจ์ํ ์ธ๊ณ๋ก ๋์ด์ฌ ์ ์๋๋ก ๋๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ OCaml ์ปดํ์ผ๋ฌ๋ฅผ ๋ ๊ฐ์ง ์ธก๋ฉด์์ ํ์ฅํ์ฌ ์ด๋ฅผ ์ํํ๊ณ ์์ต๋๋ค. ์ฒซ์งธ, OCaml์ ์์ฑํ๊ณ JavaScript๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ Melange์ ์ ์์์ ๋๋ค. ๋์งธ, JavaScript์ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ณด์ด์ง๋ง ํ์ ์์ ๋ฐฑ์๋ ๋ค์ดํฐ๋ธ OCaml์ ์์ฑํ๋ ReasonML์ ์ฃผ์ ๊ธฐ์ฌ์์ ๋๋ค. ๋ฌผ๋ก ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์ "์?"์ ๋๋ค. ์ ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์ดํ ๊น์? OCaml์ด ๋ธ๋ผ์ฐ์ ์ ๋ฃ์ ๋งํผ ํ๋ฅญํ ์ ์ ๋ฌด์์ผ๊น์? ๊ทธ๋ฆฌ๊ณ Antonio๋ OCaml์ ์ด๋ค ์ ์ด ๊ทธ๋ ๊ฒ ํ๋ฅญํ๋ค๊ณ ์๊ฐํ ๊น์? ์ด ๋ชจ๋ ์์ ์ ํ๋ ๊ทธ์ ๊ฐ์ธ์ ์ธ ์ด์ ๋ ๋ฌด์์ผ๊น์? ํ์ง๋ง ํจ์ฌ ๋ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์ "์ด๋ป๊ฒ?"์ ๋๋ค. ๋ ๊ฐ์ง ๋ค๋ฅธ ์ธ์ด ์ฌ์ด์์ ์ด๋ป๊ฒ ์ปดํ์ผํ๊ณ ํธ๋์คํ์ผํ ๊น์? ๋ฌผ๋ก ํ ์ธ์ด์ for ๋ฃจํ ๊ตฌ๋ฌธ์ ํ์ฑํ๊ณ ๋ค๋ฅธ for ๋ฃจํ ๊ตฌ๋ฌธ์ ์์ฑํ๋ ๊ฒ์ ์ฌ์ํ ์ผ์ด์ง๋ง, ๋์์ฑ ๋ชจ๋ธ์ด ๋ค๋ฅด๊ฑฐ๋ OCaml์ ์ผ๊ธ ๋ชจ๋ ์์คํ ์ JavaScript ์ธ๊ณ๋ก ์ด์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฃผ์ ์ฐจ์ด์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น์? ์ด๋ฌํ ์ง๋ฌธ์ ๋ตํ๋ ค๋ฉด ์ ๋ฌธ๊ฐ์ ๋จธ๋ฆฌ๋ฅผ ์ข ๋น๋ ค์ผ ํฉ๋๋ค. ์ ๋ ์ฌ๋ฌ๋ถ์ ํธ์คํธ Chris Jenkins์ด๊ณ , ์ด๊ฒ์ Developer Voices์ด๋ฉฐ, ์ค๋์ ๋ชฉ์๋ฆฌ๋ Antonio Monteiro์ ๋๋ค!
Chris Jenkins: ์ค๋ ์ ์ ํจ๊ปํด ์ฃผ์ Antonio Monteiro์ ๋๋ค. Antonio, ์๋ ํ์ธ์?
Antonio Monteiro: ์๋ ํ์ธ์. ์ ์ง๋ด๊ณ ์์ต๋๋ค.
Chris Jenkins: ์ ๋ ์์ฃผ ๊ฐ์ง ์๋, ์ฌ์ค ํ ๋ฒ๋ ๊ฐ๋ณธ ์ ์ด ์๋ ์ธ์์ผ๋ก ์ ๋ฅผ ์๋ดํด ์ฃผ์๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก OCaml์ ๋๋ค. ์ ๋ง ๊ธฐ๋๋ฉ๋๋ค. OCaml ํ๋ก์ ํธ ๋ชฉ๋ก์ ์ญ ์ดํด๋ด์ผ ํ ๊ฒ ๊ฐ์ง๋ง, OCaml์ ํน ๋น ์ ธ ์๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋์ฃ ?
Antonio Monteiro: ๊ทธ๋ ์ต๋๋ค. ์ฒ์์๋ ์ฒ์ฒํ ์์ํ์ง๋ง, ๊ทธ ํ์๋ ์ ๋ง ๋น ๋ฅด๊ฒ ๋ฐ๋ผ์ก์์ฃ .
Chris Jenkins: ์ด๋ป๊ฒ ์์ํ๊ฒ ๋์๋์? OCaml์ ๋๋ฆฌ๊ฒ ๋ ๊ณ๊ธฐ๋ ๋ฌด์์ด์๋์?
Antonio Monteiro: ๋ํ์์ OCaml์ ์ฒ์ ์ ํ์ต๋๋ค. ์๋ง 13~15๋ ์ ์ฏค์ด์์ ๊ฒ๋๋ค. OCaml ์์ ์ด ์์๋๋ฐ, ๊ทธ๋๊น์ง ๋ฐฐ์ ๋ ์ธ์ด์๋ ๋งค์ฐ ๋ฌ๋์ต๋๋ค. ํฅ๋ฏธ๋ก์ ์ง๋ง, ๊ทธ ๋น์์๋ ์์ ํ๋ก์ ํธ๋ง ํ๊ณ ์ ์ณ๋์์ต๋๋ค. ์ค์ ์ธ๊ณ์์ ๊ทธ ๊ฐ์น๋ฅผ ์ ์ ์์๊ฑฐ๋ ์. ๊ทธ๋ฌ๋ค๊ฐ 2016๋ ์ Hacker News์์ ReasonML์ ๋ณด๊ณ ๋ค์ ์ดํด๋ณด๊ฒ ๋์์ต๋๋ค. Jordan Walke๊ฐ Facebook์์ ๋ฐํํ ReasonML ํ๋ก์ ํธ๋ฅผ ๋ณด์๋๋ฐ, ๊ทธ ์ด๋ฆ์ด ์ต์ํ์ต๋๋ค. "OCaml์ด๋ผ๋ ๋ง์ ๋ค์ด๋ณธ ์ ์ด ์๋๋ฐ, ์ ์๋ก์ด ๋ชจ์ต์ ํ๊ณ ์๋ ๊ฑฐ์ง? ์ ํ์ํ ๊น? ์ด๊ฑธ๋ก ๋ฌด์์ ํ ์ ์์๊น?"๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ๊ทธ๋์ ํ๋ฒ ์ํํด ๋ณด๊ธฐ๋ก ํ๊ณ , ์์งํ ๋งํด์ ์ค์น๋ถํฐ ์์ฝ์์คํ , ๋น๋ ๋๊ตฌ๊น์ง ๋ชจ๋ ๊ฒ์ด ์ ๋ง ํ๋ค์์ต๋๋ค. ๊ทธ ๋น์์๋ ์์ํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ค์ ์ต๋๋ค. ์๋ง๋ ๊ทธ๋์ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๊ณ์ ์ฌ์ฉํด ๋ณด๋ฉด์ ์ธ์ด ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์์ํ๊ณ , Discord์ Slack ์ปค๋ฎค๋ํฐ์ ๊ฐ์ ํด์ ๋์์ ๋ฐ์์ต๋๋ค. ์ค์น ๋ฐฉ๋ฒ, ๋๊ตฌ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์๋ํด ๋ณด์๊ณ ๊ฒฐ๊ตญ์๋ ์ดํดํ๊ฒ ๋์์ต๋๋ค. ์ค๋๋ ์ ๊ฐ OCaml์ ๊ณ์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ธ์ฒด ๊ณตํ์ ์ธ ํ์ ์์คํ , Hindley-Milner ๊ธฐ๋ฐ์ ํ๋ฅญํ ํ์ ์ถ๋ก , ๊ด๋ฒ์ํ ์ปค๋ฎค๋ํฐ, ํ๋ฅญํ ๋ชจ๋ ์์คํ ๋๋ฌธ์ ๋๋ค. OCaml์์ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋๋ผ๋, ํ์ ๊ณผ ๋์์ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ์ํ๊ณ , ์ ์ํ ํ์ ์์ ํ๋ก๊ทธ๋จ์ ํ์์ํฌ ์ ์๋ค๋ ์ ์ด ์ ๋ง ๋งค๋ ฅ์ ์ ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ปดํ์ผ๋๊ณ ์๋ํ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๊ฒ ๋๋ ๊ฒ์ ๋ง๋ฒ ๊ฐ์ ๋๋, ์ข์ ๋ํ๋ฏผ ๋ถ๋น์ ๊ฐ์ต๋๋ค. ๊ณ์ํด์ ๋ ๋ง์ ๊ฒ์ ์ฐ๊ณ ์ธ์ด๋ก ๋ ๋ง์ ๊ฒ์ ์๋ํ๊ฒ ๋ง๋ญ๋๋ค. OCaml์ C, C++, ์ฌ์ง์ด Rust์์ ํ๋ฅญํ FFI(์ธ๋ถ ํจ์ ์ธํฐํ์ด์ค)๋ฅผ ๊ฐ์ง๊ณ ์์ด์ ํ๋ก๊ทธ๋จ์ ๋ง์น C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌ๋ ๊ฒ์ฒ๋ผ ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์๋ก ํธ์ถํ ์ ์์ต๋๋ค.
Chris Jenkins: Haskell๊ณผ ๋ง์ ๋ถ๋ถ์ด ๊ฒน์น๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ๋ํ์์ ์ด๋ค ์ด์ํ ํจ์ํ ์ธ์ด๋ฅผ ๊ฐ๋ฅด์น๋๋์ ๋ฌ๋ ค ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค.
Chris Jenkins: OCaml์ ์ดํดํ๊ฒ ๋ ํน๋ณํ ์๊ฐ์ด ์์๋์? ์๋๋ฉด ์ ์ฐจ ์ดํดํ๊ฒ ๋์๋์?
Antonio Monteiro: Bloomberg์์ ์์๋ BuckleScript ํ๋ก์ ํธ๊ฐ ์๊ฐ๋ฉ๋๋ค. ์ด ํ๋ก์ ํธ์ ๋ชฉํ๋ OCaml๊ณผ ReasonML์ JavaScript๋ก ์ปดํ์ผํ๋ ๊ฒ์ด์์ต๋๋ค. ์ ๊ฐ OCaml์ ์์ํ์ ๋๋ ์๋ง๋ OCaml์ ์ฒ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ ๊ฐ์ฅ ์ ๋ค๋ฌ์ด์ง ์ํฌํ๋ก์ฐ์์ ๊ฒ๋๋ค. ์ฐธ๊ณ ๋ก ์ ๋ JavaScript์ JVM ํ๋ก๊ทธ๋๋จธ์์ต๋๋ค. Closure๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ , ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ๋ํ ๊ฒฝํ๋ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ์์ C++๋ฅผ ์กฐ๊ธ ํด๋ณด์์ง๋ง, makefile์ ์ฌ์ฉํ์ ๊ฒ๋๋ค. ๊ทธ๋์ ์ปดํ์ผ ์ธ์ด์ ์ํฌํ๋ก์ฐ๋ ์กฐ๊ธ ๋ฌ๋์ต๋๋ค. ์ด์ ์ Go๋ฅผ ์ฌ์ฉํด ๋ณด์์ง๋ง, Go๋ ๋ชจ๋ ๊ฒ์ด ํ๋์ ๋ช ๋ น์ด๋ก ์ ํตํฉ๋์ด ์์ต๋๋ค. ๋ฐ๋ฉด OCaml์ ๋ชจ๋ ๊ฒ์ด ์กฐ๊ธ ๋ถ์ฐ๋์ด ์๊ณ , ์ด๋ค ๋ฉด์์๋ ์กฐ๊ฐ๋ ๋๋์ด์์ต๋๋ค. BuckleScript๋ ์ด๋ฌํ ๊ฒฝํ์ ํตํฉํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. Facebook ๋ด๋ถ์์๋ ์ด์ฌํ ์์ ํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ํ๋ messenger.com์ 50%๊ฐ ReasonML๋ก ์์ฑ๋๊ณ BuckleScript๋ก ์ปดํ์ผ๋์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์ ์๊ฒ๋ BuckleScript๊ฐ ๋ฑ ๋ง์์ต๋๋ค. npm ์ค์น๋ก OCaml ๋ชจ๋์ ๋ณผ ์ ์์์ต๋๋ค. ์ค๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๊ตฌ๋ก๋ ์ ๋ง ์ฌ์ํ ์ผ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง, ๋น์์๋ ๊ผญ ๊ทธ๋ ์ง ์์์ต๋๋ค. ์ ์ด๋ ์ ์๊ฒ๋ ๊ทธ๋ฌ์ฃ . ํ์ง๋ง ๋ช ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋์ ์กฐํฉํด์ ์๋ํ๋ JavaScript ํ๋ก๊ทธ๋จ์ ์ป์ ์ ์๋ค๋ ์ ์ด ์ ๋ง ๋งค๋ ฅ์ ์ด์์ต๋๋ค. ๊ทธ ์ดํ๋ก ์ ์ ๋ชฉํ๋ ๋ค์ดํฐ๋ธ ํ๋ก๊ทธ๋จ์์๋ ๋์ผํ ๊ฒฝํ์ ํ๋ ๊ฒ์ด์์ต๋๋ค.
Chris Jenkins: ์ธ์ด์ ๋ํด ๋งํ์๋ฉด, ์ปดํ์ผํ ์๋ง ์๋ค๋ฉด ํด์ฒด์ธ๋ง ์ ๋๋ก ๊ฐ์ถ๋ฉด ์๋ํฉ๋๋ค. ๋๊ฐ์ ๊ฒฝํ์ด์ฃ . BuckleScript๋ฅผ ์ธ๊ธํ์ จ๋๋ฐ, ์ ๋ OCaml ์์ฝ์์คํ ์ ์ ๋ชจ๋ฆ ๋๋ค. ๊ตฌ๋ฌธ ํ๋ฐํธ์๋์ธ ReasonML๊ณผ ์ปดํ์ผ ๋ฐฑ์๋์ธ BuckleScript๊ฐ ์๋๋ฐ, BuckleScript๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ด๋ฆ์ด ๋ฐ๋ ํ๋ก์ ํธ์ธ๊ฐ์?
Antonio Monteiro: ์์ธํ ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ ๊ฐ ์ฒ์ ์์ํ ๊ฒ์ Hacker News์์ ReasonML์ ๋ณด๊ณ ์ธ์ด๋ฅผ ์ํํด ๋ณด๊ธฐ๋ก ํ ๊ฒ์ด์์ต๋๋ค. ๋จผ์ OCaml์ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์๋ฏธํ๋ ํฌ๊ด์ ์ธ ๋จ์ด์ ๋๋ค. OCaml ์ปดํ์ผ๋ฌ๋ OCaml ๊ตฌ๋ฌธ์ ๊ฐ์ ธ์์ ๋ค์ดํฐ๋ธ ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํธ์ฝ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ปดํ์ผํ์ฌ ์คํํ ์ ์๋ ํด์ฒด์ธ์ ๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ค์ ๋ก ๋ฐ์ดํธ์ฝ๋ ๊ฐ์ ๋จธ์ ๊ณผ ๋ค์ดํฐ๋ธ ์ด์ ๋ธ๋ฆฌ๋ก ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๋ ์ปดํ์ผ๋ฌ๋ผ๋ ๋ ๊ฐ์ง ๋ฐฑ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. OCaml์ ํน์ง์ ํนํ ์ปดํ์ผ๋ฌ ํ๋ฐํธ์๋์์ ๋งค์ฐ ํ๋ฌ๊ทธํ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ปดํ์ผ๋ฌ ํ๋ฐํธ์๋๋ ๊ตฌ๋ฌธ, ์ ์ฒ๋ฆฌ๊ธฐ ํ์ฅ์ ์๋ฏธํฉ๋๋ค. ReasonML์ ์ง๊ธ๋ ๊ทธ๋ ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ OCaml ์ธ์ด๋ฅผ ์ฐ๋ ๋์ Alol ๊ตฌ๋ฌธ์ ์ฌ์ฉํด ๋ณธ ์ฌ๋๋ค์๊ฒ ์ต์ํ ReasonML์ ์ฐ๋ ๊ฒ์ ๋๋ค. JavaScript, C, OCaml, Rust, Go์ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ณด์ ๋๋ค.
Chris Jenkins: ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ต์ํ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ, ์์ฆ ๋ชจ๋๊ฐ ๋ฐฐ์ฐ๊ฑฐ๋ ์ ์ด๋ ์ด๋ ์์ ์๋ ์ต์ํด์ง๋ ๊ตฌ๋ฌธ์ด์ฃ . ์ด๊ฒ์ด ๋ฐ๋ก ReasonML์ ๋๋ค. OCaml์ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ผ ๋ฟ์ ๋๋ค.
Antonio Monteiro: BuckleScript ๋๋ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์ ๋ํด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. OCaml ์ปดํ์ผ๋ฌ์๋ ๋ฐ์ดํธ์ฝ๋ ๊ฐ์ ๋จธ์ ๊ณผ ๋ค์ดํฐ๋ธ ์ด์ ๋ธ๋ฆฌ๋ก ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๋ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ๋ ์ผ์ข ์ ์ค๊ฐ ํํ์ ๊ฐ์ ธ์์ JavaScript๋ก ์ปดํ์ผํ๋ ๋๊ตฌ๋ ์์ต๋๋ค. ์ ๊ฐ ์๋ ํ ๊ฐ์ฅ ๋จผ์ ์กด์ฌํ๋ ๋๊ตฌ๋ js_of_ocaml์ ๋๋ค. js_of_ocaml์ ๋ฐ์ดํธ์ฝ๋ ๊ฐ์ ๋จธ์ ์ด ํด์ํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐ์ดํธ์ฝ๋, ์ฆ OCaml ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ปดํ์ผ ํ์์ ํด์ํ์ฌ ์น์ด๋ JavaScript๊ฐ ์คํ๋๋ ๋ชจ๋ ๊ณณ์์ ์คํํ ์ ์๋ JavaScript๋ฅผ ์์ฑํฉ๋๋ค.
Chris Jenkins: ๊ทธ ๋ถ๋ถ์ ์ดํด๊ฐ ๋ฉ๋๋ค. ๋์ค์ ์ฅ๋จ์ ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ง๋ง, BuckleScript๊ฐ ํ ์ผ์ ๋๋ค ๋ฏธ์ ๋ถํ๊ณผ ํจ์ฌ ๋ ์ ์ฌํ๊ฒ ๋ณด์ด๋ ์ด๊ธฐ ์ปดํ์ผ๋ฌ ์ค๊ฐ ํํ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ช ๋จ๊ณ ์๋์ ์๊ฒ ์ฃ ?
Antonio Monteiro: ์ ํํ ๊ทธ๋ ์ต๋๋ค. ์์๋ ๊ตฌ๋ฌธ(OCaml ๋๋ Reason), ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ, ํ์ ์ถ๋ก , ํ์ ๊ฒ์ฌ ์๊ณ ๋ฆฌ์ฆ ์คํ, ํ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ก ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ณด๊ฐํ๋ ์์์ ๋๋ค. ์ด ์์ ์์ ํ๋ก๊ทธ๋จ์ ๋ํ ๋ชจ๋ ์ ์ ์ ๋ณด๋ฅผ ์ป๊ฒ ๋๋ฏ๋ก ๋๋ค ์ค๊ฐ ํํ์ ์์ฑํ ๋ ๋ชจ๋ ํ์ ์ ๋ฒ๋ฆฝ๋๋ค.
Chris Jenkins: OCaml์ ๋๋ค ๋ถ๋ถ์๋ ํ์ ์ด ์์ต๋๋ค. ํ์ ๊ฒ์ฌ์ ๋๋ค ์์ฑ ์ฌ์ด์ ๋ฒ๋ ค์ง๋๋ค. ํ์ง๋ง ๋ฐ์ดํธ์ฝ๋ ์ค๊ฐ ํํ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ BuckleScript๋ ๋ฐ์ดํธ์ฝ๋๋ณด๋ค ๋๋ค๋ผ๋ ์ด๊ธฐ ์ค๊ฐ ํํ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์ ํํ์ต๋๋ค.
Antonio Monteiro: BuckleScript๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ํ๋ก์ ํธ์ธ ์ด์ ์ ๋ํ ๋ค๋ฅธ ์ง๋ฌธ์ ๋ตํ์๋ฉด, 2020๋ ๊ฒฝ์ ๋ง์ผํ ์ ์ํด ์ฃผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ์์ต๋๋ค. BuckleScript ๊ฐ๋ฐ์๋ค์ ํ๋ก์ ํธ๋ฅผ OCaml์์ ๋ฒ์ด๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ธ๊ฐ๊ณ ์ถ์ดํ์ต๋๋ค. ๊ทธ๋์ BuckleScript๋ ๋ค์ด๋ณด์ จ์์ง๋ ๋ชจ๋ฅด๋ ReScript๋ผ๋ ์ธ์ด๋ก ์ด๋ฆ์ด ๋ฐ๋์์ต๋๋ค. rescript-lang.org์์ ํ์ธํ ์ ์์ต๋๋ค. ํ๋ฅญํ ์ธ์ด์ด๊ณ ์ด๋ค ์๋ฏธ์์๋ BuckleScript์ ์์ฐ์ค๋ฌ์ด ํ์์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ์ง๋ง OCaml๋ก ๊ตฌ์ถ๋์์์๋ ๋ถ๊ตฌํ๊ณ OCaml์ด ์ ํ ์๋๋๋ค. ์ญ์ฌ์ ์ธ ์ ๋ก๊ฐ ์์ง๋ง JavaScript๋ก ์ปดํ์ผ๋๋ ๋ค๋ฅธ ์ธ์ด์ด๋ฉฐ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
Chris Jenkins: ๊ทธ๋์ ๋จ์ํ ์ต์ข ์ปดํ์ผ ๋จ๊ณ๊ฐ ์๋๋ผ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ด ๋์๊ตฐ์.
Antonio Monteiro: ๋ง์ต๋๋ค. ์์ฆ์ ReScript์ ๋ํด ์ ๋ชจ๋ฅด์ง๋ง, ์ ๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ฌ์ ํ ๋์ผํ ์ค๊ฐ ํํ์ ์ฐ๊ฒฐ๋์ด ์๊ณ ์ฌ์ ํ OCaml ์ปดํ์ผ๋ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก OCaml ์ปดํ์ผ๋ฌ์ ํฌํฌ์ด์ง๋ง, JavaScript๋ฅผ ์์ฑํฉ๋๋ค. ํ์ง๋ง ์์ ํ ๋ค๋ฅธ ์ ํ์ ํ์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ๊ฐ์ต๋๋ค. ์ต๊ทผ์ ReScript์์ ์ ๊ณตํ ์ฃผ์ ๊ธฐ๋ฅ์ ์ปค๋ง ๋๋ ๋ถ๋ถ ์ ์ฉ์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํ ๊ฒ์ ๋๋ค. OCaml์ Haskell๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ OCaml ํจ์๊ฐ ๋ชจ๋ Haskell ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋์ผ๋ก ์ปค๋ง๋ฉ๋๋ค. ์ฆ, ์ธ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์๊ฐ ์๋ค๋ฉด ํ ๊ฐ์ ์ธ์๋ง ์ ์ฉํ ์ ์๊ณ , ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๊ฐ ๋ฉ๋๋ค. ์ด๊ฒ์ OCaml์ด๋ Haskell๊ณผ ๊ฐ์ ์ธ์ด์์๋ ์ ์๋ํ์ง๋ง, ReScript ๊ฐ๋ฐ์๋ค์ JavaScript๋ก ์ปดํ์ผํ ๋ ํด๋น ํ๊ฒฝ์ ์๋ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ต์ํ๋ค๊ณ ํ๋จํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ด์ ReScript์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปค๋ง๋์ง ์์ผ๋ฉฐ, ์ด๊ฒ์ OCaml ํ๋ก๊ทธ๋จ์ ํฐ ๋ณํ์ ๋๋ค.
Chris Jenkins: ์ ๊ณ์์๋ ์์ง ๊ทธ๋ฐ ์ฑ์ ์ ์น๋ฅผ ์ค๋น๊ฐ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋๊ฐ ์ปค๋ง์ด ์ข์์ง ๋์์ง์ ๋ํ ์๊ฒฌ์ ๊ฐ๊ฒ ๋๋ ค๋ฉด ์๋ง 10๋ ์ ๋ ์์ด์ผ ํ ๊ฒ๋๋ค. ํ์ง๋ง OCaml ์ปดํ์ผ๋ฌ ์ฒด์ธ์ ๋งค์ฐ ํ๋ฌ๊ทธํ์ด๋ผ๋ ์ธ์์ ๋ฐ์์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค.
Chris Jenkins: ์ ์ค๊ณ๋์ด ์์ด์ ์กฐ๊ฐ์กฐ๊ฐ ๋ถ๋ฆฌํ ์ ์๋์?
Antonio Monteiro: ๊ทธ ๋ถ๋ถ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ๊ฐ ๊ทธ๋ฐ ํ๋จ์ ๋ด๋ฆด ์ ์๋ ์ฌ๋์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ์ด๋ ๊ตฌ๋ฌธ ์ธก๋ฉด์์๋ ์ค๋ช ๋๋ฆฐ ๋๋ก ๊ตฌ๋ฌธ์ ์ ํํ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ํ๋ฌ๊ทธํ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ฌ๋๋ค์๊ฒ ์ต์ํ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋งคํฌ๋ก์ ๋๋ค. OCaml์์๋ PPX ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ ํ์ฅ์ด๋ผ๊ณ ํฉ๋๋ค.
Chris Jenkins: ์ด๋ค ์ข ๋ฅ์ ๋งคํฌ๋ก์ธ๊ฐ์?
Antonio Monteiro: AST ์์ค์ ๋งคํฌ๋ก์ ๋๋ค. ์ข์ ์ข ๋ฅ์ฃ . C ์ ์ฒ๋ฆฌ๊ธฐ ๋งคํฌ๋ก์ ๊ฐ์ ์ข ๋ฅ๋ ์๋๋๋ค. Rust ์์ค์ ๋งคํฌ๋ก์๋ ๋ค๋ฆ ๋๋ค. Rust ๋งคํฌ๋ก๋ AST๋ฅผ ๊ฐ์ ธ์์ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋ณํํ์ง๋ง ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. Rust ๋งคํฌ๋ก์ ๋ํด์๋ ์ ๋ชจ๋ฆ ๋๋ค.
Chris Jenkins: Lisp ์คํ์ผ์ ๋งคํฌ๋ก์ฒ๋ผ ๋ค๋ฆฌ๋๊ตฐ์.
Antonio Monteiro: Lisp ์คํ์ผ์ ๋งคํฌ๋ก์ ๋น๊ตํ๋ ๊ฒ์ด ํ๋นํ ๊ฒ ๊ฐ์ต๋๋ค. Lisp๋ ๋ํ์ด๊ณ ํ์ ์ด ์์ผ๋ฉฐ AST๋ฅผ ์กฐ์ํ๊ธฐ๊ฐ OCaml๋ณด๋ค ํจ์ฌ ์ฝ์ง๋ง, OCaml์ AST๋ ๋์์ ๋ฐ์ดํฐ ํ์ ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๊ทธ๋์ ๋ง์ ๋ณํ, ์ด๊ฑฐํ ๋๋ ์ผ์ด์ค๊ฐ ์์ต๋๋ค. ํ๋ฉด์ ์ด ๊ฝค ๋๊ธฐ ๋๋ฌธ์ OCaml์์ ๋งคํฌ๋ก ๋๋ PPX๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํญ์ ๊ฐ๋จํ ๊ฒ์ ์๋๋๋ค. ์ด๋ค ์ธ์ด ๊ตฌ๋ฌธ, ์ด๋ค ๊ตฌ๋ฌธ ๊ตฌ์กฐ์ ์ฐ๊ฒฐํ ์ง ๊ฒฐ์ ํด์ผ ํ๊ณ , ๋ชจ๋ธ๋งํ๊ณ ์์ ํ์ฌ ํด๋น ๊ตฌ๋ฌธ ๋ ธ๋์ ์๋ก์ด ๋ฒ์ ์ ์์ฑํด์ผ ํฉ๋๋ค. ๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ๋งคํฌ๋ก์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ๋ํ ํ์ ์ ๋ณด์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ๊ตฌ๋ฌธ ์์ค์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Chris Jenkins: ์ฃ์กํฉ๋๋ค. ์ด ๋ถ๋ถ์ด ๋งค์ฐ ํ๋ฌ๊ทธํ์ด๊ณ ์ด๋ฅผ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๊ณ ๋ง์๋๋ฆฌ๋ ค๊ณ ํ์ต๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ๋ถ๋ถ์ ํ๋ฌ๊ทธํ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํธ์ฝ๋์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ ๋ ํ๋ก๊ทธ๋จ์ ์ต์ข ์ถ๋ ฅ์ด๊ธฐ ๋๋ฌธ์ ์๋ํ์ง๋ง, ํ์ ํธ๋ฆฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋๋ค ํํ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ์ปดํ์ผ๋ฌ ํฌํฌ๋ฅผ ์์ฑํด์ผ ํ ๊ฒ๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋ฉด Antonio๋์ ํฐ ํ๋ก์ ํธ ์ค ํ๋์ธ Melange์ ๋ํ ์ด์ผ๊ธฐ๋ก ์ด์ด์ง๋๋ค. Melange๋ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฐ๊ฒฐํ ๊ฒ์ด์ฃ ?
Antonio Monteiro: ๋ง์ต๋๋ค. ์์ BuckleScript๊ฐ ReScript๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ด๋ค ์๋ฏธ์์๋ OCaml์์ ๋ฒ์ด๋ฌ๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก OCaml ์์ฝ์์คํ ์ ํน ๋น ์ ธ ์์๊ณ , ์ฝ๊ฒ ๋์์ค ์ ์์์ต๋๋ค. ๊ทธ๋์ ๊ฑฐ์ 4๋ ์ ์ค๋, ReScript๊ฐ ๋๊ธฐ ์ ์ BuckleScript๋ฅผ ํฌํฌํ์ต๋๋ค. ํผ๋์ค๋ฌ์ธ ์ ์์ผ๋ ๋ค์ ํ๋ฒ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. OCaml๊ณผ ReasonML์ JavaScript๋ก ์ปดํ์ผํ๋ BuckleScript๊ฐ ๊ตฌ๋ฌธ๊ณผ ์ปดํ์ผ์ ์๋ก์ด ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ธ๊ฐ๊ณ ์ถ์ดํ๋ ์๋ก์ด ์ธ์ด์ธ ReScript Lang์ด ๋๋ฉด์, ์ ๋ BuckleScript์ ์ด๋ ์ ๊ณ ์ํ๊ณ ์ถ์์ต๋๋ค.
Chris Jenkins: ์ ์๊ฐ์๋ ReScript๋ณด๋ค OCaml์ ๋ ๊ฐ๊น์ฃ .
Antonio Monteiro: ๋ง์ต๋๋ค. ๊ทธ๋์ BuckleScript๋ฅผ ํฌํฌํ๊ณ ๊ณ์ ์์ ํ๋ฉด์ OCaml ์ปค๋ฎค๋ํฐ๋ฅผ ์ํด ๋ ๋์ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค๊ณ ์ถ์์ต๋๋ค. ๋ค๋ฅธ ๊ด์ ์์ ๋ณด๋ฉด, ์๋ฅผ ๋ค์ด JavaScript ๊ฐ๋ฐ์์ธ ๊ฒฝ์ฐ ์ ์ฒด ์์ฝ์์คํ ์ ์ต์ํ๊ณ npm์์ ์ค์นํ๋ ๊ฒ์ ์ข์ํ๊ธฐ ๋๋ฌธ์ ReScript๋ฅผ ์ ํํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ReScript๋ npm ์ค์น๋ก ์ฌ์ฉํ ์ ์๊ณ , ์๋ก์ด ์ปดํ์ผ-ํฌ-JS ์ธ์ด๋ฅผ ์์ ์ ํ๋ก๊ทธ๋จ์์ ์ํํด ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง OCaml ํ๋ก๊ทธ๋๋จธ์ด๊ณ OCaml๊ณผ ์์ฝ์์คํ ์ ๋งค์ฐ ์ต์ํ๋ฉฐ npm ์ธ๊ณ์ ๋ชจ๋ ์ต์ ๋๊ตฌ๋ก ํ์ฑํ๊ณ ๋ณํํ ์ ์๋ ์ต์ JavaScript๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด, ์ ๊ฐ ์์ํ ํ๋ก์ ํธ์ธ Melange๋ฅผ ์ฌ์ฉํ ๊ฒ๋๋ค.
Chris Jenkins: ๊ทธ๋์ ํฐ ์ฐจ์ด์ ์ JavaScript ํ๋ก๊ทธ๋๋จธ๊ฐ OCaml์ ๊ฐ๊น์์ง๊ณ ์ถ์ดํ๋์ง, ์๋๋ฉด OCaml ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ธ๋ผ์ฐ์ ๋ก ์ง์ถํ๊ณ ์ถ์ดํ๋์ง์ ๋๋ค.
Antonio Monteiro: ๋ค, ๋ง์ต๋๋ค.
Chris Jenkins: ๋ธ๋ผ์ฐ์ ๋ก ์ง์ถํ๊ณ ์ถ์ดํ๋ ์ผ๋ฐ์ ์ธ OCaml ํ๋ก๊ทธ๋๋จธ์๊ฒ ํ์ํ ํด์ฒด์ธ์ ์ด๋ค ๋ชจ์ต์ผ๊น์?
Antonio Monteiro: Melange๋ BuckleScript๊ฐ ์๋ํ๋ ๋ฐฉ์๊ณผ ๋งค์ฐ ์ ์ฌํ๊ฒ ์๋ํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ๋ฐ๊พผ ํ ๊ฐ์ง๋ OCaml ํ๋ซํผ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋๋ค. ์ด๊ฒ์ด ์์ฆ Melange์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๋ค. Melange๋ ์ปดํ์ผ๋ฌ ์์ค์์ ์๋ํฉ๋๋ค. OCaml ์ปดํ์ผ๋ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๊ตฌ๋ฌธ, ๋ชจ๋ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ํ ๋๋ค ์ค๊ฐ ํํ์ ์ฐ๊ฒฐํ์ฌ ๊ฑฐ๊ธฐ์์ ์๋ฆ๋ต๊ณ ์ฝ๊ธฐ ์ฌ์ด JavaScript๋ฅผ ์์ฑํฉ๋๋ค. ์์ฝ์์คํ ๊ณผ ํ๋ซํผ ์์ค์์๋ BuckleScript๊ฐ ์์ ์ ์๋ํ๋ ๋ฐฉ์๊ณผ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Melange๋ OCaml ํ๋ซํผ์ด๋ผ๊ณ ํ๋ ๊ฒ๊ณผ ํตํฉ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ OCaml ์ปดํ์ผ๋ฌ์ ์์ฝ์์คํ ์ ์ค์ฌ์ผ๋ก ์๋ํ๋๋ก ์ค๊ณ๋ ์ ์ฒด ๋๊ตฌ ์ธํธ๋ฅผ ๋ํ๋ด๋ ๊ณต์ ์ฉ์ด์ ๋๋ค. OCaml ํ๋ซํผ์๋ ์ฝ๋๋ฅผ ๋น๋ํ๊ณ , ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ , ํธ์ง๊ธฐ์์ ํธ์ง๊ธฐ ํตํฉ(์ธ์ด ์๋ฒ ํ๋กํ ์ฝ ๋ฑ)์ ์ํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์๋ ๋ฌธ์ ์์ฑ์ ์ํ ๋๊ตฌ๋ ์๊ณ , ์ง๊ธ ๋น์ฅ ์๊ฐ๋์ง ์๋ ๋ค๋ฅธ ๋๊ตฌ๋ ์์ ๊ฒ๋๋ค. ํ์ง๋ง ์ธ์ด๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ด๋ ค์ด ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด๋ฐ ๊ฒ๋ค์ ๋๋ค. ์ธ์ด๋ฅผ ๋ค ๋ง๋ค๊ณ ์ค์ค๋ก์๊ฒ ์นญ์ฐฌ์ ํ์ง๋ง, ์ฌ์ ํ ํจํค์ง ๊ด๋ฆฌ์, ๋น๋ ๋๊ตฌ ๋ฑ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
Chris Jenkins: ๋ง์ต๋๋ค.
Antonio Monteiro: ์ด๊ฒ์ ๋งค์ฐ ์๋์ ์ด๊ณ ๋งค์ฐ ์ด๊ธฐ ๋จ๊ณ์ ์ค๊ณ ์ ํ์ด์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทผ๋ณธ์ผ๋ก ๋์๊ฐ์ OCaml์ ์ต๋ํ ๊ฐ๊น์์ง๊ณ ์ถ์์ต๋๋ค. OCaml ํ๋ซํผ๊ณผ ํตํฉํ๊ณ , OCaml ๋น๋ ์์คํ ์ธ Dune๊ณผ ํตํฉํ ์ ์๋ค๋ฉด ์ ์ฒด ์์ฝ์์คํ , ๋ชจ๋ ๋๊ตฌ์ ์ก์ธ์คํ ์ ์์ ๊ฒ์ ๋๋ค. ํจ๊ณผ์ ์ผ๋ก ๊ฑฐ์ธ์ ์ด๊นจ ์์ ์ ์๋ ๊ฒ์ด์ฃ . ์ฐ๋ฆฌ๊ฐ ์ค๊ธฐ ์ ์ ์ค๊ณ๋๊ณ ๊ณํ๋๊ณ ์์ฑ๋ ๋ชจ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. BuckleScript๊ฐ ์ฒ์์๋ ํด์ฒด์ธ์ด ์ ๋๋ก ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ ๊ฒฝํ์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ ์ต๋๋ค. ์ด์ OCaml ์์ฝ์์คํ ์ ๊ทผ๋ณธ์ผ๋ก ๋์๊ฐ๋๋ค.
Antonio Monteiro: ๋ค. Melange๋ OCaml ๋น๋ ๋๊ตฌ์ธ Dune์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค.
Chris Jenkins: ์ ๊น๋ง์. Dune์ OCaml ํ ๋ง์ธ๊ฐ์? ํ๋ญํฌ ํ๋ฒํธ์ ๋ง์ฅ๋์ ํด์ผ ํ๋ ๊ฑด๊ฐ์?
Antonio Monteiro: ๊ทธ๋ด ์๋ ์์ต๋๋ค. ์์งํ ์ ๋ Dune ์ ์ค์ ๋ํด ์ ๋ชจ๋ฆ ๋๋ค. ์ปค๋ฎค๋ํฐ ๋ฉค๋ฒ๊ฐ Melange๋ผ๋ ๋จ์ด๋ฅผ ์๊ฐํด ๋๋๋ฐ, ์ ๋ ๋งค์ฐ ์ ์ด์ธ๋ฆฐ๋ค๊ณ ์๊ฐํ์ต๋๋ค. Melange๋ ํ๋์ค์ด๋ก ํผํฉ๋ฌผ์ ์๋ฏธํ๋ฉฐ, Melange๋ OCaml์์ JavaScript๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋๊ตฌ๊ฐ ํผํฉ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์๋ฒฝํ๊ฒ ์ด์ธ๋ฆฐ๋ค๊ณ ์๊ฐํ๊ณ , ๊ทธ๋๋ก ์ฌ์ฉํ์ต๋๋ค. Melange๋ OCaml ๋น๋ ๋๊ตฌ์ธ Dune์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค. OCaml ํจํค์ง ๊ด๋ฆฌ์์ธ opam์์ ํจํค์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ , OCaml LSP, OCaml ์ธ์ด ์๋ฒ ํ๋กํ ์ฝ, ํ์ ์์ฑ, ์ ๋ณด, ์ง๋จ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Merlin์ ์ฌ์ฉํฉ๋๋ค. odoc์ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฑํ๊ณ , dune-release๋ผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Melange ํ๋ก์ ํธ๋ฅผ ํจํค์งํ๊ณ OCaml ํจํค์ง ๊ด๋ฆฌ์์ธ opam์ ๊ฒ์ํ ์ ์์ต๋๋ค. 9์์ ๋ฒ ๋ฅผ๋ฆฐ์์ ์ด๋ฆฌ๋ Fun OCaml์ด๋ผ๋ ์๋ก์ด ์ปจํผ๋ฐ์ค์์ Melange ๋๊ตฌ์ ๋ํด ๋ฐํํ ์์ ์ ๋๋ค. ์ ๋ง ๊ธฐ๋๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ๊ณ ์๋ ๋ด์ฉ์ ๋ค์ ํ๋ฒ ๊ฐ์กฐํ๊ณ Melange๋ฅผ ๋ชจ๋ ๋๊ตฌ๊ฐ ํ๋๋ก ๋ชจ์ด๋ ํตํฉ๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
Chris Jenkins: ํ๋ฐํธ์๋์ ๋ฐฑ์๋์์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ์ ๋ง ์ข์ ๊ฒฝํ์ ํ ์ ์๋ ์ธ์ด๊ฐ ๋ ๊ฐ, ์๋ ์ด์ ์ธ ๊ฐ๊ฐ ๋ ์ค๋ฆ ๋๋ค. ํ์์์ฅ์ด์ง๋ง ์ ๊ฐ ์ข์ํ๋ PureScript, ์๋กญ์ง๋ง ์ ์ฒด ์์ฝ์์คํ ์ด ๋งค์ฐ ํ๋ฅญํ Gleam์ด ์์ต๋๋ค. ์ด์ OCaml๋ ์ด ๋ชฉ๋ก์ ์ถ๊ฐํ ์ ์๋์? ์ง์ ํ ๋ธ๋ผ์ฐ์ -์๋ฒ ์ธ์ด์ธ๊ฐ์?
Antonio Monteiro: ๋ค, ๊ทธ๊ฒ ๋ชฉํ์ ๋๋ค. ํ์คํ ๋ชฉํ์ ๋๋ค. ์ ๋ ๊ทธ ๋ชฉ๋ก์ Closure์ ClosureScript๋ ์ถ๊ฐํ ๊ฒ๋๋ค. Closure์ ClosureScript๋ ๊ทธ๋ฐ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ ๋ Closure์ ClosureScript๋ฅผ ๋ง์ด ์ฌ์ฉํด ๋ณด์์ต๋๋ค. ์ด์ ์ง์ฅ์์ ์ฌ์ฉํ๋๋ฐ, ์ ๋ง ์ ์๋ํ์ต๋๋ค. ํ์ง๋ง ์ฃผ์ ๋ก ๋์๊ฐ์ PureScript๋ Haskell๊ณผ ํจ๊ป ์ฌ์ฉํ์๋์?
Chris Jenkins: ์๋์. PureScript๋ ๋ชจ๋ Node๋ก ์ปดํ์ผ๋๋ฏ๋ก ํ๋ฐํธ์๋์์๋ JavaScript, ๋ฐฑ์๋์์๋ Node๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ชจ๋ Haskell์ด์ง๋ง AST ๊ตฌํ์ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ์์ง์ ๋๋ค. Gleam๋ ๋ง์ฐฌ๊ฐ์ง์ธ๊ฐ์?
Antonio Monteiro: Gleam์๋ ๋ค๋ฅธ ๋ฐฑ์๋๋ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. JavaScript๋ก ์ปดํ์ผํ๊ฑฐ๋ Erlang ๊ฐ์ ๋จธ์ ์ธ BEAM์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค.
Chris Jenkins: JavaScript-ํฌ-JavaScript๋ ์ฌ์ด ๋ชจ๋์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฐ ์ง๋ฌธ์ ๋๋ ธ์ต๋๋ค. ์์ฆ์ JavaScript๋ TypeScript๋ฅผ ์์ฑํ๊ณ ํ๋ฐํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋ชจ๋ TypeScript๋ JavaScript๋ก ๋ง๋ค ์ ์์ต๋๋ค. PureScript๋ฅผ Node์ ํ๋ฐํธ์๋์ JavaScript๋ก ์ปดํ์ผํ ์ ์๋ค๊ณ ๋ง์ํ์ ๊ฒ์ฒ๋ผ์. ์ ๊ฐ ์์ํ๋ ๊ฒ์ ์์ ํ ๋ค๋ฅธ ๋ฐํ์์์ ๋์ผํ ์ธ์ด๋ฅผ ์คํํ๊ณ ์๋ก ํต์ ํ๋ ๊ฒ์ ๋๋ค. ClosureScript๋ JavaScript๋ก ์ปดํ์ผ๋๊ณ Closure๋ JVM์์ ์คํ๋ฉ๋๋ค.
Antonio Monteiro: OCaml๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ๋ชฉํ๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค. OCaml์ Melange๋ฅผ ํตํด JavaScript๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ๋ค์ ๋ง์๋๋ฆฌ์ง๋ง, ์ฌ์ด ๋ชจ๋๋ ์๋ฒ์์ Node.js๋ก Melange๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ๋ ์๋ํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋ ธ๋ ฅํ๊ณ ์๊ณ ๊ธฐ๋ํ๊ณ ์๋ ๊ฒ์ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ ์ด๋ ๊ณต์ ๋๋ ๋ถ๋ถ์์. ํ์ ์ ๋ฐฑ์๋์ ํ๋ฐํธ์๋์์ ๋๋ถ๋ถ ๊ณต์ ๋์ด์ผ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ์ผ๋ถ๋ Melange๋ฅผ ์ฌ์ฉํ์ฌ JavaScript๋ก ์ปดํ์ผ๋๊ณ , ๋ฐฑ์๋๋ OCaml์ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผ๋๋ฉฐ, ๋์ผํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์คํํ๊ณ ์๋ก ํต์ ํฉ๋๋ค.
Chris Jenkins: ์ด๋ป๊ฒ ๋๋์? ์ฝ๋์ ์ผ๋ถ๋ฅผ JavaScript๋ก ์ปดํ์ผํ ๊ฒฝ์ฐ ์ด๋ ๊ฒ ํ๋ผ๊ณ ํ์ํ๋์?
Antonio Monteiro: ๋ง์ต๋๋ค. ์ธ์ด ์ง์๋ฌธ๊ณผ ๊ฐ์ต๋๋ค. ์์ง ๊ทธ๋ฐ ์ง์๋ฌธ์ ์๊ณ , ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ณ ์๋ ๊ฒ ์ค ํ๋์ ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ํ์ฅ(PPX)์ ์ฌ์ฉํ๋ฉด ์๋ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ด์ ๋ํ ํ์ฅ์ด๋ฏ๋ก ์ง์๋ฌธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋น๋ ์์คํ ์ ์ง์๋ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์์ง ์งํ ์ค์ธ ์์ ์ด์ง๋ง, ahrefs์์ ํ๊ณ ์๋ ํฅ๋ฏธ๋ก์ด ์์ ์ค ํ๋์ ๋๋ค. ahrefs๋ ์ฒ์๋ถํฐ Melange์ ์ฃผ์ ํ์์ฌ์์ผ๋ฉฐ ์ง๊ธ๋ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋์ ์ค๋ ํจ๊ป ์ธ๊ธํ๊ณ ์ถ์์ต๋๋ค. ahrefs๋ ๊ฒ์ ์์ง ์ต์ ํ ๋ถ์ผ์ ๋๊ธฐ์ ์ด๋ฉฐ, ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ OCaml๋ก ๊ฐ๋ฐํฉ๋๋ค. ํ๋ฐํธ์๋๋ Melange๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ต๊ทผ์ ahrefs์์ ํ๊ณ ์๋ ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก reactjs ์๋ฒ ์ธก ๋ ๋๋ง์ OCaml๋ก ๋ค์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. ์๋ก์ด React ์๋ฒ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌํํ๊ณ ์๋๋ฐ, ํจ๊ณผ์ ์ผ๋ก OCaml์ RPC ํ๋กํ ์ฝ์ ๋๋ค. ๊ทธ๋์ ์ด๋ค ์๋ฏธ์์๋ ๋ชฉํ์ผ ๋ฟ๋ง ์๋๋ผ ์ด๋ฏธ ํ์ค์ด ๋ ๊ฒ์ ๋๋ค. ahrefs ์น ํ์ด์ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ค ์ผ๋ถ๋ Melange๋ฅผ ํตํด ์ปดํ์ผ๋ reactjs๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๊ธฐ ์ ์ ์๋ฒ ์ธก ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์นฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ํ๋ฐํธ์๋์์ ๋ ๋๋ง๋๋ ๊ฒ๊ณผ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ ๋ค๋ฅธ ์ธํฐํ๋ฆฌํฐ๋ผ๊ณ ํ ์ ์์ต๋๋ค. HTML๋ก ์ปดํ์ผํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ ์กํฉ๋๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋๊น ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด HTML์ ์์ฑํ๊ฑฐ๋, JavaScript๋ฅผ ์ ์กํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด HTML์ ์์ฑํ๊ฑฐ๋, ์๋ฒ์์ ๋ก์ปฌ๋ก ์คํํ์ฌ HTML ๋ถ๋ถ๋ง ์ ์กํ ์ ์๋ค๋ ๋ง์์ด์ฃ .
Antonio Monteiro: ๋ง์ต๋๋ค. HTML ๋ถ๋ถ์ ์ ์กํ๊ณ JavaScript๋ ์ ์กํ์ง๋ง, reactjs๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ด๋ฏธ ํ์ด์ง์ ์๋ JavaScript์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค์นํฉ๋๋ค. ์ด๊ฒ์ ํ์ด๋๋ ์ด์ ์ด๋ผ๊ณ ํฉ๋๋ค.
Chris Jenkins: ์ ์ข์ ๊ฑด๊ฐ์?
Antonio Monteiro: ์ข์ ์ด์ ๋ ์ญ์ฌ์ ์ผ๋ก ํฌ๋กค๋ง ์์ง์ด ์น ํ์ด์ง์ JavaScript๋ฅผ ์คํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ค๋๋ ์ ์ด๋ค์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ฌ์ ํ ๊ทธ๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด reactjs๋ก ์์ฑ๋ ์ธ์์์๋ ์น์ฌ์ดํธ์ HTML์ ๋ก๋ํ ๋ ๊ฐ์ฅ ๋จผ์ ํ์๋๋ ๊ฒ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ์ปจํ ์ด๋ div์ ๋๋ค. ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์๋ ๊ฒ์ด์ฃ . ๋ฐ๋ฉด์ ์ด ์ธ์์์๋ ๊ฐ์ฅ ๋จผ์ ์ ์ฒด HTML ํ์ด์ง๊ฐ ํ์๋๊ณ , ๊ทธ ๋ค์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค์นํ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ํ์๋ฉ๋๋ค. ๊ฒ์ ์์ง ์ต์ ํ ํ์ฌ์๊ฒ ์ด๊ฒ์ด ์ผ๋ง๋ ์ค์ํ ์ฃผ์ ์ธ์ง ์์ํ ์ ์์ ๊ฒ๋๋ค.
Chris Jenkins: ๋ค, ์๋ ์ ํฌ๋กค๋ฌ๊ฐ ๋น ํ์ด์ง๋ก ํ์ํ์ง ์๋๋ก ์ ์ HTML ๋ฒ์ ์ ํ์ด์ง๋ฅผ ์ ๊ณตํด์ผ ํ๋ ํ๋ก์ ํธ์ ์ฐธ์ฌํ ์ ์ด ์์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ๋ฐ๋ก ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ์๋ ๊ทธ๋ฐ ๊ฒ์ ๋ํด ์๊ฐํ์ง ์๊ณ react๋ฅผ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ์ ์ฒด ์์ ์ ํ ์ ์๋์?
Antonio Monteiro: ๋ค, ๋ง์ต๋๋ค. ํด๊ฒฐ๋๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋ก๋ฉ ์งํ์ ๋๋ค. FCP(First Contentful Paint)์๋๊ฐ์? HTML์ ๋ธ๋ผ์ฐ์ ์ ์ ์กํ๋ฉด ํ์ด์ง๊ฐ ์์ํ ๋ก๋ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ์ด๋ฏธ ๊ตฌ์กฐ๊ฐ ์๊ณ , JavaScript๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ฉด์ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ JavaScript๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ์์ง์ด JavaScript๋ฅผ ํ์ฑํ๊ณ , reactjs๋ฅผ ์คํํ๊ณ , ํ๋ฐํธ์๋์์ HTML(DOM)์ ์์ฑํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๋์ ์ผ์ข ์ ํดํน์ฒ๋ผ ์ด๋ฌํ ๋ชจ๋ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ , ์ฌ์ ํ ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ํํ์ง๋ง ์ฌ์ฉ์๊ฐ ์ฝ์ ์ ์๋ ์ฝํ ์ธ ๊ฐ ์ด๋ฏธ ํ์ด์ง์ ์์ต๋๋ค.
Chris Jenkins: ์ฌ์ฉ์์๊ฒ HTML์ ๋จผ์ ์ ์กํ๋ฉด ์ฌ์ฉ์๊ฐ ๋ณด๋ ๋์ ๋ก๋ฉ ์๊ฐ์ 1์ด ๋ ๋ฒ ์ ์์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค.
Chris Jenkins: ์ดํด๊ฐ ๋ฉ๋๋ค. ์ ์ฒด ์์ฝ์์คํ ์ด ์ด๋ป๊ฒ ๋ง๋ฌผ๋ฆฌ๋์ง ์๊ฒ ์ต๋๋ค. OCaml ๋ด๋ถ ํํ์ JavaScript ์คํ ์์ง์ผ๋ก ์์ฑํ๋ ์์ ์ด ์ ์ด๋ ค์ธ๊น์? ์ผ๋ง๋ ๋ค๋ฅธ๊ฐ์?
Antonio Monteiro: ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ์ต์์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๋ณํ์ด ์๋๋๋ค. ํต์ฌ OCaml ์ธ์ด๋ง ์ฌ์ฉํ๋ค๋ฉด ๋๋ค๋ ์ด๋ฏธ ์ฝ๋ ์์ฑ์ ์ต์ ํ๋์ด ์์ต๋๋ค. ์ค๋ณต ์ ๊ฑฐ๊ฐ ์ด๋ฏธ ๋ง์ด ๋์ด ์๊ณ , ์ฐธ์กฐ๊ฐ ์ด๋ฏธ ๋ง์ด ํด๊ฒฐ๋์ด ์์ผ๋ฉฐ, ๋๋ค์์ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ํ์ง๋ง ์ป์ ์ ์๋ ์ ๋ณด๋ ์์ต๋๋ค. ํ ๊ฐ์ง ์๋ OCaml ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ด JavaScript ํ๋ก๊ทธ๋จ์ ๋ชจ์ต๊ณผ ์กฐ๊ธ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ ์ฝ๋๋ ํค๊ฐ ์ปดํ์ผ ํ์์ ์ ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ธํ๋ฉด ๋์ ๋๋ฆฌ์ ๊ฐ์ ๊ฒ์ ๋๋ค. OCaml์ ๋ ์ฝ๋์์ JavaScript ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ถ์ ๊ฒ๋๋ค.
Chris Jenkins: ๋น์ฐํ์ฃ . ํค-๊ฐ ์์ด๋๊น์.
Antonio Monteiro: OCaml ์ปดํ์ผ๋ฌ๊ฐ ํ์ ๊ฒ์ฌ์ ๋๋ค ์์ฑ ์ฌ์ด์์ ์๋ตํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒ์ ํค ์ด๋ฆ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์กดํ๋ ๊ฒ์ด์์ต๋๋ค. OCaml ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์์ ๋ ์ฝ๋๊ฐ ์๊ณ ํ์ ์ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ(์: a, b, c ์์ฑ์ด ์๋ ๊ฒฝ์ฐ) ๋ฉ๋ชจ๋ฆฌ์ ์์๋๋ก ๋ฐฐ์น๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ a, ๋ ๋ฒ์งธ ๋ธ๋ก์ b, ์ธ ๋ฒ์งธ ๋ธ๋ก์ c๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฆ์ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค. ํค ์ด๋ฆ์ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค.
Chris Jenkins: ๋ง์ต๋๋ค.
Antonio Monteiro: ์ด์ ๋ ์์ค-๋จธ์ ๋ณํ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ค-์์ค ๋ณํ์ ํ๊ณ ์์ต๋๋ค. ์์ค-์์ค ๋ณํ์ ํ ๋๋ ์์ค-๋จธ์ ๋ณํ์ ํ ๋๋ ์ฌ์ฉํ ์ ์๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด์กดํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฒ์์ ์ง๋ฉดํ๋ ์ฅ๋ฒฝ ์ค ํ๋์ ๋๋ค. ํต์ฌ ์ธ์ด๋ ์ปดํ์ผํ๊ธฐ ์ฝ๋ค๊ณ ๋ง์๋๋ ธ์ง๋ง, ์์์ ์ผ๋ก ๋ง์๋๋ฆฐ ๊ฒ์ OCaml ์ธ์ด์๋ ํ์ฅ ๊ธฐ๋ฅ์ด ๋ง๊ณ ์ด๋ฌํ ํ์ฅ ๊ธฐ๋ฅ์ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ด ๋ช ํํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ์์คํ ์ ๊ฒฝ์ฐ, OCaml์ ๋ชจ๋ ์์คํ ์ ์ ๋ง ํฅ๋ฏธ๋กญ์ต๋๋ค. ๋ชจ๋ ํ์ผ์ด ๋ชจ๋์ด๊ณ , ๋ชจ๋์ ๊ฐ์ ์งํฉ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ํ์ผ์ ๊ฐ ์ธํธ๋ฅผ ๋ด๋ณด๋ ๋๋ค. ์ด๊ฒ์ ๋๋ถ๋ถ์ ๊ฐ์ด ํจ์ ๋๋ ๊ฐ์ ๊ฐ๋ฆฌํค๋ ์ด๋ฆ์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ์ปดํ์ผํ๊ธฐ๊ฐ ๊ฝค ๊ฐ๋จํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๋ชจ๋ ๋ชจ๋์๋ ํ์ ๋ชจ๋์ด ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ a.ml์ด๋ผ๋ ํ์ผ์๋ b๋ผ๋ ๋ชจ๋์ด ์์ ์ ์๊ณ , b๋ ์ด๋ฌํ ๊ฐ์ ๋ ๋ค๋ฅธ ์งํฉ์ด๋ฉฐ, ํ๋๋ ํ์ผ์ด์ง๋ง ๋ชจ๋๋ก ์ทจ๊ธํ ์ ์๋ค๋ ์ ์์ ์๋ก ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์์ต๋๋ค. OCaml ์ธ์ด์์ ์ผ๊ธ ์๋ฏผ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ์์คํ ์ OCaml์ ๊ฐ ์ธ์ด์ ๋ค๋ฅด์ง๋ง, ์๋ก ๋ณํํ ์ ์๊ณ ๋ชจ๋์ ํจ์์ ์ธ์๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ค ์๋ฏธ์์๋ ๋ชจ๋์ ๋ฆฌํํ ํ๊ณ ์ธ๋ฆฌํํ ํ ์ ์์ต๋๋ค.
Chris Jenkins: ๋ชจ๋์์ ์คํํ ํจ์์ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ด์?
Antonio Monteiro: ์๋ฅผ ๋ค์ด ๋น๋๊ธฐ ๋ฐํ์์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋์ผํ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง๋ง ๊ตฌํ์ด ๋ค๋ฅธ ๋น๋๊ธฐ ๋ฐํ์์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐฑ์๋๋ฅผ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๋ค. OCaml ์ฉ์ด๋ก๋ ์ ๋ต ํจํด์ด๋ผ๊ณ ํฉ๋๋ค. Gang of Four๋ฅผ ์ธ๊ธํ๋ ค๋ ๊ฒ์ ์๋๋๋ค. ๋จผ์ ๋ชจ๋ ์๊ทธ๋์ฒ๋ฅผ ์ ์ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ด ๋ฐํ์์์ Future์ ํ์ ์ ๋ฌด์์ด๋ฉฐ, ๋ชจ๋๋ ์ฉ์ด๋ก ํ๋ค๋ฉด bind ํจ์์ ํ์ ์ ๋ฌด์์ผ๊น์? ํ์ ์ ์ต๋ช ์ผ๋ก ์ ์งํ ์ ์๋ ํ์ T์ด๊ณ , bind๋ T์์ a๋ฅผ ๋ฐ์ b์ t ๋๋ t์ b๋ฅผ ์์ฑํ๋ ํจ์๋ก์ ์ผ๋ฐ์ ์ธ ํ์ ์ผ ๊ฒ๋๋ค. ๊ฒฐ๊ณผ๋ t์ b์ ๋๋ค. ์ด๊ฒ์ ์ผ๋ จ์ Future๋ฅผ ์ฐ๊ฒฐํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์ ๋๋ค.
Chris Jenkins: ๋ง์ต๋๋ค. ์ด๊ฒ์ ๋ชจ๋๋ bind์ด์ฃ .
Antonio Monteiro: ๋ง์ต๋๋ค. ์ด ๋ชจ๋๋ ์๊ทธ๋์ฒ๋ฅผ ์ ๋ฌํ๊ณ ์ถ๊ณ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋น๋๊ธฐ ๋ฐํ์์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ง๋ง, ์์๋ค์ํผ ์ด๊ฒ์ ํจ์ฌ ๋ ์ผ๋ฐํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง ๋ชจ๋์ ๋ฐ๋ ํจ์๋ฅผ ์ ์ํ๊ณ ๋ชจ๋ ํธ์ถ ์ฌ์ดํธ์์ ๊ณ ์ ํ ๋ชจ๋ ๊ตฌํ์ ์ ์ํ๊ณ ์ด๋ฌํ ํจ์์ ์ผ๊ธ ๋ชจ๋(OCaml์์ ์ด๋ ๊ฒ ๋ถ๋ฆ ๋๋ค)์ ์ ๋ฌํ ์ ์์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋ฉด ํจ์ ๋ด์์ ์ ๋ฌ๋ฐ์ ๋ชจ๋์ bind ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ง์์ธ๊ฐ์?
Antonio Monteiro: ๋ง์ต๋๋ค. ์ด ํจ์ ์งํฉ์ ๊ตฌํํ๋ ๋ชจ๋์ ์ ๊ณตํ๋ฉด ๋ชจ๋์ ๊ณ์ฝ์ ์ค์ํ๋ ํ ๋๊ฐ ๊ตฌํํ๋์ง๋ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค์ ๋น์ทํฉ๋๋ค.
Antonio Monteiro: ์ธํฐํ์ด์ค์ ๋น์ทํ๊ณ , "Antonio, ์ ์ด๋ ๊ฒ ๋ณต์กํ๊ฒ ํด์ผ ํ๋์? ๋ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ฉด ๋์์์?"๋ผ๊ณ ๋ฌผ์ด๋ณผ ์๋ ์์ต๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ๊ทธ๋ ์ต๋๋ค. ๋๋ก๋ ๋ชจ๋๋ก ์ถ์ํํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
Chris Jenkins: ํด๋ฆฌ๋ชจํผ์ฆ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฃ ? ์ฌ๊ธฐ์๋ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ์ด๊ฒ์ JavaScript๋ก ์ปดํ์ผํ ๋ ์ด๋ ค์ด ๊ณผ์ ์ ๋๋ค. OCaml ๋ชจ๋ ์์คํ ์ ๋ํ ๊ธด ์ด์ผ๊ธฐ๋ ์ ์ณ๋๊ณ , ๋ชจ๋๊ฐ ํ๋ฒ ์๋ํด ๋ณด์๊ธธ ๊ถํฉ๋๋ค. ์ด๋ฌํ ์ธ์ด ํ์ฅ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ ์ปดํ์ผํ๊ธฐ๊ฐ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ๋ ์ด๋ ต์ต๋๋ค. ํ ๊ฐ์ง ์๋ ๋ชจ๋์ด์ง๋ง, ์์งํ JavaScript์์๋ ๋ชจ๋์ ์ปดํ์ผํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ์ต๋๋ค. ์ต์ง๋ก ๋ณด๋ฉด JavaScript ๋ชจ๋๊ณผ OCaml ๋ชจ๋์ ํํ์ด ๋น์ทํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ด๋ CommonJS ํจ๋ฌ๋ค์์์๋ JavaScript ๋ชจ๋์ ๊ฐ์ ธ์ค๋ฉด ๊ฐ์ ์งํฉ์ธ ๊ฐ์ฒด๊ฐ ๋ฉ๋๋ค. ํค-๊ฐ ์์ด ์๋ ๊ฐ์ฒด์ด๊ณ , ํค๋ ์ด๋ฆ์ด๊ณ ๊ฐ์ ๊ฐ์ ๋๋ค.
Chris Jenkins: ๋ค.
Antonio Monteiro: ๊ทธ๋์ ํ์ผ ๋ด์ ์๋ ํ์ ๋ชจ๋์ ๋์ผํ ํํ์ JavaScript ๊ฐ์ฒด๋ก ์ปดํ์ผํ๋ฉด ์๋ก ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
Chris Jenkins: ์ด๋ฐ ํ๋ก์ ํธ์์๋ OCaml์ ๊ฒ์ด JavaScript์์ ๋ฌด์๊ณผ ๊ฐ์์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๊ฒ์ ํฐ ๊ณผ์ ์ด๊ณ ํฐ ๋ถ๋ถ์ ์ฐจ์งํฉ๋๋ค. ์ด ์ธ์ด์์ ๊ฐ์ ํํ์ด ๋ค๋ฅธ ์ธ์ด์ ํํ์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง, ๊ทธ๋ฆฌ๊ณ JavaScript์์ ์ต์ํ๊ณ ์ฑ๋ฅ์ด ์ข๊ณ ์ฝ๋ ์์ฑ์ ํตํด ์ฝ๊ฒ ์กฐ์ํ ์ ์๋ ๊ตฌ์กฐ์ ์ธ์ฒด ๊ณตํ์ ๋ฒ์ ์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง ์์๋ด์ผ ํฉ๋๋ค. ํญ์ ๊ฐ๋ฅํ๋์? ์๋๋ฉด OCaml ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๊ฑฐ๋ ํนํ ๊ด์ฉ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํด์ผ ํ๋ ์ ์ด ์๋์?
Antonio Monteiro: ํญ์ ๊ฐ๋ฅํ๋ ๊ฒ์ ์๋๋๋ค. ํนํ ์ต๊ทผ OCaml ์ปดํ์ผ๋ฌ์๋ ํ์ฌ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด OCaml ์ปดํ์ผ๋ฌ์ ๊ฐ์ฅ ์ต๊ทผ ์ฃผ์ ๋ฆด๋ฆฌ์ค์ธ OCaml 5์๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๋์์ ํจ๊ณผ ํธ๋ค๋ฌ๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ด ๋์ ๋์์ต๋๋ค. JavaScript๋ ๋จ์ผ ์ค๋ ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ OCaml์ ์๋ก์ด OCaml ๋ฐํ์์ ๋ฉํฐ ์ฝ์ด ํน์ฑ์ ์ง์ํ ์ ์์ต๋๋ค.
Chris Jenkins: ํฐ ์ ์ฝ์ด๊ตฐ์.
Antonio Monteiro: ๋ ๋ค๋ฅธ ํ๋๋ ํจ๊ณผ ํธ๋ค๋ฌ์ธ๋ฐ, ํ์ฌ ์ฐ๊ตฌ ์ค์ธ ๊ธฐ๋ฅ์ด๊ณ ์ง์ํ ์ ์์ ๊ฒ ๊ฐ์ง๋ง ์์ง์ ์ง์ํ์ง ๋ชปํ์ต๋๋ค. ์์ธํ ์ค๋ช ํ์๋ฉด, ํจ๊ณผ ํธ๋ค๋ฌ๋ ํจ๊ณผ์ ์ผ๋ก ํธ์ถ ์คํ์ ๋๊ฐ๊ณ , OCaml ๋ฐฑ์๋์์ ๊ตฌํํ๋ ๋ฐฉ์์ Go๊ฐ ๋ฐํ์์์ ํ๋ ๊ฒ์ฒ๋ผ ์คํ ์ ํ์ ํ๋ ๊ฒ์ ๋๋ค.
Chris Jenkins: ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ธ๋ฅผ ์๊ฐํด ๋ณด์ธ์.
Antonio Monteiro: ํจ๊ณผ ํธ๋ค๋ฌ๋ ์ด๋ค ์๋ฏธ์์๋ ์ฌ๊ฐ ๊ฐ๋ฅํ ์์ธ์ ๋๋ค. ํธ์ถ ์คํ์ ๋๊ฐ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋์ง ์ ์์ง๋ง, ์์ ์ ์๋ฃํ ํ์๋ ์ด์ ์์น๋ก ๋์๊ฐ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง, ๊ทธ ์ค ํ๋๋ ์คํ ์ ํ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์ฐ์ ์ ๋ฌ ์คํ์ผ๋ก ํธ์ถํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ๋ค์ Melange์์ ์๋นํ ํฐ ๊ณผ์ ์ ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ณผ์ ๋ JavaScript์์ ์คํ ์ ํ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ ์์ค์ ์ก์ธ์ค ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. goto๋ ์๊ณ ์ ํ๋ ํ ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๊ณผ์ ๋ ์ฐ์ ์ ๋ฌ ์คํ์ผ๋ก ๊ตฌํํ ์ ์์ง๋ง, JavaScript ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ ์ํ๋ ๋ชจ๋ ํจ์์ ์๋ก์ด ์ธ์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
Chris Jenkins: ์ด๊ฒ์ Melange๊ฐ JavaScript๋ก ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ์์ ๋ํ ๋งค์ฐ ํฐ ๊ฐ์ , ๋งค์ฐ ํฐ ์ฐจ์ด๋ฅผ ๊นจ๋จ๋ฆฝ๋๋ค. ํ์ฌ๋ OCaml๊ณผ JavaScript ์ฌ์ด์ ํธ์ถ ๊ท์น์ด ๋์ผํ๋ฏ๋ก b์ c๋ผ๋ ์ธ์๋ฅผ ๋ฐ๋ ํจ์ let a๋ฅผ ๊ตฌ๋ฌธ์ ์ผ๋ก ๋ณผ ์ ์๊ณ JavaScript์์ b์ c๋ผ๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ a๋ฅผ ํธ์ถํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
Antonio Monteiro: ๊ทธ๋์ ์ถ๋ ฅ ์ฝ๋๊ฐ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ณด์ด๊ธฐ๋ฅผ ์ํ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. OCaml ์ฝ๋์์ JavaScript๋ก ์ง๊ด์ ๊ทธ๋๋ก ๊ฐ์ ธ์ฌ ์ ์๊ธฐ๋ฅผ ์ํ๋ฉฐ, ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ต๋ํ ๋ณด์กดํ๊ณ ์ถ์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ์ฐ์ ์ ๋ฌ๋ก ์ ํํ๋ฉด ์ด๋ฌํ ์ฅ์ ์ด ์์ ํ ์ฌ๋ผ์ง๋๋ค.
Chris Jenkins: ๊ทธ๋ ์ต๋๋ค. ์ด๊ฒ์ OCaml์์ JavaScript๋ก ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌํํ๋ ๋ ๋ค๋ฅธ ๊ณผ์ ๋ก ์ด์ด์ง๋๋ค. ๋ฐ๋ก ๊ฒฝ๊ณ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ์ ๋๋ค. ๊ฒฝ๊ณ๋ ํญ์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ๋๋ค. OCaml์ ์ด๋์์ ๋๋๊ณ JavaScript๋ ์ด๋์์ ์์๋ ๊น์? npm ์์ฝ์์คํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(JavaScript๋ก๋ง ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ OCaml ํ๋ก๊ทธ๋จ์์ ์ด๋ป๊ฒ ํธ์ถํ ์ ์์๊น์? ๋ฐ๋๋ก Melange๋ก ์ปดํ์ผํ ๊ฒ์ JavaScript์์ ์ด๋ป๊ฒ ํธ์ถํ ์ ์์๊น์? ๋ค์ดํฐ๋ธ์ ๊ฒฝ์ฐ Melange๊ฐ ๋์ ๋๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๋ค๋ฅธ ์ํฐํฉํธ์ ์ฐ๊ฒฐํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. JavaScript ๊ฐ๋ฐ์๋ฅผ ์ํด npm์ ํจํค์ง๋ฅผ ๊ฒ์ํ๊ณ ์ถ์ง๋ง, JavaScript๋ก ์์ฑํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
Antonio Monteiro: OCaml๋ก ์์ฑํ๊ณ ์ถ๊ณ , Melange๋ฅผ ํตํด ์คํํ๊ณ , npm์ ๊ฒ์ํ๊ณ ๋ชจ๋ ์ฌ๋์๊ฒ "JavaScript์์ ์ด ํจํค์ง๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์ ๊ฐ ์ข์ํ๋ ์ธ์ด๋ก ์์ฑํ๋ค๋ ๊ฒ์ ๊ตณ์ด ๋ฐํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
Chris Jenkins: ๋ค. ์ด๊ฒ์ ๋ ๋ค๋ฅธ ๊ณผ์ ์ ๋๋ค. ์์ ์ปค๋ง์ ๋ํด ์กฐ๊ธ ์ด์ผ๊ธฐํ๋๋ฐ, ์ปค๋ง์ ์ด๋ฌํ ๊ฒฝ์ฐ์ ์๋นํ ํฐ ๊ณผ์ ์ ๋๋ค. ์ปดํ์ผ ๋จ๊ณ์์ ์ปดํ์ผ๋ฌ ์ต์ ํ๋ฅผ ํตํด ์ด๋ ์ ๋ ํด๊ฒฐํ ์ ์์ง๋ง, ํนํ ํจ์๊ฐ ์๋ก ์ ๋ฌ๋๋ ๋ชจ๋ ๋์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ด ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Melange๋ฅผ JavaScript๋ก ์ปดํ์ผํ๊ฑฐ๋ OCaml์ Melange๋ฅผ ์ฌ์ฉํ์ฌ JavaScript๋ก ์ปดํ์ผํ ๋๋ ์ปค๋ง์ ์ํ ๋ฐํ์์ด ํ์ํฉ๋๋ค.
Chris Jenkins: ์ ๊น๋ง์. OCaml์๋ ๋ค์ดํฐ๋ธ ์ปค๋ง์ด ์๊ณ JavaScript์์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ ๋ฐํ์์ ๋ง๋ค์ด์ผ ํ๋ค๋ ๋ง์์ธ๊ฐ์?
Antonio Monteiro: ์๋ฅผ ๋ค์ด ๋ฆฌ์คํธ์ ๋ชจ๋ ์์์ ๋ํด ๋งคํํ๋ list.map์ ์๊ฐํด ๋ณด์ธ์. OCaml์์ list.map์ ์๊ทธ๋์ฒ๋ ํจ์, ๋ฆฌ์คํธ, ๊ฒฐ๊ณผ์ ๋๋ค.
Chris Jenkins: ๋ค.
Antonio Monteiro: ํ์ง๋ง ํจ์ํ ํ๋ก๊ทธ๋จ์์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ฒ์ฒ๋ผ list.map ํจ์๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์์ธ ์ฝ๋ฐฑ๋ง ์ ๋ฌํ๋ฉด ๋ชจ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ ํด๋น ๋ณํ์ ์ ์ฉํ ์ ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์๊ฐ ๋ฉ๋๋ค.
Chris Jenkins: ๋ค.
Antonio Monteiro: JavaScript์์๋ ์ด๋ฅผ ์ด๋ป๊ฒ ํํํ ์ ์์๊น์? JavaScript์์ list.map์ ๋ ๊ฐ์ ์ธ์(์ฝ๋ฐฑ๊ณผ ๋ฆฌ์คํธ)๋ฅผ ๋ฐ์ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค. ์ธ์๋ฅผ ํ๋๋ง ์ ๋ฌํ๋ฉด ํจ์๊ฐ ์์ ํ ์ ์ฉ๋๊ณ ๋ ๋ฒ์งธ ์ธ์๋ undefined๊ฐ ๋ฉ๋๋ค.
Chris Jenkins: ๊ทธ๋์ JavaScript์์ ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ์์ฑํ๊ณ , ์๋, ์ธ์๋ฅผ ํ๋ ๋ฐ์์ ๋ค์ ์ธ์๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ปค๋ง์ ๋ค์ ๋ฐ๋ช ํด์ผ ํฉ๋๋ค.
Antonio Monteiro: ์์ ๋ง์๋๋ฆฐ ๊ฒ์ฒ๋ผ ๊ฐ๋ฅํ ํ ์ ์ฒด ์ ์ฉ์ ํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ํนํ ์ปดํ์ผ ํ์์ ์์๋ผ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ธ์๋ฅผ ํ๋ ์ ์ฉํ๊ณ ํจ์๋ฅผ ๊ฐ์ ธ์์ ๋ค์ ์ ์ฉํ๋ ๊ฒ๋ณด๋ค ์ฑ๋ฅ์ด ์ข๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ๊ทธ๋ด ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐํ์๋ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๊ฑฑ์ ํ ํ์๋ ์์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ Melange๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ Curry ๋ฐํ์์ ํธ์ถํฉ๋๋ค.
Chris Jenkins: ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ์๋ณธ ์์ค ์ฝ๋์์ ์ปค๋ง๋์ง ์์ ํจ์๊ฐ ๋ฌด์์ด์๋์ง ๋ค์ ํ์ ํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Antonio Monteiro: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
Chris Jenkins: ์ด ํ์บ์คํธ์ ๋น๊ณต์ ๋ชจํ ๋ "๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค"์ ๋๋ค. ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์ ํญ์ ๊ทธ๋ ์ต๋๋ค.
Antonio Monteiro: ์ด๋ฌํ ์ด๋ ค์์๋ ๋ถ๊ตฌํ๊ณ , ์ ๋ ์ด ์ง๋ฌธ์ ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ๊ธธ์ ๊ฐ ์๋ ์์์ต๋๋ค. OCaml์ OCaml ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. OVM์ด๋ผ๊ณ ํ๋์?
Chris Jenkins: ๊ทธ๋ฅ ์ถ์ธกํด์ OVM์ด๋ผ๊ณ ํ์ต๋๋ค. JVM๊ณผ ๊ฐ์ ๊ฑด๊ฐ์? OCaml์ฉ์ผ๋ก์? OVM์ด๋ผ๊ณ ๋ถ๋ฆฌ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค์ด๋ณธ ์ ์ด ์์ต๋๋ค. ์ ๊ฐ ๋ง๋ค์ด ๋ธ ๋ง์ ๋๋ค. ๋ฐ์ด๋๋ฆฌ ์ด๋ฆ์ ocamlrun์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Antonio Monteiro: ๋ค, ocamlrun์ ๋๋ค. VM์ด ๋ญ๋ผ๊ณ ๋ถ๋ฆฌ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ ์ง์ ์์ ๊ฐ์ ํ์ฌ OCaml ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ WASM์ ์์ฑํ๋ค๊ณ ํ๋ฉด ์ด๋ฌํ ๊ฐ๋ ์ฑ ๋ฌธ์ ๊ฐ ์ค์ด๋ค์ง ์์๊น์?
Chris Jenkins: ํฅ๋ฏธ๋กญ๋ค์. ๊ทธ๋ฌ๋๊น OCaml์ฉ์ผ๋ก WASM์ ์์ฑํ๋ ์๋ก์ด ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ๋ง๋ ๋ค๋ ๋ง์์ด์ฃ ? ๊ทธ๋ฌ๋ฉด ๊ฐ๋ ์ฑ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฌด๋ ์ ๊ฒฝ ์ฐ์ง ์์ผ๋๊น์.
Antonio Monteiro: ๋ค, ๋ง์ต๋๋ค. ํ๋ฅญํ ์ง๋ฌธ์ด๊ณ ์ข์ ์ง์ ์ ๋๋ค. ๋ช ๊ฐ์ง ํ๋ก์ ํธ๊ฐ ์งํ ์ค์ธ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ์์ฝ์์คํ ์ด๋ ํ๋ ์ด์ด์ ๋ํด์๋ ์ ๋ชจ๋ฅด์ง๋ง, ํ์ฌ OCaml์์ WASM์ ์์ฑํ๋ ํ๋ก์ ํธ๊ฐ ์ ์ด๋ ๋์ธ ๊ฐ๋ ๊ฒฝ์ํ๊ณ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ์ด๋ฆ์ ๋ง์๋๋ฆด ์ ์์ต๋๋ค. ์ต์ ์ ๋ณด๋ฅผ ํ์ ํ์ง ๋ชปํ์ต๋๋ค.
Chris Jenkins: ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ฐ ํ๋ก์ ํธ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ง๋ฌธ์ ๋ตํ์๋ฉด, ์์ง์ ๋ชจ๋ ์ฌ๋์๊ฒ WASM์ด ๋ฐ๋์งํ ์ธ์์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. WASM์๋ GC๊ฐ ์๊ณ OCaml์ GC ์ธ์ด๋ผ๋ ๊ธฐ์ ์ ์ ์ฝ์ ๋ฌด์ํ๋๋ผ๋ ๋ง์ ๋๋ค. ์ต๊ทผ์ WASM์ GC๋ฅผ ์ถ๊ฐํ๋ ์ ์์ด ๋์๊ฑฐ๋ ๋์ค๋ ค๊ณ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ ์ง ์์ผ๋ฉด WASM์์ ๋จผ์ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ๊ทธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ํ๋ก์ ํธ๊ฐ ๋ช ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ์ด์ , ์ ์ด๋ ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ๋ ๊ฐ๋ ฅํ ์ด์ ๋ ์ฌ๋๋ค์ด WASM์ ์ง์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ ๊ฐ ์ดํดํ๊ธฐ๋ก๋ ๋ง์ ์ฝ๋๊ฐ ์ฌ์ ํ... ์๋, ์ด๋ ๊ฒ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. WASM์ ์ผ์ข ์ ๋ธ๋๋ฐ์ค๋ฅผ ์์ฑํฉ๋๋ค. ์๋๋ ๋ ๋๋ง ์์ง์ด๋ ๊ฒ์๊ณผ ๊ฐ์ด ๊ณ ์ฑ๋ฅ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ์ต์ํ์ ์์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ด์์ต๋๋ค. WASM์ FFI(์ธ๋ถ ํจ์ ์ธํฐํ์ด์ค)๊ฐ ์ด๋ค ๋ชจ์ต์ธ์ง, ์ฆ WASM์์ JavaScript ํจ์๋ฅผ ์ด๋ป๊ฒ ํธ์ถํ๋์ง, WASM์์ JavaScript๋ก ์ธํฐํ์ด์ค๋ฅผ ์ด๋ป๊ฒ ๋ ธ์ถํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ๊ฐ ๋ฌด์งํด์ ๊ทธ๋ด ์๋ ์์ต๋๋ค. ์๋ง ์ด๋ฌํ ๋ฌธ์ ๋ ๋ชจ๋ ํด๊ฒฐ๋์์ ํ ๋ฐ ์ ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ผ ์๋ ์์ต๋๋ค. ์๋๋ฉด ์์ง ์์ ํ ํด๊ฒฐ๋์ง ์์์ ์๋ ์์ต๋๋ค. ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ ์๊ฐ์๋ WASM์ ๊ทผ์ฒ์ ์๋ ๋ณ๋์ ์๋ฏผ์๊ฒ RPC๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ์๋๋ฐ์ฑ ์๊ตฌ ์ฌํญ ๋๋ฌธ์ ๊ทธ๋ด๋ฏํฉ๋๋ค. Melange์ ๋ชจ๋ ์ปดํ์ผ-ํฌ-JS๋ฅผ ์ฌ์ฉํ๋ฉด npm์ ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ก์ธ์คํ ์ ์๊ณ ๋์ผํ ํ๋ก์ธ์ค, ๋์ผํ ์ค๋ ๋์์ ์คํ๋๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ๋ฐฉ์์ผ๋ก ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ์ดํดํ๋ ํธ๋ ์ด๋์คํ์ ๋๋ค.
Chris Jenkins: ์ค์ JavaScript ์ถ๋ ฅ์ ๋ํ ์์ฅ์ ์ฌ์ ํ ๋งค์ฐ ํฌ๊ณ ์ค๋ซ๋์ ์ ์ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
Antonio Monteiro: ์ ๋ ๊ทธ๋ ๊ฒ ์๊ฐํฉ๋๋ค. WASM์์ reactjs ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํฉ๋๋ค. ๋ณธ ์ ์ด ์๊ณ , ํ ์ ์์์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ahrefs์ ๊ฐ์ด OCaml์์ reactjs ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ reactjs, reason-react๋ฅผ ์ฌ์ฉํ๋ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ, ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ์ด๋ป๊ฒ ์ง์๋๋์ง ๋ณด๊ณ ์ถ์ต๋๋ค.
Chris Jenkins: ๋ค์ ํ์ค๋ก ๋์์์, react๋ฅผ ์์ฑํ๊ณ ์ถ์ดํ๋ OCaml ๊ฐ๋ฐ์๋ผ๋ฉด ์ค๋ ๋ฌด์์ ํด์ผ ํ๋์? react์ ๋น์ทํ OCaml ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์? ์๋๋ฉด ์ค์ react์ ๋ํ ๋ฐ์ธ๋ฉ์ด ์๋์? ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
Antonio Monteiro: ์ด๊ฒ์ ๊ฒฝ๊ณ์ ๋ํด ์ด์ผ๊ธฐํ ๋ ์กฐ๊ธ ์ธ๊ธํ๋ ๋ด์ฉ์ ๋๋ค. ํ์ชฝ์์ ๋ค๋ฅธ ์ชฝ์ ํธ์ถํ๊ณ ์ถ์ ๋ ์ด๋ป๊ฒ ๋๋์ง ๋ง์ ๋๋ค. ์ํผ์๋ ์ด๋ฐ์ OCaml ์์ฒด๊ฐ ๋ค์ดํฐ๋ธ๋ก ์ปดํ์ผํ ๋ C์ ๋ํ ํฅ๋ฏธ๋ก์ด ์ธํฐ๋ฝํธ ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์์ฝ์์คํ ์์ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฐ์ธ๋ฉ์ ์์ฑํ๊ณ ํธ์ถํ ์ ์์ต๋๋ค. Melange์์๋ ์ค์ ๋ก ๋์ผํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ง๋ง C ๋์ JavaScript๋ฅผ ํธ์ถํฉ๋๋ค. ์๋ ๋ฐฉ์์ ํธ์ถํ๋ ค๋ ํจ์์ ์ด๋ฆ์ ์ ์ํ๊ณ OCaml ์ฉ์ด๋ก ํจ์์ ์๊ทธ๋์ฒ๊ฐ ์ด๋ค ๋ชจ์ต์ธ์ง ์ ์ํฉ๋๋ค. ์ด ๋ถ๋ถ์ ์์ ํ์ง ์์ต๋๋ค. JavaScript๋ ๋งค์ฐ ๋์ ์ด๊ธฐ ๋๋ฌธ์ ์ถ์ธกํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Chris Jenkins: ๋ค, JavaScript ํจ์์ ํ์ ์๊ทธ๋์ฒ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ ํ๋ ๊ฒ์ ์ฌ์ฉ์์ ์ฑ ์์ ๋๋ค.
Antonio Monteiro: ์ฌ์ฉ์์ ์ฑ ์์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ช ๊ฐ์ง ์์ฑ์ ํด์ํ๋ PPX๋ฅผ ์ถ๊ฐํ์ฌ JavaScript์ ๋ชจ๋ ๊ตฌ๋ฌธ ๊ตฌ์กฐ(์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ, ํ๋กํ ํ์ ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ, ํด๋์ค๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ ๋ฑ)๋ฅผ ์์ฑํ ์ ์๋๋ก ํ์ต๋๋ค. ์ด๊ฒ์ด reactjs์ ๋ํด ์ฐ๋ฆฌ๊ฐ ์ทจํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ReasonReact๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Melange๋ณด๋ค ๋จผ์ ๋์์ต๋๋ค. ReasonML ํ๋ก์ ํธ๊ฐ ์์๋์์ ๋, ์์ง BuckleScript๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๋ ์์ฑ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ReasonReact๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ์ต๋๋ค. ReasonReact์๋ ReasonML JSX(์ธ์ด์ ๋ด์ฅ๋์ด ์์)๋ฅผ ํด์ํ๊ณ react JSX ๋๋ createElement ํธ์ถ์ ์์ฑํ๋ ๋งค์ฐ ํ๋ฅญํ PPX(์ ์ฒ๋ฆฌ๊ธฐ ํ์ฅ)๊ฐ ์์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋๊น OCaml์ ์์ฑํ๊ณ JSX๋ฅผ ํตํด HTML ํ๊ทธ๋ฅผ ํฌํจํ ์ ์๋ค๋ ๋ง์์ธ๊ฐ์?
Antonio Monteiro: ReasonML์ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ReasonML์ JSX๋ฅผ ์ง์ํฉ๋๋ค. OCaml์ ๋์ฒด ๊ตฌ๋ฌธ์ด์ฃ .
Chris Jenkins: ๋ง์ต๋๋ค. Facebook์์ reactjs ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ JSX๊ฐ ํฌํจ๋์์ต๋๋ค. ํฐ ์ฅ์ ์ด์ฃ .
Chris Jenkins: OCaml์ ์์ฑํ๊ณ ์์ง๋ง JavaScript์ JSX์ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ณด์ด๊ณ JavaScript๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ReasonML์ JSX๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ์ผ๋ฐํํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ค์ JSX๋ฅผ ์ฌ์ฉํ์ฌ reactjs ์์๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ์ถ๋ ฅํฉ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ด ReasonML JSX์ ์ ์ผํ ์ฌ์ฉ ์ฌ๋ก๋ ์๋๋๋ค. ์๋ฅผ ๋ค์ด JSX๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ๊ณ ์ ํ pretty printer ์ ์๋ฅผ ์์ํ ์ ์์ต๋๋ค. JSX๋ก ์์ฑํ ์ ์๋ ๋ชจ๋ ๋ด๋ถ DSL(๋๋ฉ์ธ ํน์ ์ธ์ด)์ ReasonML๋ก ์์ฑํ ์ ์์ต๋๋ค. ๋ฐํ์๊ณผ ๋ณํ๋ ์์ฑํด์ผ ํ์ง๋ง์.
Chris Jenkins: ๊ทธ๋ฌ๋๊น ์ผ๋ฐํํ ์ ์๋ค๋ ๋ง์์ด๊ตฐ์. OCaml์ด ์ด๋์ ์๋์ง ๊ถ๊ธํ ์ ๋์ ๋๋ค. ์ด ์คํ์์๋ ํ๋ฉด ์๋์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Antonio Monteiro: ๋ค, ํ๋ฉด ์๋์ ์์ต๋๋ค. ์๋ง๋ AST ์์ค์๋ง ์์ ๊ฒ๋๋ค. ๊ทธ ๋๊ฐ๋ก ๊ณ ๊ธ ์ปดํ์ผ๋ฌ์ธ OCaml ์ปดํ์ผ๋ฌ์ ์๋ฒ ์ธก์์ Reason์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ ์ ์ฒด ๋ฐฑ์๋ ์์ฝ์์คํ ์ ์ป๊ฒ ๋ฉ๋๋ค.
Chris Jenkins: ๋ฐฑ์๋์ ๊ฒฝ์ฐ, ๋ฐฑ์๋์์ OCaml๋ก ์์ฑํ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฆฌ๊ณ ์๋ ์๋๋ฆฌ์ค์์๋ OCaml์ด ์ด๋์๋ ์์ต๋๋ค. Melange์ ๊ฒฝ์ฐ, ์๋๋ฆฌ์ค์ Melange ๋ถ๋ถ์์๋ OCaml์ด ์ฃผ๋ก ๋๊ตฌ์๋ง ์๋ค๊ณ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ํ๋ฉด์ JavaScript์ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ณด์ด๊ณ ์คํ๋๋ ๊ฒ์ JavaScript์ ๋๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋๊น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ๋ OCaml ๊ฐ๋ฐ์์ OCaml์ ์ํ๋ JavaScript ๊ฐ๋ฐ์ ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ ํ ๋ชจํธํ๊ฒ ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ์ ๋ ๊ทธ ๊ฒฝ๊ณ๋ฅผ ๋ชจํธํ๊ฒ ํ๊ณ ์์ต๋๋ค. ์ ๋ ๋ ๊ฐ์ง ๋ชจ๋์ ํด๋นํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ก๋ ํ์ชฝ์์ ์ค๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ํ์ํ๊ณ ๋๋ก๋ ๋ค๋ฅธ ์ชฝ์์ ์ค๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ํ์ํฉ๋๋ค.
Chris Jenkins: ๋ค, ์ดํดํฉ๋๋ค. ์ ์๊ฐ์๋ ์ข์ ์ผ์ ๋๋ค. ๋ค์ ํ ๊ฑธ์ ๋ฌผ๋ฌ์์ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. Antonio๋์ ์ด ๋ชจ๋ ์์ ์ ํ๊ณ ์์ง๋ง, ์์ ์ ํ์ง ์์ ๋๋ ์ด๊ฒ์ด Antonio๋์๊ฒ ๋ฌด์์ ํด์ค๊น์? ์ด๋ป๊ฒ ํ์ฉํ๊ณ ์๋์?
Antonio Monteiro: ์ฌ๊ธฐ์ ๊ธฐ ๋ช ๊ฐ์ง ์ฑ์ด ์์ต๋๋ค. ์ฌ์ค ์ด๊ฑด ์๊ธด ์ด์ผ๊ธฐ์ธ๋ฐ, Melange๋ฅผ ์์ฑํ๊ณ ๊ด๋ จ ๋๊ตฌ๋ฅผ ์์ฑํ๊ฒ ๋ ์ด์ ๋ ์ ๊ฐ ์ฌ์ฉํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๊ฐ ์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์กด์ฌํ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ํ์ต๋๋ค. ์ด๊ฒ์ด JavaScript๋ฅผ ์์ฑํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ์ ๊ฐ ์ ํธํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ์ปดํ์ผ๋ฌ์ ๊ด๋ จ ๋๊ตฌ๋ฅผ ์์ฑํ๋ ๋ฐ ์๊ฐ์ ๋๋ถ๋ถ ๋ณด๋ด๊ณ , ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์๊ฐ์ ๊ฑฐ์ ์์์ต๋๋ค.
Chris Jenkins: ์ต์ํ ์ด์ผ๊ธฐ์ ๋๋ค.
Antonio Monteiro: ๋ค, ์ฌ๊ธฐ์ ๊ธฐ ๋ช ๊ฐ์ง๋ฅผ ์์ฑํ์ต๋๋ค. ๊ณต๊ฐ๋์ง ์์ ๊ฐ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ช ๊ฐ ์๊ณ , Melange๋ก ์์ ์ค์ธ ๊ฒ๋ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ ํ ์คํธ ๋๋ ์๋ก์ด ์ปดํ์ผ๋ฌ ๋๊ตฌ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด Melange ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฃผ ์์ฑํฉ๋๋ค. ํ์ง๋ง Melange ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ธ์๋ ๊ณต๊ฐ๋ ๊ฒ์ด ์์ต๋๋ค. Melange ํ๋ ์ด๊ทธ๋ผ์ด๋๋ melange.playground๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์จ๋ผ์ธ ํ๋ ์ด๊ทธ๋ผ์ด๋์์ ์ผ์ชฝ ์ฐฝ์ OCaml์ ์์ฑํ๊ณ ์ค๋ฅธ์ชฝ ์ฐฝ์ ์์ฑ๋ JavaScript๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
Chris Jenkins: ์์ค ์ฝ๋๋ฅผ ์๋ฒ๋ก ์ ์กํ์ฌ ์ปดํ์ผํ๋์? ์๋๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์ฒ๋ฆฌ๋๋์?
Antonio Monteiro: ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ ๊ฐ ํ๋์ผ์ํ์ธ ๋ฐ์ฌ๋ผ๊ณ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ดด๋ฌผ์ ๋ง๋ค์์ฃ . ์ค์ ๋ก ํ๋ ์ผ์ ๋ถํํ๋ Melange๋ ์์ง ์์ฒด ํธ์คํ ๋์ง ์๊ธฐ ๋๋ฌธ์ JS of OCaml(OCaml ์์ฝ์์คํ ์ ๋ ๋ค๋ฅธ ํ๋ ์ด์ด)์ ์ฌ์ฉํ์ฌ Melange๋ฅผ JavaScript๋ก ์ปดํ์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด Melange ์ปดํ์ผ๋ฌ๋ผ๋ ํฐ ์ฝ๋ ๋ฌถ์์ด ์๊ธฐ๊ณ , ์ด๋ฅผ ์ผ์ข ์ ๋ธ๋๋ฐ์ค๋ก ์ทจ๊ธํฉ๋๋ค. ์ด ๋ธ๋๋ฐ์ค์๋ OCaml ๋๋ ReasonML์ ์ ๋ ฅํ๊ณ Melange๋ก ์ปดํ์ผ๋ JavaScript๋ฅผ ์ถ๋ ฅํ ์ ์๋ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ Melange ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ ์ฃผ์์ ๋์ต๋๋ค.
Chris Jenkins: ์ค๋ฅด๊ฐ๊ณผ ๊ฐ๊ตฐ์.
Antonio Monteiro: [์์]
Chris Jenkins: ๋ค์ ํ๋ฒ ๋ง์ํด ์ฃผ์ธ์. JS of OCaml์ ์ฌ์ฉํ์ฌ Melange ์ปดํ์ผ๋ฌ๋ฅผ JavaScript๋ก ์ปดํ์ผํ๋ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ์? ์ด ์ง๋ฌธ์ ์ ํํ๊ฒ ํํํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๋๋ฌด ๋ฉํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. JS of OCaml์ ์ฌ์ฉํ์ฌ Melange ์ปดํ์ผ๋ฌ๋ฅผ JavaScript๋ก ์ปดํ์ผํฉ๋๋ค. ๋ง๋์?
Antonio Monteiro: ๋ค, ๋ง์ต๋๋ค.
Chris Jenkins: ์ ๊ทธ๋ ๊ฒ ํ๋์? JS of OCaml ์ปดํ์ผ๋ฌ์ ๋จ์ ์ด ๋ฌด์์ด๊ธฐ์ Melange๋ฅผ ์์ฑํ๊ณ ์ถ์ด์ง๋์?
Antonio Monteiro: ์ข์ ์ง๋ฌธ์ ๋๋ค. Melange๊ฐ ์กด์ฌํ๋ ์ด์ ์ค ํ๋๋ JS of OCaml์ด ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก์ ์ถฉ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ด์ ๋ ์์ ๋ง์๋๋ฆฐ ๊ฒ์ฒ๋ผ Melange๋ ๋๋ค ๊ณ์ธต(๋๋ค ์ค๊ฐ ํํ)์ ์ฐ๊ฒฐ๋์ง๋ง, JS of OCaml์ OCaml ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ์ปดํ์ผ ํ์์ ํด์ํ์ฌ JavaScript๋ฅผ ์์ฑํฉ๋๋ค. ๋๋ค ํํ์ ์๋ ๋ชจ๋ ์ ๋ณด๊ฐ ์์ผ๋ฉด ๋ช ๊ฐ์ง ํธ๋ ์ด๋์คํ๋ฅผ ํด์ผ ํฉ๋๋ค. ๋ฐ์ดํธ์ฝ๋์ ๋๋ค ํํ ์ฌ์ด์ ์ ๋ณด๊ฐ ์์ค๋ฉ๋๋ค.
Chris Jenkins: ์ ๋ณด๊ฐ ๋ฒ๋ ค์ง๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. Melange๋ฅผ ํตํด ์ปดํ์ผํ ๋ OCaml ๊ตฌ์กฐ๋ฅผ JavaScript์์ ์ด๋ป๊ฒ ํํํ๋์ง, ์์ฑ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง, JavaScript๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ํด ๋ง์ด ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ ์ค ํ๋๋ ๋ ์ฝ๋ ์์ ์ ๋๋ค. ํค ์ด๋ฆ์ ๋ํ ์ ๋ณด๋ ๋ณด์กด๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด JS of OCaml์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ ์ฝ๋๋ฅผ JavaScript ๊ฐ์ฒด๋ก ํํํ ์ ์์ต๋๋ค. JS of OCaml์ ์ฌ์ฉํ ๋๋ ์ฃผ๋ก OCaml ๊ตฌ์กฐ๋ฅผ JavaScript์์ ์ด๋ป๊ฒ ํํํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง์ ๋ํ ํน์์ฑ์ด ์์ต๋๋ค. ๋ชจ๋ ์ ๋ณด๊ฐ ์์ผ๋ฉด ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๋ ๋ง์ด ์ถ๊ฐํ๊ณ ๋ฐํ์์ ๋ ๋ง์ด ์ถ๊ฐํด์ผ ํฉ๋๋ค.
Chris Jenkins: ๋ค. ํ์ง๋ง JS of OCaml์ Melange์ ๋นํด ์ฅ์ ์ด ๋ง์ต๋๋ค. ์์ง๋์ด๋ง์์๋ ๋ชจ๋ ๊ฒ์ด ํญ์ ํธ๋ ์ด๋์คํ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ์๊ฒฉํ๊ฒ ๋ ๋์ ์๋ฃจ์ ์ ๊ฐ์ง ์๋ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋๋ญ ๋๋ค. JS of OCaml์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๊ฑฐ์ ๋ชจ๋ OCaml ์ธ์ด๋ฅผ ์ง์ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์์ ๋ช ๊ฐ์ง ๋ชจ๋, ๋ช ๊ฐ์ง ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋, ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ช ๊ฐ์ง ๊ตฌ์กฐ๋ฅผ Melange์์ ์ง์ํ ์ ์๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์๋ฅผ ๋ค์ด ํจ๊ณผ ํธ๋ค๋ฌ์ ๋ํด ์ด์ผ๊ธฐํ๋๋ฐ, ์ด๊ฒ์ JS of OCaml์ด ์ง์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. JS of OCaml์์ ์ทจํ ๋ฐฉ๋ฒ์ ํจ๊ณผ ํธ๋ค๋ฌ๋ฅผ ์ปดํ์ผํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํจ์์ ๋์ ์ฐ์ ์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ํจ์์ ์ด ๋ง์ง๋ง ์ธ์๊ฐ ์์ด์ผ ํ๊ณ , JavaScript์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ๋ ค๋ฉด ์ด๋ํฐ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๋ค์ ๋ง์๋๋ฆฌ์ง๋ง, ๋ฐํ์์ด ๋ฐ์ํ๊ณ ํํ์ด ๊ทธ๋ ๊ฒ ๊ฐ๋จํ๊ฑฐ๋ ๋ฌธ์ํํ๊ธฐ ์ฝ์ง ์์ต๋๋ค. ํ์ง๋ง ํฐ ์ฅ์ ์ ํจ์ฌ ๋ ๋ง์ ๊ฒ์ ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค.
Chris Jenkins: ์ด๋ค ์๋ฏธ์์๋ ์๋นํ ๊ณ ์์ค ์ธ์ด๋ฅผ ๋ค๋ฅธ ๊ณ ์์ค ์ธ์ด๋ก ์ปดํ์ผํ๋ ๊ฒ๊ณผ ๋น์ทํ์ง๋ง, JS of OCaml์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
Antonio Monteiro: ์ข์ ๋น์ ์ ๋๋ค. ๋ง์ต๋๋ค.
Chris Jenkins: ํธ๋ ์ด๋์คํ๋ฅผ ์๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ์ฌ๋์ด Melange๋ฅผ ์ฌ์ฉํ๋ ์ค์ ์ ์ธ ์ธก๋ฉด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ๋ JavaScript๋ฅผ ์์ฑํ๊ณ ์ถ์ง ์์ต๋๋ค. TypeScript๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง, TypeScript์ ๋ํ ์๊ฐ์ JavaScript์ ๋งค์ฐ ๋ค๋ฆ ๋๋ค. ํ์ง๋ง PureScript๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ReasonML์ ์ํํด ๋ณด๊ณ ์ด๋ค ๋๋์ธ์ง ์์๋ณด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ์์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์๊น์?
Antonio Monteiro: ์์ํ๊ธฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ mlre.org์ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ๋๋ค. ์์ํ๊ธฐ ์ง์นจ๊ณผ ๋ชจ๋ ๋ฌธ์๊ฐ ์๋ ์น์ฌ์ดํธ์ ๋๋ค. JavaScript๋ฅผ ์์ฑํ๊ณ ์ถ์ง๋ ์์ง๋ง JavaScript ํ๋ซํผ์ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ ์ฌ์ ํ JavaScript๋ฅผ ๋ง์ด ์ฌ์ฉํด์ผ ํ ๊ฒ๋๋ค. ํ๋ซํผ API๋ผ๋ ๋ง์ ๋๋ค. ์ด๋ ์์ ์๋ ํ๋ซํผ API๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ mlre.org์๋ ์ด๋ฌํ ๋ชจ๋ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ, ์ฆ ๊ฒฝ๊ณ์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ, ๋น๋๋ฅผ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธด ๋ฌธ์ ์น์ ์ด ์์ต๋๋ค. OCaml Discord ๋๋ ReasonML Discord์ ๊ฐ์ ํ ์๋ ์์ต๋๋ค. ํญ์ Discord์ ์๊ณ ์ต๋ํ ๋์์ ๋๋ฆฌ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ด๊ฒ์ด ์์ํ๊ธฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Chris Jenkins: ์ข์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ๋ต์ ํ๊ธฐ๋ ์ด๋ ต์ง๋ง ์ฃผ๊ด์ ์ธ ์๊ฒฌ์ ๋ง์ํด ์ฃผ์ธ์. ์ด ์คํ์ ์ผ๋ง๋ ์ฑ์ํ๋์?
Antonio Monteiro: ์ด๋ ค์ด ์ง๋ฌธ์
๋๋ค. 23๋
์ ์๋ ์กฐ๊ฐ๋ ๋๊ตฌ ์ธํธ๋ง ์์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์กฐํฉํ ์๋ ์์์ง๋ง ๋ชจ๋ ๊ฒ์ ์๋์ผ๋ก ํด์ผ ํ์ต๋๋ค. 23๋
์ ๋ถํฐ ์ง๊ธ๊น์ง ์ฐ๋ฆฌ ์์
์ ํฐ ๋ถ๋ถ์ ์ด๋ฌํ ๋ชจ๋ ๊ฒ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฑฑ์ ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋์ OCaml ๋น๋ ์์คํ
์ Melange์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ณ OCaml ํ๋ซํผ๊ณผ ์ํํ๊ฒ ์๋ํ๋๋ก ํ์ผ๋ฉฐ ๊ทธ ๊ณผ์ ์์ ๋ง์ ์ฝ๋๋ฅผ ์์ ํ์ต๋๋ค. ํ์ฌ๋ Melange์ ์ฃผ์ ๋ฒ์ ์ ๋ค ๊ฐ ์ถ์ํ๊ณ , ์์ฆ์๋ ๋ง์ ์ฌ์ฉ์๊ฐ Melange๋ฅผ ํ๋ก๋์
ํ๊ฒฝ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ฐ์ฅ ํฐ ์ฌ์ฉ์๋ ahrefs์
๋๋ค. ์์ ๋ง์๋๋ฆฐ ๊ฒ์ฒ๋ผ์. ๊ทธ๋์ Melange๋ ์์ ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ๋ก๋์
ํ๊ฒฝ์ ๋ฐฐํฌํด๋ ๋๊ตฌ ์ ํ์ผ๋ก ์ธํด ํฐ ๋๋ผ์์ด ๋ฐ์ํ์ง ์์ ๊ฒ์
๋๋ค.
Chris Jenkins: ๋ค. ์ค์ํ ์ธํ๋ผ์ ์์กดํ๋ ๋ชจ๋ ๊ฒ์ ๋ํด ์ํ๋ ์ํ์ ๋๋ค.
Antonio Monteiro: ํ์ง๋ง ์์ฝ์์คํ ์ ์์ง ๋งค์ฐ ์ด๋ฆฝ๋๋ค. Melange๋ฅผ ๋ฐฐํฌํ๋ฉด ์์ง ์ด๊ธฐ ๋จ๊ณ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์ ๋๋ค. ์์ฝ์์คํ ์ด ์์ ํ ๊ฐ์ถฐ์ง์ง ์์๊ณ , npm์ ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฐ์ธ๋ฉ์ ๋ง์ด ์์ฑํด์ผ ํ๊ณ , ์ํ๋ ๊ฒ์ ํ๊ธฐ ์ํด ํ๋ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์์ฑํด์ผ ํ ์๋ ์์ต๋๋ค. ๋น๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ, Dune๊ณผ OCaml์ด ์ด๋์ ์๋์ง, ๋ฒ๋ค๋ฌ๊ฐ ์ด๋์์ ์์๋๋์ง ๋ฑ์ ์์๋ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์ ํ์ ์ฌ์ฉ์๊ฐ ์ง์ ํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ถ์ฅ ์ฌํญ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ง์ ๊ฒ์ ์์๋ด์ผ ํ๊ณ ๋ง์ ๊ฒ์ ๋ง์ ธ๋ด์ผ ํ์ง๋ง, ์ ๋ฐ์ ์ผ๋ก ํต์ฌ์... ์ด๋ ๊ฒ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. OCaml์ ์ต์ํ๋ค๋ฉด Melange ๋๊ตฌ์ ์ต์ํด์ง ๊ฒ์ ๋๋ค. OCaml์ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ธ ๊ฒ์ด ๋ง์ต๋๋ค.
Chris Jenkins: ๋ค, ๋น์ฐํฉ๋๋ค.
Antonio Monteiro: ๋ค.
Chris Jenkins: ๊ทธ๋ฌ๋ฉด ๋ง์ง๋ง ์ง๋ฌธ์ด ๋ ์๋ ์๊ฒ ์ต๋๋ค. ์ด์ ๋ค์ดํฐ๋ธ react-ml ๋ ์ง ์ ํ๊ธฐ๋ฅผ ์์ฑํ๋ ๋ฐ ์ง์คํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ์์ฝ์์คํ ์ ์ฑ์ฐ๋ ์ผ์ ํ์ง ์์ ๊ฒ์ ๋๋ค. ์ด ํ๋ก์ ํธ์ ๋ฏธ๋๋ ๋ฌด์์ธ๊ฐ์? ์์ผ๋ก 6๊ฐ์, 1๋ ๋์ ๋ฌด์์ ์์ ํ ๊ณํ์ธ๊ฐ์?
Antonio Monteiro: ๋ช ๊ฐ์ง ๋ชฉํ๊ฐ ์์ต๋๋ค. ํญ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๋๋ค. ahrefs ๋ด๋ถ์ Melange์ ReasonML์ ์ฌ์ฉํ๋ ํ๋ฐํธ์๋ ํ์ด ์์ต๋๋ค. ๊ทธ๋ค์ ๋งค์ผ ์ด๋ ค์์ ๊ฒช๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ด๋ ค์์ ์ ์๊ฒ ๋ณด๊ณ ๋ฉ๋๋ค. ์ด๊ฒ์ ํญ์ ์ผ๋์ ๋์ด์ผ ํ ์ฌํญ์ ๋๋ค. ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ReasonML ์ธ์ด ์์ฒด์ ์ฌ์ฉ์ฑ์ ๊ฐ์ ํ ๋ฟ๋ง ์๋๋ผ Melange๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ ์์ ํด์ผ ํฉ๋๋ค. ์์ฆ์๋ ์ฝ๋ ์์ฑ ๋ฒ๊ทธ๊ฐ ๊ฑฐ์ ์์ง๋ง, ์ฃผ๋ก ์ปดํ์ผ๋ฌ์์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๊ณ ์ฌ์ฉ์๊ฐ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ ๋๊ตฌ์ ์๋ชป์ธ์ง์ ๋ํ ๋ฌธ์ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผ๋ฌ์ ์๋ชป์ ๋๋ค. ๋ฉ์์ง๊ฐ ๋์์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค. ๋ํ ํ๋ฐํธ์๋์ ๋ฐฑ์๋์์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. Melange๋ก ์ปดํ์ผ๋ ์ฝ๋์ ๋ค์ดํฐ๋ธ๋ก ์ปดํ์ผ๋ ์ฝ๋ ์ฌ์ด์์์. ์์ ์ธ๊ธํ๋ ์ธ์ด๋ณ ๊ตฌ๋ฌธ(Closure์์๋ reader conditional์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ ๋ ๊ทธ ํํ์ด ๋ง์์ ๋ญ๋๋ค)์ ์ด๋ป๊ฒ ์ ์ํ ์ ์์๊น์? ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํ์ผํ ๋ฐฑ์๋๋ฅผ ์กฐ๊ฑด๋ถ๋ก ์ง์ ํ๋ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ ๋๋ค. ๊ทธ ์ธ์๋ ์ ์ ๋ ๋ง์ JavaScript ๊ตฌ๋ฌธ์ Melange ์ธก์์ ์ง์ํด์ผ ํฉ๋๋ค. ํนํ ์๊ฐํ๊ณ ์๋ ๊ฒ์ ๋์ ๊ฐ์ ธ์ค๊ธฐ์ ๋๋ค. JavaScript์์๋ ๊ฐ์ ธ์ค๊ธฐ ์ ํ์ด ๋ ๊ฐ์ง์ ๋๋ค. ํ๋๋ ๋๊ธฐ์์ด๊ณ ํ์ผ์ ์ต์์ ์์ค์ ์ ์ธ์ผ๋ก ๋ฐฐ์นํฉ๋๋ค. "๋ค๋ฅธ ๋ชจ๋์์ ์ด๋ฌํ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค."๋ผ๋ ์ ์ธ์ ๋๋ค. ํ์ง๋ง ๋์ ๋๋ ๋น๋๊ธฐ ๊ฐ์ ธ์ค๊ธฐ๋ ์์ต๋๋ค. ๋ฐํ์์ ๋ค๋ฅธ ๋ชจ๋์ด๋ ๋ค๋ฅธ ๋ฒ๋ค์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ฒ๋ค๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค ๋ถํ ์ ์ ์ํฉ๋๋ค. "๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ฒญํฌ๋ฅผ ์ ๊ณตํ๊ณ , ๋ฐํ์์ ๋์ ์ผ๋ก ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ธ์ค๋ฉด ๋ฉ์ธ ๋ฒ๋ค์ ํฌํจ๋ ํ์๊ฐ ์๋ ๋ค๋ฅธ ๋ ผ๋ฆฌ์ ์ฒญํฌ์ ๋ฃ๊ฒ ์ต๋๋ค."๋ผ๋ ์์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ Melange ๋ก๋๋งต์ ์๋ ๊ธฐ๋ฅ์ด๊ณ ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ณ ์์ผ๋ฉฐ, OCaml์์ ๊ด์ฉ์ ์ด๋ฉด์๋ JavaScript์์ ๋ฒ๋ค ๋ถํ ์ ์ด์ ์ ์ ๊ณตํ๋ ์๋ฃจ์ ์ ์ ๊ณตํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
Chris Jenkins: ์ด ํน์ ์ง์ ์ Melange์ ์ฑ์๋ ๊ณก์ ์์ ์ด๋์ ์๋์ง ์ ๋ณด์ฌ์ค๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ค์ ๋ก ์์ ๋๊ณ ์ฌ๋๋ค์ด ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ณ ์ถฉ๋ถํ ํฐ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์์ํ๋ฉด ๊ฑฑ์ ํ๊ธฐ ์์ํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Antonio Monteiro: ๋ง์ต๋๋ค. ์์ฆ์ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ๋ ค๋ ์ผ์ ์ด๋ฅผ ๊ด์ฉ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. Melange์๋ ํจ๊ณผ์ ์ผ๋ก JavaScript ์ฝ๋๋ฅผ OCaml ํ์ผ ๋ด์ ์์ฑํ ์ ์๋ ํ์ถ ํด์น๊ฐ ์์ต๋๋ค. ์ด ํ์ถ ํด์น๋ FFI ์ธ์ด(Interop ์ธ์ด)๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๋์ํฌ ์ ์์ผ๋ฉฐ, Melange๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ํค๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๊ณ ์์ต๋๋ค. ๋ค๋ง ์์ ์ฑ์ด ๋ง์ด ๋จ์ด์ง๋๋ค. OCaml ๋ชจ๋์ ํ์ ์ด ์ ์ง์ ๋์ด ์๊ณ ์๊ทธ๋์ฒ๋ฅผ ์ ์ํ ์ ์๋ค๋ ์ ์ ๋ํด ์กฐ๊ธ ์ด์ผ๊ธฐํ์ต๋๋ค. ์์ผ๋ก ๋์ฌ ๋ด์ฉ๊ณผ ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ณ ์๋ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ๋ณด์ฌ๋๋ฆฌ์๋ฉด, ๋์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ์๊ทธ๋์ฒ๋ฅผ ์ ์ํ๊ฑฐ๋ ์ถ๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฐ๋ผ์ OCaml ๋ชจ๋์ ๋์ ์ผ๋ก ๊ฐ์ ธ์ฌ ๋ ๋ชจ๋ ๊ฒ์ด ์ฌ์ ํ ํ์ ์์ ํ๊ณ OCaml ์ฝ๋๋ฒ ์ด์ค ๋ด์ ์๋ ๋ค๋ฅธ ๋ชจ๋์ ์ฐธ์กฐํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
Chris Jenkins: ๋ค. ์์ ์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ๋ฒ๋ค์ ํฌํจ๋์ง ์์ ๋ฌด์ธ๊ฐ์ ๋ํด ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ, ํ์ ๊ฒ์ฌ์ ์๊ทธ๋์ฒ๋ฅผ ๋ณด์กดํ๋ ๋ฐฉ๋ฒ, ์์ ํ์ง ์์ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Antonio Monteiro: ๋ค, ์ธ์ด์ ๋ณด์ฅ์ ์๊ณ ์ถ์ง ์๊ณ ๊ฐ๋ฐ์์๊ฒ ์ด๋ ค์ด ์ผ์ ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค.
Chris Jenkins: ๋ง์ต๋๋ค. ๋งค์ฐ ์ฌ๋ฏธ์๋ ์์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
Antonio Monteiro: ๋ค, ๋งค์ฐ ์ฌ๋ฏธ์์ต๋๋ค. ์ฐ๊ตฌ๋ ๋ง์ด ํ๊ณ ํ๋กํ ํ์ ๋ ๋ง์ด ๋ง๋ค์ง๋ง, ๋ช ๊ฐ์ง๋ ํด๊ฒฐ์ฑ ์ ์ฐพ์ ๊ฒ ๊ฐ์ต๋๋ค.
Chris Jenkins: ๊ทธ๋ผ ๊ณ์ ์์ ํ์๋๋ก ํ๊ฒ ์ต๋๋ค. ์๊ฐ ๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
Antonio Monteiro: ์ด๋ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ์ฆ๊ฑฐ์ ์ต๋๋ค.
Chris Jenkins: ๊ฐ์ฌํฉ๋๋ค, Antonio. ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ ์ Antonio์ ์์ ์ ์ง์ํ๊ณ ์ถ๋ค๋ฉด GitHub์์ ํ์ํ ์ ์์ต๋๋ค. ์ผ ๋ ธํธ ์๋์ ํ์ด์ง ๋งํฌ๊ฐ ์์ต๋๋ค. ํ์ฌ์์ ํ์ํ๋๋ก ์ค๋ํ๋ ๊ฒ๋ ๊ณ ๋ คํด ๋ณด์ธ์. ๋ ๋ฆฝ ์คํ ์์ค ๊ฐ๋ฐ์์๊ฒ ํฐ ๊ธ์ก์ด๋ผ๋ ์ผ๋ฐ ํ์ฌ์ IT ์์ฐ์๋ ๋ฐ์ฌ๋ฆผ ์ค์ฐจ์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ค๋ํ ์ ์๋ ์ฌ๋์ด ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ธ์. ๋ชจ๋์๊ฒ ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๊น์ Developer Voices Patreon ๊ณ์ ๋งํฌ๋ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด ํ์บ์คํธ์ ํฅํ ์ํผ์๋๋ฅผ ํ์ํ๊ณ ์ผ๊ฐ ๊ณ์ ์งํ๋ ์ ์๋๋ก ๋์์ฃผ์ธ์. ๋ฌผ๋ก ์ผ ๋ ธํธ๋ ์ด๋ฌํ ๋งํฌ์ ์ด ์ํผ์๋์์ ๋ ผ์ํ ํ๋ก์ ํธ์ ๋ํ ๋งํฌ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ์ข์ ๊ณณ์ ๋๋ค. ๋ค์ ์ฃผ์๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ธ๊ณ์ ๋ ๋ค๋ฅธ ๋ฐ์ด๋ ์ธ๋ฌผ๊ณผ ํจ๊ป ๋์์ค๊ฒ ์ต๋๋ค. ๊ตฌ๋ ํ์๊ณ , ์ด๋ฒ ํ ๋ก ์ด ์ฆ๊ฑฐ์ ๋ค๋ฉด ์ข์์๋ฅผ ๋๋ฌ์ฃผ์๊ณ ์น๊ตฌ์ ๊ณต์ ํด ์ฃผ์ธ์.
Chris Jenkins: ๋ ํ ๋ง์ด ์๋์?
Antonio Monteiro: ๋ค, ํฅํ ๊ฒ์คํธ์ ๋ํ ์ ์์ด ์๋ค๋ฉด ์ฐ๋ฝ์ฒ๋ฅผ ํตํด ์๋ ค์ฃผ์ธ์. ๋ฐฑ๋ก๊ทธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ง๋ง ํญ์ ๋ ๋ง์ ์ ์์ ํ์ํฉ๋๋ค. ์ฐ๋ฝ ์ฃผ์ธ์.
Chris Jenkins: ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ผ ์ ๋ ํธ์คํธ Chris Jenkins์๊ณ , ์ด๊ฒ์ Antonio Monteiro์ ํจ๊ปํ Developer Voices์์ต๋๋ค. ๋ค์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
Antonio Monteiro: ๊ฐ์ฌํฉ๋๋ค.