ํ ๋ก ์ ๊ณ์์ ์ฌ๊ธฐ์์ ์์๋์์ต๋๋ค. https://github.com/SaturnFramework/Saturn/issues/33
์ด Twitter ์ค๋ ๋ ์๋ ์์์ ์ง๋ ฌํ ๋ ๋ช ์์ ์ง๋ ฌํ์ ๋ํ ํฅ๋ฏธ๋ก์ด ์๊ฒฌ๋ ์์ต๋๋ค.
์๋ง๋ ๋ด๊ฐ ๋งํฌ๋ ๋ฌธ์ ์์ ๋ด ์๋๋ฅผ ์ถฉ๋ถํ ํํํ์ง ๋ชปํ์ ๊ฒ์ด๊ณ (๋ชจ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ด๊ฒ์ด ๋ ผ๋์ ์ผ์ผํค๊ธฐ ์์ํ์ต๋๋ค. ํ ๋ก ์ ์ํ ๋ ๋์ ํ ๋๋ฅผ ๋ง๋ จํ๊ธฐ ์ํด ์๋์ ํ์ฌ ์๊ฐ์ ๊ณต๊ฐํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. :)
Fable 2 ์ํ ๋ ์ฒ์ ์ ๋ฐ์ฌ ์ง์ ์์ด ๋ฐฐ์ก๋ฉ๋๋ค. ๋ด ๊ฐ์ ์ ์ด๊ฒ์ด ํ์ฌ Fable์ ๋ฐ์์ ๋ค๋ฅธ ๋ง์ ๊ฒ์ด ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ofJson/toJson
์ํฅ์ ๋ฏธ์น ๊ฒ์
๋๋ค. ์ํ ๋ฒ์ ์ ๋ถ๋ช
ํ ํ๋ก๋์
์ฉ์ด ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํด ๋ณด๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
์ ๋ฐ์ฌ ์ง์์ ์ค๋จํฉ๋๊น? ๊ธ์, ๊ฒฐ๊ตญ ๋๋ ์ฝ๋์ ๋ง์ ๋ถ๋ถ์ ๋ค์ ์์ฑํ์ฌ (๋ฐ๋ผ๊ฑด๋) ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๊ธฐ์ฌ์์๊ฒ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋ค์์ต๋๋ค. ๋ฆฌํฉํ ๋ง์์ ๋๋ Fable์ ๋ฆฌํ๋ ์ ๋ชจ๋ธ์ด ์ผ๊ด๋์ง ์๊ณ ์์ฑ๋ JS ์ฝ๋(๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ด Fable 2์ ์ฃผ์ ๋ชฉํ ์ค ํ๋)์ Fable ์ฝ๋ ๊ธฐ๋ฐ ๋ชจ๋๋ฅผ ๋ง์ด ์ค์ผ์ํค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Fable 2 ์ํ ๋ก _์๋กญ๊ฒ ์์_ํ์ฌ ์ฌ์ฉ์์ ์ค์ ์๊ตฌ ์ฌํญ์ ํ์ธํ๊ณ ์ฒ์๋ถํฐ ๋ค์ ๊ตฌํํ๊ณ ์ถ์ต๋๋ค(ํ์ํ์ง ์์ ๊ฒฝ์ฐ).
๋ฆฌํ๋ ์ ์ ์ด๋ป๊ฒ ๋ค์ ๊ตฌํ๋ฉ๋๊น? ํ์ฌ ์ง๋ ฌํ ์ ๋ณด๊ฐ ์ ํ์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ ํ์ ๋ ๋ฑ๋ฑํ๊ฒ ๋ณด์ด๊ฒ ํ๊ณ ์ฌ๋๋ค์ด REPL์์ ๋์์ ๋น๊ตํ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. Fable์ด ๋จ์ํ ์ ํ์ ๋ํด ํจ์ฌ ๋ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์ด๋ฏธ ๋ฐ์ํ์ต๋๋ค). Fable 2์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์ต์ ์ ๊ณ ๋ คํ์ต๋๋ค.
typeof<Foo>
๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ํธ์ถ ์ฌ์ดํธ์์ ๋ฐ์ฌ ์ ๋ณด๋ฅผ ์์ฑํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์ค๋ณต๋ ์ฝ๋๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ๋ฆฌํ๋ ์
์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ ์ฑ์ ๋ถ์ด์ต์ ์ค ์ ์์ต๋๋ค.Fable 2์์ ์๋ ์ง๋ ฌํ๊ฐ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๋ ์ฝ๋๋ ์ผ๋ฐ JS ๊ฐ์ฒด ๋ฐ ๊ณต์ฉ์ฒด, JS ๋ฐฐ์ด์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค์ดํฐ๋ธ JSON.parse/stringify
ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ๋ฌธ์ ๋ Maps, Sets, dates, long ๋ฑ๊ณผ ๊ฐ์ด ๋ธ๋ผ์ฐ์ JSON
api์ ํธํ๋์ง ์๋ ๊ฒ๋ค์
๋๋ค. ๋ฐ๋ผ์ Fable์ ์ ๋๋ก ์๋ํ๊ธฐ ์ํด ๋ฐํ์ ์ ํ๋์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ ํ ์์์ผ ํฉ๋๋ค. ํฝ์ฐฝ/์์ถํฉ๋๋ค.
ํ์ฌ ์ง๋ ฌํ์์ ๋ง์์ ๋ค์ง ์๋ ์ ์ ๋ฌด์์ ๋๊น? ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค
๋์์ ๋ฌด์์ ๋๊น? ์์ ๋ฌธ์ ์์ ์ธ๊ธํ๋ฏ์ด ํ์ฌ Fable 2 ์ํ ์ ํจ๊ป ์๋ํด์ผ ํ๋ ์ฃผ์ ๋์์ Thot.Json ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฑ๋ JSON๊ณผ ํจ์ฌ ๋ ๋์ ์ ํจ์ฑ ๊ฒ์ฌ์ ๋ํ ๋ ๋ง์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ์ผํ ๋จ์ ์ ๋์ฝ๋๋ฅผ ์ง์ ์์ฑํด์ผ ํ์ง๋ง ์๋์ผ๋ก ์์ฑํ๋ ์์ ์ด ์ด๋ฏธ ์๋ค๋
๋ด๊ฐ Fable์ ์ข์ํ๋ ์ด์ ์ค ํ๋๋ JSON ์ง์ ๋๋ฌธ์
๋๋ค. ์ธ์ฝ๋/๋์ฝ๋ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์ ๊ธฐ ์ถ๊ฐํด์ผ ํ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด ๋ ๊ฒ์
๋๋ค. ์์ฃผ ์ด๊ธฐ ๋ฆด๋ฆฌ์ค์ F# ์ ํ์์ JS ๊ฐ์ฒด์ ๋งค์ฐ ๊ฐ๊น๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ JSON.parse/stringify
๋ง ์ฌ์ฉํ ์ ์์๊ณ ์ ํ ์ฌํญ์ ์๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์๋ํ ์ ์์์ต๋๋ค. ๋ถํํ๋ Fable์ด ์ข์์ง๋ฉด์ JSON์์ Lists์ DateTimes๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋์ ๋ง์ฝ ๊ทธ๋ค์ด ๊ฐ๋ค๋ฉด ์ฝ๊ฐ์ ํ๋ก์ ํธ ์ฌ์์ฑ์ด ๋ ๊ฒ์
๋๋ค.
Thot.Json ์ฝ๋ ์์ฑ์ด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋์ ๋ํ ๋น๋ ์ฒด์ธ์ ์ผ๋ถ๊ฐ ๋ ์ ์๋ค๋ฉด(net46x์์ - ์, ์ธ์ ๊ฐ๋ ์ ๊ทธ๋ ์ด๋ํด์ผ ํ ๊ฒ์ ๋๋ค), ์๋ง๋ ๊ฐ์ง๋ฅผ ํธ์ถํ๋ ์ผ์ข ์ ์ฌ์ ๋น๋ ์ด๋ฒคํธ(๋ด๊ฐ FSharp.Data.SqlClient์ฉ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ)์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋๋ฉด MS ๋น๋ ์์ /๋์์ด ์ฌ์ ํ ๋ฌธ์ ์ ๋๊น... ์๋ ๋ณต์์ ๋ํ ํจํท์ ์ด๋ป๊ฒ ๋ฉ๋๊น?
_๋ช ๋ ์ ์ Newtonsoft.Json๊ณผ ํค์ด์ก์ต๋๋ค._
์นด์ดํฐ ํฌ์ธํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ์ฌ DU์์ ๋ฉ์์ง ์ ํ์ ์ญ์ง๋ ฌํํ๊ธฐ ์ํด ํ๋ก๋์ Fable 1 ๋ ธ๋ ์ฑ์์ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ณํ์ ํจ๊ป ๊ตฌ์ฑํ๊ณ ๋ฐํ์์ ์์๋๋ก ์ ํ ๊ฒ์ฌ/๊ตฌ์ฑํ ์ ์๋๋ก ๋ ธ๋ ์คํธ๋ฆผ์ ์ธ์ฝ๋ฉ ์ ํ์ ์๋ ๊ฒฐ์ ํ๊ธฐ ์ํด:
์ด ์๋น์ค์ ์๋น์๋ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ฐ๋ชฌ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค. https://github.com/intel-hpdd/device-scanner/tree/master/IML.DeviceScannerDaemon (๊ทธ๋์ ๋์ ๋ ์ฝ๋/๋ฌธ์์ด๋ก ์ ์ง ๋ฐฐ์ด์ด ์ด์์ ์ ๋๋ค.) ํ์ง๋ง ์ง๋ ฌํ๋ฅผ ์๋ํ๊ธฐ ์ ์ ๋ฌธ์์ด ์ผ์น๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์๊ฒ ๋ ํฐ ๋ฌธ์ ๋ ๋ฐํ์์ ๋ฐ์ฌ ์ ๋ณด ๋ถ์กฑ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ธ๋ ์คํธ๋ฆผ์ ์๋ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ ์๋ ๊ฒ์ด์ง๋ง ์ด ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค.
@davidtme ๋น๋ ์ฒด์ธ ๋๋ TP ์ง์ ๋ฑ์ ํตํด Thot.Json ๋์ฝ๋/์ธ์ฝ๋ ์์ฑ์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์ต๋๋ค.
์ด ์ฃผ์ ์ ๋ํ ๋์ ๋ฏธ๋ ์งํ ์ํฉ์ ์ถ์ ํ๊ธฐ ์ํด Thot.Json์์ ๋ฌธ์ ๋ฅผ ์ด โโ๊ฒ์ ๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ Fable์ฉ Thot.Json๊ณผ ๋์ผํ API๋ฅผ ์ ๊ณตํ๋ Thot.Json.Net ์ ๊ฒ์ํฉ๋๋ค.
์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ์์ด๋์ด:
// By adding this condition, you can share you code between your client and server
#if FABLE_COMPILER
open Thot.Json
#else
open Thot.Json.Net
#endif
@alfonsogarciacaro ์ปดํ์ผ ์ ์ ํ ์ ๋ณด๋ฅผ ๊ฐ์งํ๊ณ ์ด์ ๋ฐ๋ผ serialization
ํ๋ก์ธ์ค๋ฅผ ์กฐ์ ํ ์ ์์ต๋๊น?
์ ํ ์ ๋ณด๋ ์ปดํ์ผ ์ ํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์. _both_๊ฐ ๋ฆฌํ๋ ์ ์์ด ์ ํ ์ ๋ณด์ ์ก์ธ์คํ๊ณ ์ง๋ ฌํ๋ฅผ ์ปดํ์ผ๋ฌ ์ธ๋ถ๋ก ์ด๋ํ๊ธฐ๋ฅผ ์ํ๋๋ผ๋ ์ผ์ข ์ ํ๋ฌ๊ทธ์ธ์ด ํ์ํฉ๋๋ค(Fable 2 alpha :wink:์์๋ ์ฌ์ฉํ ์ ์์). ๊ทธ๋ฌ๋ "์ง๋ ฌํ ํ๋ก์ธ์ค ์กฐ์ "์ด ์ ํํ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
TBH, ๋๋ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ Fable์ ํ๊ฐํ๋ ์ฌ๋๋ค์๊ฒ ๋ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ธฐ๋ฅ์ ์ ์ธํ๋ ๊ฒ์ด ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฉ์ง ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด Fable์ ๋ชจํ ๋ผ๋ ๊ฒ์ ์๊ณ ์๊ณ ์ ๋ง ๋ง์์ ๋ญ๋๋ค. ํ์ง๋ง Fable์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ปดํ์ผ๋ฌ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ๋งค ํฌ์ธํธ์ธ IMO๋ JS ์์ฝ์์คํ ๊ณผ์ ๋ฉ์ง ์ํธ ์ด์ฉ์ฑ์ด๋ฉฐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ฉํ ์ ์๋ F#์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์คํ ์๊ฐ. ํ๋ฅญํ๊ฒ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐ๋ก ๊ทธ๊ฒ์ ๋๋ค. (์ค์ ๋ก ์ ์ ๋ค์๊ฒ ์ค๋ฌธ์กฐ์ฌ๋ฅผ ํด๋ณด๋ฉด ์ด๋จ๊น์?)
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์๋ํ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ๋ ์๋๋ฉฐ ๋ฐํ์์ ๋๋ผ์์ ์ค ์ ์์ต๋๋ค. ์ด๋ ์์ ํ ์ธ์ด๋ฅผ ํ๋งคํ๋ ๊ฒฝ์ฐ ์ข์ง ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํจํ ์์ธ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํํฉ๋๋ค. ์๋ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์คํจ๋ ๋ฐํ์์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ์ง ์์ ์์น์์ ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ ํ๋ก ํธ์๋ ์ธก์์ Newtonsoft.Json์ ์ด๋ป๊ฒ๋ ๋ฏธ๋ฌ๋งํ๊ณ ์ผ๋ถ ์ฌ๋๋ค์ ์์ฑ, json์ ์ ํ ์ ๋ณด ํฌํจ ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ ์ง์ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
Newtonsoft.Json๊ณผ ๋์ผํ ์ฉ์ด์ฑ ์ ์ ๊ณตํ๋ฉฐ ์ฌ์ฉ์๋ ์ด๋ฏธ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ๋ง์กฑํ๊ณ ์์ต๋๋ค. ์ฌ๋๋ค์ด ๋ ๋ง์ ์ ์ด ๋ฐ ์ฌ์ฉ์ ์ ์๋ฅผ ์ํ๋ฉด Thot.Json ๋๋ Fable.SimpleJson ์ด ํ์ํ ์์ค์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ด๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด(F# ํฌํจ)์๋ ํต์ฌ ์์คํ ์ ์ง๋ ฌํ๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์ด๊ฒ์ Fable ์ฝ๋ ๋ฒ ์ด์ค์ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ ์ฆ๊ฐ์ํค๊ณ ๊ทธ๊ฒ์ ๋ฆฌํฉํ ๋งํ๊ธฐ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค(Fable 2์์์ ๊ฐ์ด). ์ง๋ ฌํ๋ฅผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฎ๊ธฐ๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์ ๋๋ค.
ofJson<'a>
๋ฐ 'toJson`์ผ๋ก ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๋ ค๋ฉด ์๋น์๊ฐ ์ด๋ฌํ ๋ณํ๊ธฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ๋ฆฌํ๋ ์
์ ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
@Zaid-Ajaj ์ ๊ด์ ์์๋ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด๊ธฐ ์ข๊ฒ ๋ง๋๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค.
ํนํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์ฌ์ ํ ๋๋ฆฐ ๊ตญ๊ฐ์์ ๋ง์ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ๋ํด ๋ถํํ๋ ๊ฒ์ ๋ด ๋๋ค. :)
@alfonsogarciacaro ์์ฑ ์ด๋ฆ์ ํค๋ก ์ฌ์ฉํ์ฌ Maps, Sets ๋ฑ์ ์ง์ํ๊ธฐ ์ํด ์ง๋ ฌ ๋ณํ๊ธฐ ํธ์ถ์ Fable์์ ์ฌ์ฉ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ์์์ง๋ง ๊ทธ๊ฒ์ ์ผ์ข ์ ๋์ ์๊ฐ์ ๋๋ค. ์ด๊ฒ์ ๋ง์ ์ฝ๋ ์ค๋ณต์ ์๋ฏธํ๊ณ ๋ํ ๊ฐ ์ง๋ ฌ ๋ณํ๊ธฐ ํธ์ถ์ด ๋์ผํ์ง ์์ ๊ฒ์ ๋๋ค. ์ด ์์ด๋์ด๋ ์์ด ๋ฒ๋ฆฌ์ :)
@alfonsogarciacaro ์ ํ ์ ๋ณด๋ฅผ "์ ํ ๋ชจ๋"์ ํฌํจํ ์
๋ชจ๋์ ์ฑ์ ๋ชจ๋ ์ ํ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ Webpack์์ ์ ๊ฑฐํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ฌ ofJson/toJson
๋์ฐ๋ฏธ๊ฐ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ฒ์ ์ ๊ณตํ์ง ์๋ ํ ๋์ฒด๋์ด์๋ ์ ๋๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. @jgrund ์ํ๋ ๊ฐ์ฌํฉ๋๋ค. Fable์ด ํ๋ก๋์
์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ๋ณด๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ด๊ฐ ๋ณผ ์์๋ ๊ฒ์ ๋ฆฌํ๋ ์
์ด ofJson
์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก typeof<'T>
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ณณ์ด ์์ต๋๊น?
ํต์ฐฐ๋ ฅ @Zaid-Ajaj์๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Maxime์ด ๋งํ๋ฏ์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ(์ค์ ๋ก ์ด๋ค ๊ณณ์์๋ _less_ ๊ฐ๋ ์ฑ์ด ๋์ง๋ง Fable 2์์๋ ๋ ์ต์ ํ๋ ์ ์์)์ ๋ง๋๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์์ฑ๋ ์ฝ๋๋ฅผ JS ์ต์ ํ ๋๊ตฌ์ ๋ ์ ํฉํ๊ฒ ๋ง๋๋ ๋ฌธ์ ์ ๋๋ค. ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ๋ฉด ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ต์ ์ ๊ณ ๋ คํ ์ ์๋ ๊ฒฝ์ฐ Fulma์ ๊ฐ์ด ๋ ์ฑ์ํ๊ณ ๋ณต์กํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฏ๋ก ์์กด์ ๋ฌธ์ ์ด๊ธฐ๋ ํฉ๋๋ค. Fable์ ๊ธฐ๋ฅ์ _๋๋ถ๋ถ_๊ณผ BCL์ FSharp.Core ๋ฐ _์ผ๋ถ_๋ฅผ ์ฌ์ฉํ์ฌ F# ์ธ์ด๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ์๋ํ๊ณ ๋ฆฌํ๋ ์ ์ด F# ์ธ์ด ๊ธฐ๋ฅ์ธ์ง BCL/.NET ๋ฐํ์์ ์ผ๋ถ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋ ๋ค๋ฅธ ์ฃผ์ ์ ๋๋ค. ๋ฌผ๋ก ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด์ง๋ง Fable 2 ์ํ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฉ/ํํ๊ณผ ์คํ ๊ฐ๋ฅํ ๋์์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ๊ฐํ๊ณ ์ถ์ต๋๋ค.
@MangelMaxime ์, ์์์ ๊ณ ๋ คํ ์ธ ๋ฒ์งธ ์ต์
์
๋๋ค. ์ด Types
๋ชจ๋์ด ์ผ๊ด์ฑ ์๋ ์ํ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๊ณ ์ปดํ์ผ์ ๋ํด ์ฝ๊ฐ์ ์์ฌ์ด ์์ต๋๋ค. ํ์ง๋ง ํ์คํ์ง ์์ต๋๋ค. ์๋ํด ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ ํ ๋ฒ, ๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์๊ฒฌ์ ์ ๋ง ์ ์ฉํฉ๋๋ค. ํ์ฌ Fable ์ฌ์ฉ์์๊ฒ ํผํด๋ฅผ ์ค ์ ์๋ ์ผ์ ํ๋ ค๋ ๊ฒ์ด ์ ์ ์ต์ํ์ ์๋์ธ์ง ํ์ธํ์ญ์์ค. ๋์๊ณผ ๊ทธ ํจ๊ณผ๋ฅผ ๋ ์ฝ๊ฒ ๋น๊ตํ ์ ์๋๋ก Fable 2 ์ํ ๋ฒ์ ์ ์ถ์ํ๋ ค๊ณ ํฉ๋๋ค. +1:
๋๋ฆ ๋๋ฌด ๋์ Fable์ ์ ํํ ๊ฐ์ฅ ์ค์ํ ์ด์ ๋ F#์ ์์ชฝ์์ ์ฌ์ฉํ ์ ์๊ณ ์ฌ๋ฌ ๊ณ์ธต์์ ์ ํ์ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฆฌํ๋ ์ ์์ฒด๋ ํ์ํ์ง ์์ง๋ง @davidtme๊ฐ ๋งํ๋ฏ์ด ์ด์ ๊ตฌํ์ "๊ทธ๋ฅ ์๋ํ์ต๋๋ค". JSON ์ง๋ ฌํ๋ฅผ ์ํด ์ ํ ์์คํ ์ ์ผ๋ถ ์ธก๋ฉด์ ํฌ๊ธฐํ๋ ๊ฒ์ด ํธํ์ง๋ง ๊ฑฐ์ ๋ชจ๋ ํ๋ซํผ ๊ฐ ์ง๋ ฌํ ํ์์ ํด๋นํ๋ฉฐ ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ถ์ถ๋ ์ง๋ ฌํ๋ ํด์ ํ ์ ์๋ค๋ฉด ํฐ ์ ์ถฉ์์ด ๋ ๊ฒ์ ๋๋ค. ;)
typeof<'T> ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฅ์๊ฐ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. ๊ด๋ จ ์น์ ์ ๊ฐ์กฐ ํ์ํ์ง ์์์ต๋๋ค. https://github.com/intel-hpdd/fable-import-node-powerpack/blob/4004f9c430517c1f26bf47f9c2f766598e500b0d/fable/Stream.fs#L144
์ด๋ ๊ฒ ํ๋ฉด ์ปดํ์ผ ์๊ฐ ์ ๋ณด์์ ์คํธ๋ฆผ ์ธ์ฝ๋ฉ๊ณผ ์ฝ์ ์ ์๋ ์ชฝ์ ์ํ๋ฅผ ์ค์ ํ ์ ์์ผ๋ฏ๋ก ์ ํ๋ณ๋ก ์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ์ ๋ณด๋ก ๊ฐ ์คํธ๋ฆผ์ ์๋์ผ๋ก ๊ตฌ์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
๊ทธ ๋ฐํ์ผ๋ก, ๋๋ ๊ฝค ์ข์ ์ธ ํจ๊ป ์ฌ์ ์ ์ต์ ์ ํ๋ ์ฝ๋ฉ์ ๋ํ ๊ฑฑ์ ์์ด ์์ฑ ์คํธ๋ฆผ ๋ฑ์ ์์ ์ ์ํ ํ ์ ์์ต๋๋ค : https://github.com/intel-hpdd/fable-import-node-powerpack/blob/4004f9c430517c1f26bf47f9c2f766598e500b0d/test/ ์คํธ๋ฆผ.ํ ์คํธ.fs#L221 -L232
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์๋ฆฌํ ๋ฐ์ฌ ์ฌ์ฉ๋ฒ์ด ์์ต๋๋ค.
https://github.com/Zaid-Ajaj/Fable.Remoting/blob/master/Fable.Remoting.Client/Proxy.fs#L70
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ:
https://github.com/Zaid-Ajaj/Fable.Remoting/blob/master/Fable.Remoting.Client/Proxy.fs#L169
์ ์ฒด Fable.Remoting
ํ๋ก์ ํธ ์์ด๋์ด๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
ํต์ ์ด ๋๊ธฐ ์๊ฐ์ด๋ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋์ค์ ์ธ ์์ฒญ์ ์๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ ์ก์ ์ํด ์์ ๊ฐ ์ ํ์ ์ง์ํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์๋ฅผ ๋ค์ด .NET ์์ถ ๋ฐ ๊ด๋ฆฌ๋์ง ์๋("blittable") ๊ฐ ์ ํ์ ์ง์ํฉ๋๊น? ์ ์์ ๋ฐ๋ฅด๋ฉด ๋ค์ดํฐ๋ธ์ .NET ๋ชจ๋์์ ์ด๋์์๋ ๋์ผํ ํํ์ ๊ฐ์ต๋๋ค. ์ด ์์ ํํ์ ๋๋๋ก json ์ง๋ ฌํ/์ญ์ง๋ ฌํ๊ฐ ์๋ฒ์์ ๋๋ฌด cpu/memory/gc/์ง์ฐ ์ง์ฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์ค์ํ ์ ์์ต๋๋ค(ํนํ ๋ง์ ํด๋ผ์ด์ธํธ ๋ฐ/๋๋ ๋์ ๋ฉ์์ง ์๋์์). ํด๋ผ์ด์ธํธ์ ์ ๋ก ๋ณต์ฌ๋ ArrayView/TypedArray/DataView ์ง์์ ์ฌ์ฉํ์ฌ ์ง์ํ ์๋ ์์ต๋๋ค(ํ๋๋ ๋ฒํผ์์ ์ง์ ์ฝ๊ณ /์๋๋ค).
์๋ง๋ ์ด๊ฒ์ NodeJS ๊ธฐ๋ณธ interop์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค(ffi ํฌํจ).
[<Struct>]
[<StructLayout(LayoutKind.Sequential, Pack=1)>]
type Vector3 =
val X: int32
val Y: int32
val Z: int32
new(x,y,z) = {
X=x;
Y=y;
Z=z;
}
new(dataview: DataView,offset) = {
//TODO
}
@zpodlovics์ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ด๋ฐ ์ข ๋ฅ์ ์ง๋ ฌํ์ ์ต์ํ์ง ์๋ค๊ณ ๋งํด์ผ ํฉ๋๋ค. JSON ๋๋ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? (ํ ํ๋ก์ ํธ์์ Google Flatbuffers ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ๋ฅผ ์กฐ๊ธ ํ๋ ์ดํ์ง๋ง ๋ง์ ์์ฉ๊ตฌ ์ฝ๋๊ฐ ํ์ํ์ต๋๋ค.) ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? Fable์ JS ์ฝ๋ ๋ฐ ๋ฐํ์์์ ์ต์ ํํ๊ธฐ ์ํด ์ ํ์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ฏ๋ก .NET๊ณผ JS์์ ์ ํํ ๋์ผํ ํํ์ ๊ฐ๋ ๊ฒ์ ์ฝ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฐ(๊ตฌ์กฐ์ฒด) ์ ํ์ ์ ์ํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ JS์ ์ ํ ์ฌํญ ์ธ์๋.
๋ํ ์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ง๋ ฌํ๋ฅผ ์ปดํ์ผ๋ฌ ํต์ฌ ์ฝ๋์ ๋ถ๋ฆฌํ์ฌ ์ ์งํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. Fable 2์์๋ ์ฌ์ฉ์์ ํธ์๋ฅผ ์ํด ์ผ์ข ์ ๊ธฐ๋ณธ JSON ์ง๋ ฌํ๋ฅผ ์ ์งํ๊ฒ ์ง๋ง ๋ ๋ณต์กํ ์์ ์ ๋ณ๋์ ํจํค์ง์์ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@alfonsogarciacaro ๋๊ธ ๊ฐ์ฌํฉ๋๋ค!
๊ธ์, ๊ทธ๊ฒ์ ์ค์ ๋ก ์ง๋ ฌํ ํ์์ด ์๋๋ผ ๋ค์ดํฐ๋ธ C ๊ตฌ์กฐ์ฒด๋ก ํํ๋๋ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํํ์ ๋๋ค. "์ง๋ ฌํ๋" ํ์์ ์ ํํ ac ๊ตฌ์กฐ์ฒด(๋ค์ดํฐ๋ธ)[1]์ ๊ฐ์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ํํ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ดํฐ๋ธ interop์๋ ํ์ํฉ๋๋ค. ์ด์ ์์ ์์๋ 3 * 4 = 12๋ฐ์ดํธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํฉ๋๋ค. Struct๋ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์์ญ(.Wrap)์ ๋์ฒดํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ก "์๋ฎฌ๋ ์ด์ "๋ ์ ์์ต๋๋ค.
์ด์ ๊ตฌ์กฐ์ฒด๋ JS DataView API(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt32)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์ฌ ์ฝ๋๋ก ๋ณํํ ์ ์์ต๋๋ค.
์:
type Vector3 =
val mutable view: DataView
val mutable offset: int32
static member XOffset=0
static member YOffset=4
static member ZOffset=8
new(v: DataView,o:int32) = {
view=v;
offset=o;
}
member __.Wrap(v: DataView,o:int32) = {
view=v;
offset=o;
}
member __.X
with get() = __.view.getInt32(__.offset+Vector3.XOffset)
and set(v) = __.view.setInt32(__.offset+Vector3.XOffset,v)
member __.Y
with get() = __.view.getInt32(__.offset+Vector3.YOffset)
and set(v) = __.view.setInt32(__.offset+Vector3.YOffset,v)
member __.Z
with get() = __.view.getInt32(__.offset+Vector3.ZOffset)
and set(v) = __.view.setInt32(__.offset+Vector3.ZOffset,v)
์, ์๋์ผ๋ก ์์ฑํ ์ ์์ง๋ง ์๋์ผ๋ก ํ๋ฉด ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ํนํ ์ปดํ์ผ๋ฌ์ ์ ํ, ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์, ํ๋ ์คํ์ ๋ฑ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ. ์ผ์ข ์ ์ปดํ์ผ๋ฌ ํ์ฅ ํ๋ฌ๊ทธ์ธ/api/ast๋ ์ฌ์ฉ์ ์ ์ ์์ฑ๋ codegen๊ณผ ์๋ฒฝํ๊ฒ ํธํ๋ฉ๋๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ์ฌ๋๋ค์ ๋ฐ์ด๋๋ฆฌ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฝ๊ณ ์จ์ผ ํ๋์ง, ์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง/์ค๋์ค/๋น๋์ค/๋ฌธ์/๋คํธ์ํฌ ํจํท ๋ฑ.
interop(ffi ์ง์)์ ์ํ ์ง๋ ฌํ ํ์์ผ๋ก ๊ธฐ๋ณธ ์ ๊ณต๋๋ ์์ ๋ฉ๋ชจ๋ฆฌ ํํ์ ๋ชจ๋ ์ฌ๋์๊ฒ ๋๋ผ์ด ๊ฐ์น๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ชจ๋ ํ๋ซํผ์์ ๊ฐ๋ฐ์๋ ํ๋ซํผ์ ์กฐ์ํ ์ ์๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. 1) ํ๋ซํผ ๊ธฐ๋ณธ ์ฝ๋๋ก interop ์ฝ๋ ์์ฑ(ํ๋ซํผ ์ปดํ์ผ๋ฌ, ๋ค๋ฅธ ๋๊ตฌ ์ฒด์ธ, ๋ค๋ฅธ ๋น๋/ํ ์คํธ/๋ฐฐํฌ ํ๋ก์ธ์ค ๋ฑ) 2) interop์ ๋ํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ์ฝ๋ ์์ฑ + ํผํผ. .NET์ ํ๋ณดํฌ ์ง์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋ ๊ฒ์ ์ฐ์ฐ์ด ์๋๋๋ค.
์จ:
[1] https://en.wikipedia.org/wiki/Struct_ (C_programming_language)
.๊ทธ๋ฌผ
[2] https://www.developerfusion.com/article/84519/mastering-structs-in-c/
JS
[3] https://github.com/TooTallNate/ref-struct
@zpodlovics์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ง ๊ฐ์ฌํฉ๋๋ค! ๊ณผ๊ฑฐ์ ๋ฐ์ดํฐ ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด๋ฅผ ์๋ฎฌ๋ ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ง๋ง ์ฌ์ ํ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์์ ์ ์ํํ์ง ์์์ต๋๋ค(์: ์ซ์๋ง ์ฌ์ฉํ ์ ์๊ณ ๊ตฌ์กฐ์ฒด ์ค์ฒฉ์ด ์ด๋ ต์ต๋๋ค. ๋ฐฐ์ด์์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๊ฒ๋ ๊น๋ค๋กญ์ต๋๋ค ๋ฑ). ). ๋ํ ์ซ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ Fable๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ ์ ์ดํ๋ โโ๊ฒ์ด ์ด๋ฏธ ๊ฐ๋ฅํฉ๋๋ค. ์ซ์ ๋ฐฐ์ด์ Typed Array๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ง๊ธ๊น์ง ์ฌ์ฉ์๋ค ์ฌ์ด์์ ๊ทธ๋ค์ง ๋งค๋ ฅ์ ์ด์ง ์์์ต๋๋ค.
๋น์ ์ด ๋งํ๋ฏ์ด ์ง๋ ฌํ์ ์ ํํ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์๋ง๋ ์ด๊ฒ์ ๋ํ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํ ๊ฒ์ ๋๋ค. ํ์ฌ๋ก์๋ ๊ทธ๊ฒ์ ์ฐ์ ์์๋ก ์๊ฐํ ์ ์์ง๋ง, ์ด์ ๊ด๋ จํ์ฌ ๊ธฐ์ฌํ๋ ๊ฒ์ ๋ณด๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์ ๋๋ค. Fable 2์ ํ๋ฌ๊ทธ์ธ ์ด์ผ๊ธฐ๋ ์์ง ๋ฏธ์ ์ด์ง๋ง ์ด๋ฌํ ํ๋ฌ๊ทธ์ธ ์์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ด์ ๊ฐ์ ๊ฒ์ ํ์ฉํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ณ ๋ คํด์ผ ํ ํ ๊ฐ์ง๋ WebAssembly ์ง์์ด .NET/F#์ ์ ๊ณต๋๊ณ ์ด ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํํ์ด .NET ๋ชจ๋ธ์ ๋ ๊ฐ๊น๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ Fable์ F#์ JS ์์ฝ์์คํ ์ ๋ ๊ฐ๊น๊ฒ ํตํฉํ๊ณ ์ฑ์ ํ๋ก ํธ์๋๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํ์ฌ ๋๊ตฌ/libs๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋จ์ ์ ์์ต๋๋ค.
@alfonsogarciacaro ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด๊ฐ Fable์ ์ข์ํ๋ ์ด์ ์ค ํ๋๋ JSON ์ง์ ๋๋ฌธ์ ๋๋ค. ์ธ์ฝ๋/๋์ฝ๋ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์ ๊ธฐ ์ถ๊ฐํด์ผ ํ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด ๋ ๊ฒ์ ๋๋ค. ์์ฃผ ์ด๊ธฐ ๋ฆด๋ฆฌ์ค์ F# ์ ํ์์ JS ๊ฐ์ฒด์ ๋งค์ฐ ๊ฐ๊น๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ
JSON.parse/stringify
๋ง ์ฌ์ฉํ ์ ์์๊ณ ์ ํ ์ฌํญ์ ์๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์๋ํ ์ ์์์ต๋๋ค. ๋ถํํ๋ Fable์ด ์ข์์ง๋ฉด์ JSON์์ Lists์ DateTimes๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋์ ๋ง์ฝ ๊ทธ๋ค์ด ๊ฐ๋ค๋ฉด ์ฝ๊ฐ์ ํ๋ก์ ํธ ์ฌ์์ฑ์ด ๋ ๊ฒ์ ๋๋ค.Thot.Json ์ฝ๋ ์์ฑ์ด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋์ ๋ํ ๋น๋ ์ฒด์ธ์ ์ผ๋ถ๊ฐ ๋ ์ ์๋ค๋ฉด(net46x์์ - ์, ์ธ์ ๊ฐ๋ ์ ๊ทธ๋ ์ด๋ํด์ผ ํ ๊ฒ์ ๋๋ค), ์๋ง๋ ๊ฐ์ง๋ฅผ ํธ์ถํ๋ ์ผ์ข ์ ์ฌ์ ๋น๋ ์ด๋ฒคํธ(๋ด๊ฐ FSharp.Data.SqlClient์ฉ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ)์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋๋ฉด MS ๋น๋ ์์ /๋์์ด ์ฌ์ ํ ๋ฌธ์ ์ ๋๊น... ์๋ ๋ณต์์ ๋ํ ํจํท์ ์ด๋ป๊ฒ ๋ฉ๋๊น?
_๋ช ๋ ์ ์ Newtonsoft.Json๊ณผ ํค์ด์ก์ต๋๋ค._