JSON์ ๊ฑฐ์ ๋ชจ๋ ์ต์ .NET ์์ฉ ํ๋ก๊ทธ๋จ์ ํ์ ๋ถ๋ถ์ด ๋์์ผ๋ฉฐ ๋ง์ ๊ฒฝ์ฐ XML ์ฌ์ฉ์ ๋ฅ๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ .NET์๋ JSON์ ์ฒ๋ฆฌํ๋ (ํ๋ฅญํ) ๊ธฐ๋ณธ ์ ๊ณต ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋์ ์ฐ๋ฆฌ๋ ๊ณ์ํด์ .NET ์ํ๊ณ๋ฅผ ์ ์ง์ํ๋ [Json.NET]์ ์์กดํ์ต๋๋ค.
์์ผ๋ก JSON ์ง์์ ์ผ๋ถ ๋ณ๊ฒฝํ ๊ณํ์ ๋๋ค.
๊ณ ์ฑ๋ฅ JSON API๊ฐ ํ์ํฉ๋๋ค . Span<T>
๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ํด ๊ณ ๋๋ก ์กฐ์ ๋๊ณ UTF-16 string
์ธ์คํด์ค๋ก ํธ๋์ค์ฝ๋ฉํ ํ์ ์์ด UTF-8์ ์ง์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ก์ด JSON API ์ธํธ๊ฐ ํ์ํฉ๋๋ค. ๋ ๊ฐ์ง ์ธก๋ฉด ๋ชจ๋ ์ฒ๋ฆฌ๋์ด ํต์ฌ ์๊ตฌ ์ฌํญ์ธ ์น ์๋ฒ Kestrel์ ์ค์ํฉ๋๋ค.
ASP.NET Core์์ Json.NET์ ๋ํ ์ข ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค . ์ค๋๋ ASP.NET Core์๋ Json.NET์ ๋ํ ์ข ์์ฑ์ด ์์ต๋๋ค. ์ด๋ ASP.NET Core์ Json.NET ๊ฐ์ ๊ธด๋ฐํ ํตํฉ์ ์ ๊ณตํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ ์ค์ธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๋ค๋ ์๋ฏธ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด๋ ๋ฒ์ ์ด ๊ธฐ๋ณธ ํ๋ซํผ์ ์ํด ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ Json.NET ๊ณ ๊ฐ์๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ Json.NET์ ์์ฃผ ์ ๋ฐ์ดํธ๋๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ์ข ์ข ํน์ ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๊ฑฐ๋ ์ฌ์ง์ด ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ณ ๊ฐ์ด ๊ธฐ๋ณธ ํ๋ซํผ์ ์ค์๋ก ์ค๋จํ ์ ์๋ค๋ ๋๋ ค์ ์์ด ์ฌ์ฉํ ๋ฒ์ ์ ์ ํํ ์ ์๋๋ก ASP.NET Core 3.0์์ Json.NET์ ๋ํ ์ข ์์ฑ์ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ํ ์์ ํ ๋ค๋ฅธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ฌ๊ทธ์ธํ ์๋ ์์ต๋๋ค.
Json.NET์ฉ ASP.NET Core ํตํฉ ํจํค์ง๋ฅผ ์ ๊ณตํฉ๋๋ค . Json.NET์ ๊ธฐ๋ณธ์ ์ผ๋ก .NET์์ JSON ์ฒ๋ฆฌ์ Swiss Army ์นผ์ด ๋์์ต๋๋ค. ๊ณ ๊ฐ์ด JSON ์๊ตฌ ์ฌํญ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ค์ํ ์ต์
๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด AddJsonOptions
ํ์ฅ ๋ฐฉ๋ฒ์ ํตํด JSON ์ง๋ ฌํ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ด ์ค๋๋ ๊ณ ๊ฐ์ด ๋ฐ๊ณ ์๋ Json.NET ์ง์์ ํํํ๊ณ ์ถ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ Json.NET ํตํฉ์ ๊ฐ๋ฐ์๊ฐ ์ ํ์ ์ผ๋ก ์ค์นํ ์ ์๋ NuGet ํจํค์ง๋ก ์ ๊ณตํ์ฌ ํ์ฌ Json.NET์์ ์ป์ ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค. ์ด ์์
ํญ๋ชฉ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ค๋ฅธ ๋น์ฌ์๊ฐ ์ ํํ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ์ฌํ ํตํฉ ํจํค์ง๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ์ฌ๋ฐ๋ฅธ ํ์ฅ ์ง์ ์ด ์๋์ง ํ์ธํ๋ ๊ฒ์
๋๋ค.
์๋๋ ์ด ๊ณํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋๋ค.
.NET Core๊ฐ ์ถ์๋ ์ดํ .NET ์คํ์ ๋ํ ์๊ตฌ ์ฌํญ์ด ์ฝ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ญ์ฌ์ ์ผ๋ก .NET์ ์ ์ฉ์ฑ๊ณผ ํธ์์ฑ์ ์ค์ํ๊ฒ ์ฌ๊ฒผ์ต๋๋ค. .NET Core๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ค์ ์ ๋์๊ณ ๊ณ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด ์๋นํ ํฌ์๋ฅผ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๊ธฐ ์๋ TechEmpower ๋ฒค์น๋งํฌ์์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๊ฐ์ ์ฌํญ ์ด ๊ทธ ์ฆ๊ฑฐ์ ๋๋ค.
.NET Core 2.1์์๋ Span\ ์ด๋ผ๋ ์๋ก์ด ๊ธฐ๋ณธ ์์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
ํ ๋น์ ์ต์ํํ๋ ์์ ์ ์ผ๋ถ๋ ์์ ํ ๊ตฌ๋ฌธ ๋ถ์์ ์ํด UTF-8 ํ์ด๋ก๋๋ฅผ UTF-16 ๋ฌธ์์ด๋ก ํธ๋์ค์ฝ๋ฉํ์ง ์์๋ ๋๋ ๊ฒ์ ๋๋ค. ํ์ฌ Json.NET์ UTF-16์ ์ฝ์ด์ ๊ตฌํํ๊ณ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋คํธ์ํฌ ํ๋กํ ์ฝ(HTTP ํฌํจ)์ด UTF-8์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ JSON ๋ฌธ์๋ฅผ UTF-8๋ก ์ง์ ์ฝ๊ณ ์ธ ์ ์๋ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
.NET Core 2.1 ๋์ Span<T>
๋ฅผ ํ์ฉํ๋๋ก ๊ธฐ์กด API๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ ํ์ด ์์์ ๋ฐฐ์ ์ต๋๋ค. ์คํฌ์ ํ์ฉํ๋ ๋ง์ ์ค๋ฒ๋ก๋๋ฅผ ์ถ๊ฐํ์ง๋ง ํ ๋น์ ์ต์ํํ๊ณ ๋ฒํผ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์์ ํ ์๋ก์ด API๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค. ์ด API๋ System.Buffers
๋ค์์คํ์ด์ค์ ๋
ธ์ถ๋์์ต๋๋ค. ๋ํ System.IO.Pipelines
์๋ ๊ฐ๋ฐ์๊ฐ ์๋ช
๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ ํ์ ์์ด ๋ฒํผ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ๋ ์ถ๊ฐ๋์์ต๋๋ค.
์ด๋ฌํ ๊ฒฝํ์ ๋ฐํ์ผ๋ก JSON ๊ตฌ๋ฌธ ๋ถ์์ ์ง์ํ๋ ค๋ฉด ๊ณ ์ฑ๋ฅ ์๋๋ฆฌ์ค์ ๋ง๊ฒ ํน๋ณํ ์ค๊ณ๋ ์๋ก์ด JSON API ์ธํธ๋ฅผ ๋ ธ์ถํด์ผ ํฉ๋๋ค.
Span<T>
์ฌ์ฉํ์ฌ JSON ๊ตฌ๋ฌธ ๋ถ์ ์ง์์ ํฌํจํ๋๋ก Json.NET์ ์
๋ฐ์ดํธํ ์ ์๋ ์ด์ ๊ฐ ๊ถ๊ธํ ๊ฒ์
๋๋ค. Json.NET์ ์์ฑ์์ธ James Newton-King์ ์ด์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค.
Json.NET์ 10๋ ์ ์ ๋ง๋ค์ด์ก์ผ๋ฉฐ ๊ทธ ์ดํ๋ก ๊ฐ๋ฐ์๊ฐ .NET์์ JSON์ผ๋ก ์์ ํ๋ ๋ฐ ๋์์ด ๋๋ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ๊ทธ ๋น์ Json.NET์ NuGet์์ ๊ฐ์ฅ ๋ง์ด ์์กดํ๊ณ ๋ค์ด๋ก๋ํ ํจํค์ง๊ฐ ๋์์ผ๋ฉฐ .NET์์ JSON ์ง์์ ์ํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ถํํ๋ Json.NET์ ํ๋ถํ ๊ธฐ๋ฅ๊ณผ ์ธ๊ธฐ๋ ํฌ๊ฒ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
Span<T>
์ ๊ฐ์ ์๋ก์ด ๊ธฐ์ ์ ์ง์ํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ฉฐ ์ด์ ์์กดํ๋ ๊ธฐ์กด ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋จ๋ฉ๋๋ค.์์ผ๋ก Json.NET์ ํ์ฌ ์๋ ค์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ฏธ๋์ ์๋ก์ด ํ๋ซํผ์ ์ง์ํ๋ ์์ ๊ณผ ํฌ์๋ฅผ ๊ณ์ํ ๊ฒ์ ๋๋ค. Json.NET์ ํญ์ ๋ค๋ฅธ .NET์ฉ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์กด์ฌํ์ผ๋ฉฐ, ์๋ก์ด JSON API์ ์ฑ๋ฅ์ด ํ์ํ์ง ๋๋ Json.NET์ ๋๊ท๋ชจ ๊ธฐ๋ฅ ์ธํธ๊ฐ ํ์ํ์ง์ ๋ฐ๋ผ ํ๋ ์ด์์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ค๋๋ ASP.NET Core๋ ASP.NET Core ์์ฒด์ ์ข ์์ฑ์ด๋ฏ๋ก Json.NET ์์ด๋ ASP.NET Core๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ์ ๊ฑธ์ณ ์ฐ๋ฆฌ๋ ์ข ์์ฑ์ด ๋ค๋ฅธ ๋ฒ์ ์ Json.NET์ ๋ํ ์์ฒด ์ข ์์ฑ์ ๊ฐ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถฉ๋ํ ์ ์๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค. ๊ณผ๊ฑฐ์๋ ASP.NET์์ Json.NET์ ๊ฐ์ธ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ฐ๋ฐ์๊ฐ Json.NET์ ๊ตฌ์ฑํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๋ฅผ ์์ฑํฉ๋๋ค(์๋ฅผ ๋ค์ด, JSON ๊ฐ์ฒด์ ํ์์ ์ง์ ํ ๋ ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ ์ดํ๊ธฐ ์ํด).
์์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ํ๊ณ ์ถ์ต๋๋ค:
ASP.NET Core์์ Json.NET์ ๋ด๋ถ ์ฌ์ฉ์ ์๋ก์ด ํ๋ซํผ ์ ๊ณต JSON API๋ก ๋ฐ๊ฟ๋๋ค.
Json.NET์ ๊ณต๊ฐ ์ฌ์ฉ์ NuGet์์ ์ป์ ์ ์๋ ์ ํ์ ํตํฉ ํจํค์ง๋ก ์ธ์ํฉ๋๋ค.
๋ฐ๋ผ์ ASP.NET Core์ Json.NET ๊ฐ์ ๊ธฐ์กด ํตํฉ์ ๊ณ์ ์ง์๋์ง๋ง ํ๋ซํผ์์ ๋ณ๋์ ํจํค์ง๋ก ์ด๋ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํตํฉ์ ํ๋ซํผ ์์ ๋์ด๋๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก ๊ณ ๊ฐ์ Json.NET์ ์ดํ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์๋ ์์ต๋๋ค.
๋ํ ๋ ๋ง์ ์ฑ๋ฅ์ด ํ์ํ ๊ณ ๊ฐ์ Json.NET์ด ์ ๊ณตํ๋ ํ๋ถํ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํฌ์ํ์ฌ ์๋ก์ด JSON API๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ ํ๋ฅญํฉ๋๋ค. ์ ๋ json ๊ตฌ๋ฌธ ๋ถ์์ ๋ ๋น ๋ฅด๊ณ ๋ ํ ๋นํ๋ ๋ฐ ์ฐฌ์ฑํฉ๋๋ค.
์๋ก์ด json API๊ฐ ์ง์ํ json.net์ ๊ธฐ๋ฅ์ ๋ํ ๋ ผ์๊ฐ ์์ต๋๊น? ์๋ ๊ฒฝ์ฐ ๋ง์์ ์ค๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ ์์ฑ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ/๋์๋ฌธ์ ๋ณ๊ฒฝ๊ณผ null ์์ฑ ๋ฌด์์ ๋๋ค.
์๋ก์ด json API๊ฐ ์ง์ํ json.net์ ๊ธฐ๋ฅ์ ๋ํ ๋ ผ์๊ฐ ์์ต๋๊น?
์. ์ฐ๋ฆฌ๋ CoreFx๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ฒ์ด๋ผ๋ ์ด๊ธฐ ์๊ฐ ์ ํ์ต๋๋ค. ํ์์ ๊ฐ์ด ๊ณต๊ฐ์ ์ผ๋ก ์ค๊ณ ๋ฐ ๊ตฌ์ถ๋๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ํ ๋ง์ ์ธ๊ธฐ ์๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฑ์์๊ฒ ์ฐ๋ฝํ์ฌ ์ด ๋ฐํ์ ์ด๊ธฐ ์ด์์ ๊ฒํ ํ๋๋ก ์ด๋ํ์ต๋๋ค. ์ ํฌ๋ง์ ์ฐ๋ฆฌ๊ฐ ํ๋ซํผ์ ์ํ ๊ฒฌ๊ณ ํ JSON ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ๋ ฅํ๋ ๋์์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ฉํ ์ ์๋๋ก ๊ทธ ์์ ์์ฝ์์คํ (์: ASP.NET Core)์ ํ๋ฌ๊ทธํ์ผ๋ก ์ ์งํ๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ตญ ์๋น์๋ง๋ค ๋ชฉํ๊ฐ ๋ค๋ฅด๊ณ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ฌ๊ทธ์ธํ ์ ์๋ค๋ ๊ฒ์ ์ฑ์ ๊ฐ์ฅ ์ ํฉํ ๋น์ฉ/ํํ์ด ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ํํ ๋ ์ต๋ํ์ ์ ์ฐ์ฑ์ ์ป์ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์๋ ํ์ธ์ @terrajobst์ ๋๋ค. ์ JSON์ netstandard API ํ๋ฉด์ผ๋ก ํ์๋ฉ๋๊น, ์๋๋ฉด ์ง๊ธ ๋น์ฅ Core์ ํตํฉ๋ฉ๋๊น?
์๋ ํ์ธ์ @terrajobst์ ๋๋ค. ์ JSON์ netstandard API ํ๋ฉด์ผ๋ก ํ์๋ฉ๋๊น, ์๋๋ฉด ์ง๊ธ ๋น์ฅ Core์ ํตํฉ๋ฉ๋๊น?
์, ๋ฌธ์ ๋ ์ด๋ค ๋ฆด๋ฆฌ์ค ํธ๋ ์ธ์ ์ก์ ์ ์๋๋์ ๋๋ค. 2.1์ ๋๋ฌด ์ด๋ฅด๋ค.
๋ฐ๋ผ์ ํ๋ ์์ํฌ์ ๊ตฌ์ด JSON ๊ตฌ๋ฌธ ๋ถ์ ๋นํธ๋ v3.0์ด RTM์ผ๋ก ์ด๋ํ๊ฑฐ๋ ASP.NET Core์ ํตํฉ API๋ง ์๋ฃ๋ ๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ณํ๋์ด ์์ต๋๋ค(๋จ ํ๋์ ๊ตฌํ - JSON.NET์ผ๋ก). ๋์ค์ ๋ ์ง?
3.0์ ๋ํ ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Stream
๊ธฐ๋ฐ ๋ฆฌ๋/๋ผ์ดํฐ, ์๋ฆฌ์ผ๋ผ์ด์ .3.0์ ASP.NET์ฉ ํ ํ๋ฆฟ์ด ๋ฌด์์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๊ฐ๋ฐฉํ ์ง๋ฌธ์ด ์์ต๋๋ค. 3.0์์ ์ ๊ณตํ ์ ์๋ ์ถฉ์ค๋์ ๋ฐ๋ผ Json.NET ํตํฉ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชฉํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ๊ฒ๋ค์๋ง ์์กดํ๊ธฐ์ ์ถฉ๋ถํ ์ถฉ์ค๋์ ํจ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๐
๊ทธ๋ฆฌ๊ณ ๋ช๊ฐ์ง ์ถ๊ฐ ์ง๋ฌธ!
ํตํฉ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฒด ASP.NET Core ํ์ดํ๋ผ์ธ ์ ์ฒด์์ ์ฌ์ฉ๋ฉ๋๊น, ์๋๋ฉด ์ผ๋ถ ์์น์์๋ง ์ฌ์ฉ๋ฉ๋๊น?
๋๋ Kestrel์ด ํญ์ ๋ด๋ถ ๋ฆฌ๋/๋ผ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
API ์ธ์ฒด ๊ณตํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์๋ก์ด ํ์๊ฐ appSettings.json
์ ๊ฐ์ ๋ชจ๋ ๋ด์ฅ JSON ํญ๋ชฉ์ ์ฌ์ฉ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฃผ์ ์ง์์ ์กฐ๊ธฐ์ ์์ฒญํ ์ ์์ต๋๊น?
๊ฐ์ฌ ํด์.
์ด๊ฒ์ ๋ฉ์ง ์์์ ๋๋ค! ๋น ๋ฅธ ์ง๋ฌธ: ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ค ํจํค์ง์ ์์กดํฉ๋๊น?
์์ฐ ๊ณ ๊ฐ์ด ํ ์คํธํ ํ ์ ์ฌ๋ฐ๋ช ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Json.Net์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์คํ ์์ค์ด๋ฏ๋ก PR์ ๋ณด๋ด์ญ์์ค.
Json.NET์ ๋ฌธ์ ๋ Microsoft์ ์์ ๊ฐ ์๋๋ฏ๋ก ๊ต์ฒดํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์, ํ์ง๋ง ์ด๋ฏธ System.Runtime.Serialization์ DataContractJsonSerializer๋ผ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๊น, ์๋๋ฉด ์๋ก์ด API, DIY๋ฅผ ์ฝ๋ฉํ๋ ๊ฒ์ด ๋๋ฌด ์ฌ๋ฏธ์์ด์ ํผํ ์ ์์ต๋๊น?
๋ด๊ฐ ์ด์ ๋ง์กฑํ์ง ์๋ ์ด์ ๋ Json.Net์ด F# Discriminated Unions์ ๊ฐ์ ์ด๋ฏธ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํน๋ณํ ์ข์ง๋ ์์ง๋ง, ๊ฐ๋ฐ์๊ฐ ์ด ์ ์๋ ์์ค์ ๋๋ค. ๋์ ์ API๋ ์ผ๋ฐ์ ์ผ๋ก ASP.NET ์น ์ฌ์ดํธ์ ์ฌ์ฉ ์ฌ๋ก ์ด์ธ์ ๊ฒ์ ์์ด๋ฒ๋ฆฝ๋๋ค.
@markrendle ์ฃผ์์ ํ์ฉํ๋ JsonReader(์งํ ์ค์ธ ์์ )์ ์ตํธ์ธ ์ค์ ์ด ์์ต๋๋ค. ๊ตฌ์ฑ ์์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ์ค์ ์ ํ์ฑํํฉ๋๋ค.
@Thorium ์ค์ ๋ก OP๋ฅผ ์ฝ์์ต๋๊น? JSON.NET์ด ์๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ฉฐ JSON.NET์ ์ถ๊ฐ ๊ธฐ๋ฅ ํจํค์ง๋ฅผ ํตํด ๊ณ์ ๊ณต์์ ์ผ๋ก ์ง์๋ฉ๋๋ค.
@JamesNK ๐
@Thorium Json.NET์ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. ๋น์ ์ ์๋ฌด๊ฒ๋ ์์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋จ์ํ๊ณ ๊ณ ์ฑ๋ฅ ์๋๋ฆฌ์ค๋ฅผ ์ํ ๋ ๋ค๋ฅธ ์ต์ ์ ๋๋ค.
@Thorium Json.NET์ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. ๋น์ ์ ์๋ฌด๊ฒ๋ ์์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋จ์ํ๊ณ ๊ณ ์ฑ๋ฅ ์๋๋ฆฌ์ค๋ฅผ ์ํ ๋ ๋ค๋ฅธ ์ต์ ์ ๋๋ค.
Json์ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋๋ก ์ด๋ป๊ฒ ์์ฑ๋ฉ๋๊น?
์๋ฅผ ๋ค์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ Json.NET์ ์ฌ์ฉํ๋ SignalR์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด์ ๋ด ์๋ฒ์ ํ์ฌ SignalR ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฅด๊ฒ ์ง๋ ฌํํ๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ์๋ก์ด Azure Signalr Service(๋ฐฑํ๋ ์ธ) ๋ฌธ์ ์ ์ธ์ฐ์ง ์๋๋ก ๋ด F# ์๋ณ ๊ณต์ฉ์ฒด๊ฐ ์ ์ฌํ ๊ตฌ์กฐ๋ก ์ง๋ ฌํ๋ฉ๋๊น?
๋ค๋ฅธ ์ฌ๋๋ค์ด ์ API๋ฅผ ๋นจ๋ฆฌ ์ ํํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. @AzureCosmosDB๋ฅผ ๋ฐ๋ผ๋ณด๋ฉฐ ;-)
JObject์ ๊ฐ์ ํด๋์ค์ ๋์ ์ง์์ ํฌํจํ ๊ณํ์ ๋๊น? ์๋๋ฉด ์ด ๊ธฐ๋ฅ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๊น?
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๊ฒ์ ์๊ฐ์ ์ป๋ ์ ๋ง ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
DataContractJsonSerializer
์ ์ด ์๋ก์ด ๋ฆฌ๋/๋ผ์ดํฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๊น?
๋ง์ ์ธ๊ธฐ ์๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฑ์์๊ฒ ์ฐ๋ฝํ์ฌ ์ด ๋ฐํ์ ์ด๊ธฐ ์ด์์ ๊ฒํ ํ๋๋ก ์ด๋ํ์ต๋๋ค. ์ ํฌ๋ง์ ์ฐ๋ฆฌ๊ฐ ํ๋ซํผ์ ์ํ ๊ฒฌ๊ณ ํ JSON ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ๋ ฅํ๋ ๋์์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ฉํ ์ ์๋๋ก ๊ทธ ์์ ์์ฝ์์คํ (์: ASP.NET Core)์ ํ๋ฌ๊ทธํ์ผ๋ก ์ ์งํ๋ ๊ฒ์ ๋๋ค.
JSON.NET์ ์ด์ด ๋ ๋ฒ์งธ๋ก ์ธ๊ธฐ ์๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ServiceStack.Text ๊ฐ ์ด๋ฏธ ๋ฆฌํฉํ ๋ง๋์ด Span์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์ด์ ๊ฐ ์๋์?
MIT ๋ผ์ด์ ์ค ๊ณ ์ฑ๋ฅ https://github.com/neuecc/Utf8Json์ ๊ฒํ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ํ์คํ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ฒ์ ๋๋ค... ๋ฉ์ธ ํด๋์ค ์ด๋ฆ์ ๋ํ ์ ์ ์์ " Json "์ ์ฌ์ฉํ์ญ์์ค.
@terrajobst ์ธ์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋ ์ง ๊ถ๊ธ
JSON.Net์ด ์ถ์ํ๊ฐ ์๋ ์ง์ ์ ์ธ ์ข ์์ฑ์ผ๋ก ์ถ๊ฐ๋ ์ด์ ๊ฐ ํญ์ ๊ถ๊ธํ์ต๋๋ค(.Net ์ํ๊ณ๋ฅผ ์ํ ์ฌ์ค์์ JSON ํจํค์ง๋ผ๊ณ ์๊ฐํ๋๋ผ๋).
๊ทธ๋ฌ๋ JSON ์ ์ฉ์ ๋ํ ์ถ์ํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ ๋น์ ์ ๋ฐ์ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Microsoft.Extensions.Serialization
ํํ์ Orleans IExternalSerializer ์ ๊ฐ์ _serializer_ ์ถ์ํ๊ฐ ๋ ํจ๊ณผ์ ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค...
make๊ฐ JSON ์ ์ฉ์ธ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น? ์ฌ๋๋ค์ด ๋ค๋ฅธ ์ ํ์ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋ด ๋๋ค...
@galvesribeiro IOutputFormatter
/ IInputFormatter
?
@yaakov-h๋ ๊ทธ ์ฌ์ค์ ๋ชฐ๋์ต๋๋ค... ๊ทธ๋ ์ฃ ?
์๊ฒ ์ต๋๋ค... ์ด์ ์ดํด๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด _new_ JSON ์ ์ฉ ์ถ์ํ๋ ์ด๋์์ ์๋ํ ๊น์?
์ด ์ฌ์
์ ์์ํ๊ธฐ๋ก ํ ๊ฒฐ์ ์ System.String(UTF-16 String)์ ๋นํจ์จ์ฑ์ ๋ํ ์ฆ๊ฑฐ์ด๊ธฐ๋ ํฉ๋๋ค.
asp.net๊ณผ json ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๋ชจ๋ json ์ฒ๋ฆฌ๋ฅผ ์ถ์ํํ๋ ์๋ก์ด JSON ํํฌ๋ utf-8 ๋ฌธ์์ด BaseType์ ๋ง๋๋ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋ฉด ํจ์ฌ ๋ ์ข์ ๋ณด์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
--> System.Utf8String ์์ฑ
์... @migueldeicaza ๊ฐ ์ผ๋ง ์ ์ ์ธ์ ๊ฐ ๊ทธ๊ฐ .Net์์ utf8
๋ฌธ์์ด์ ์ฌ์ฉํ๊ฒ ํ ๊ฒ์ด๋ผ๊ณ ๋งํ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค ๐
@jges42 @galvesribeiro Utf8String ์ถ๊ฐ ์ ์์ https://github.com/dotnet/corefx/issues/30503์ ๋๋ค. .Net Core 3.0์๋ ๊ณํ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ์๋ก์ด JSON API์๋ Utf8String
๋ฐ char
/ string
๋ชจ๋์ ๋ํ ์ ์ฉ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๊น? ๋์ ํธ๋์ค์ฝ๋ฉํด์ผ ํฉ๋๊น? (๊ฑฐ์ ์๋ฌด ๊ฒ๋ string
์ ๊ธฐ๋ณธ UCS-2 UTF-16์ด ์๋๋ฉฐ ์ฌ์ ํ ์กฐ์ /์ค๋ช
๋์ด์ผ ํ๋ฏ๋ก ์์ฒญ๋ ๋น์ฉ์ด ํ์ํ์ง๋ ์์ต๋๋ค. API ํ๋ฉด.Kestrel์ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ด๋ ๊ฒ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ๋์์ธ์ด Kestrel๋ณด๋ค ๋ ๋ง์ ํด๋ผ์ด์ธํธ๋ฅผ ๊ณ ๋ คํ๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ์
๋๋ค.)
@galvesribeiro
์ฌ์ค ์ข์ ์ง์ ์ ํ์ ๊ฒ ๊ฐ์์. ํจ์จ์ ์ธ ์ง๋ ฌํ ํ๋ ์์ํฌ์ ํจ์จ์ ์ธ Json ๋์ฝ๋/์ธ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ ๊ฐ์ง ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌ์กฐ์ฒด๋ฅผ ์ง๋ ฌํ ๊ฐ๋ฅ์ผ๋ก ํ์ํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง Json ์ง๋ ฌํ์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๋ค.
Rust์ Serde ํ๋ก์ ํธ๋ ์ค์ ๋ก ๋ฌธ์ ๋ฅผ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถํ ํ์ฌ ์ข์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ ํ์ ์๋์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ๊ตฌํํ๊ฑฐ๋ ํด๋น ํน์ฑ์ ๊ตฌํํ๋ ๋ฐ ํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋งคํฌ๋ก(์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ ํํ๋ก ๋ณผ ์ ์์)๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ์ ํ์ ํด๋น ํน์ฑ์ ๊ตฌํํ์ง ์๋ ์์ ์ ํ์ด ํฌํจ๋์ด ์์ผ๋ฉด ์ปดํ์ผ ์์๋ ๊ฒฝ๊ณ ํฉ๋๋ค. ์ง์๋๋ ํ์์ ๋ํด ์ผ๋ถ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ (์ญ)์ง๋ ฌํํ ์ ์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์ผ๋ก ์ข์ ๊ฐ๋ ์ ๋๋ค. ํ์์ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
Serde์ ๋ฐฉ์์ด C#์์ ๋ชจ๋ ์๋ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ผ๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ค์ํ ์ ์๋ ์ ํ๋ณ ํน์ฑ์ ์ค์ ๋ก ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ํด ์ํํด์ผ ํ ์์ ์ด ์์ต๋๋ค. ๋ํ ์ผ๋ถ ํ๋ก์ ํธ(WASM)์์๋ AoT Compilation์ด ๋งค์ฐ ์ค์ํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด It๊ณผ๋ ์ ์๋ํด์ผ ํฉ๋๋ค.
๋ค์์ Serde ๋ฌธ์์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ์ฌ ๋ ๋ช
ํํ๊ฒ ํฉ๋๋ค(๊ฐ๋
์ ๋ณด๋ ค๋ฉด ๋งจ ์๋์ 4๊ฐ์ง ํน์ฑ์ ํด๋ฆญํ์ญ์์ค).
https://docs.serde.rs
@mythz ServiceStack.Text์ ๋ผ์ด์ ์ค๋ ์ผ๋ถ FOSS ์์ธ๊ฐ ์๋ AGPL์ ๋๋ค. ๋ํ ๋ง์ดํฌ๋ก์ํํธ ์ง์์ด ๋ง์ง๊ธฐ๊น์ง ๋ฒ๋ฌดํ์ ํ๊ฐ๊ฐ ํ์ํ๊ณ , ์์ค๋ฅผ ๋ณธ ์ง์์ ๋ค๋ฅธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ด๋ จ ๊ธฐ์ ์์ ์ด ๊ธ์ง๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@poizan42 ServiceStack.Text๋ OSS์ ๋น๊ณต๊ฐ ์์ค ์์ฉ ํ๋ก์ ํธ ๋ชจ๋์์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ OSS/์์ ์ฉ ๋ผ์ด์ ์ค๊ฐ ์๋ ์ด์ค ๋ผ์ด์ ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ MS๊ฐ ์์ฒด ๊ตฌํ์ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฏ๋ก ์์ค ์ฝ๋ ๋ผ์ด์ ์ค๋ ๊ด๋ จ์ด ์์ต๋๋ค.
์ฃผ์ฅ์ MS๊ฐ "ํ๋ฌ๊ทธ ๊ฐ๋ฅ" JSON ์ง๋ ฌ ๋ณํ๊ธฐ API๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด "์ํ๊ณ"์ ํ๋ ฅํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. JSON.NET ๋ค์์ผ๋ก ๊ฐ์ฅ ์ธ๊ธฐ ์๋ JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ MS ์ธ๋ถ์ ๋ ๋ฆฝ์ ์ธ ๊ฑด๊ฐํ ์ปค๋ฎค๋ํฐ ์น ํ๋ ์์ํฌ๋ ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ฃผ๋ก ์ํฅ์ ๋ฐ๋ "์ํ๊ณ"์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋์ง ์์ต๋๋ค. ๊ทธ๋ค์ด ๋งํ๋ "์ํ๊ณ"๊ฐ ๋ฌด์์ธ์ง, ์ ์ฐ๋ฆฌ๊ฐ ์ ์ธ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์ผ๋ง๋ ๋ง์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ ์ธ๋๋์ง ๊ถ๊ธํฉ๋๋ค. "์ํ๊ณ"์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋์ง ์์ต๋๋ค.
๋๋ ์ด ๋ชจ๋ ๋ถ๋
ธ๋ฅผ ์ดํดํ ์ ์๋ค. Asp.net์ json.net์ ํน์ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ์ต๋๋ค. ์ํ๋ JSON ํ์๋ฅผ ์ ํํ๊ฑฐ๋ ํผํฉํ ์ ์๋๋ก ๋ณ๊ฒฝํ๊ณ ์์ผ๋ฉฐ ๊ธฐ๋ณธ OOB๊ฐ ์์ต๋๋ค. ServiceStack์ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ๋ง์กฑํด์ผ ํ๋ฉฐ ์ด ๊ฐ๋ฐ์ ๋ชจ๋ํฐ๋งํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด๋ ์ข์ ์ปค๋ฎค๋ํฐ ์ ์ ์ ์ก์ฑํ๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋ ๋ฐฉ๋ฒ์ด ๊ฐ๊ณผ๋์๋ค๋ ๊ฒ์ ๋ํด ๋ถํํ๊ธฐ ๋ณด๋ค๋ ์ด ๊ฐ๋ฐ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ง์ .net ํ์์ ์๊ณ ์์ผ๋ฉฐ ๊ทธ๋ค์ด ์
์๋ฅผ ํ์ ๊ฒ์ด ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค. ๊ทธ๋ค์ ๋ชจ๋ OSS์ ์ปค๋ฎค๋ํฐ ํ๋์ ํฐ ์ง์ง์์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก GPL ํ์ ๋ผ์ด์ ์ค๋ ๋์๊ฒ ํฐ ์๋ ์๋์ค์
๋๋ค. ๋์ ๋ด ๊ณ ๊ฐ์ ์ํ Apache ๋๋ MIT ๋๋ ์ฐ๋ฆฌ๋ ๊ณ์ ์งํํ ๊ฒ์
๋๋ค. ์ ๋นํ ์ด์ค ๋ผ์ด์ผ์ค๊ฐ ์์ต๋๋ค.
Asp.net์ json.net์ ํน์ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ์ต๋๋ค.
์๋์. ์ด๋์?
๋๋ ์ด ๋ชจ๋ ๋ถ๋ ธ๋ฅผ ์ดํดํ ์ ์๋ค.
ํ๊ฒฌ!
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ JSON.Net์ ์ฌ์ฉํ์ง ์๊ธฐ ์ํด ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋ ๋ง์นจ๋ด ์ฐ๋ฆฌ๊ฐ ์ ํํ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๋ฌ๋ ASP.Net์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ๋ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ทธ๊ฒ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
(๋ป๋ปํ ํ๋ฌ๊ทธ: https://github.com/gregsdennis/Manatee.Json)
@dotMorten
๋๋ ์ด ๋ชจ๋ ๋ถ๋ ธ๋ฅผ ์ดํดํ ์ ์๋ค.
๋ด ๋๊ธ์ ์ฝ์ง ์์๊ฑฐ๋ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ ์ ์ด์ผ๊ธฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋์ ๋ด ์๊ฒฌ์ ์ง์ ์๋ตํ์ญ์์ค(์: ์ธ์ฉ ๊ธฐ๋ฅ ์ฌ์ฉ).
์ํ๋ JSON ํ์๋ฅผ ์ ํํ๊ฑฐ๋ ํผํฉํ ์ ์๋๋ก ๋ณ๊ฒฝ ์ค์ ๋๋ค.
๋ฐ๋ผ์ ๋ง๋ฒ์ "ํผํฉ"๊ณผ ๊ฐ์ด ๊ธฐ์กด .NET ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์ง์ ์ฐ๊ฒฐ/์ถ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ์ต์ ์ API ๋ฐ ์ฐ๊ฒฐ ์ต์ ์ ์๋์ผ๋ก ์ ํํ๊ณ ์์ด์ด ํ์์ด ์ ํํ ์ผ์นํ๋ ๋ด๋ถ ์ฌ์ฉ์ ์ง์ ์ต์ ์ ํผํฉํ ์ ์์ต๋๋ค. ๋์ผํ๊ณ ๋ชจ๋ ๊ฒ์ด ๋ชจ๋ ์ง๋ ฌ ๋ณํ๊ธฐ์์ ์๋ํฉ๋๊น? ์ด ๊ฒฝ์ฐ API๊ฐ ๊ตณ์ด์ง๊ธฐ ์ ์ ํ์ ์ด๋ ํตํฉ ํ ์คํธ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋๋ Serializer ๊ตฌํ์ ๋ค์ํ ์ฐจ์ด์ ๊ณผ ์๊ฒฌ์ผ๋ก ๋ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ์ง ์๊ณ ๋ชจ๋ ์ฌ์ฉ์ ์ง์ ์ต์ ์ด ์ ํํ๊ฒ ๊ตฌํ๋์ง ์์ผ๋ฉฐ ์ ์ ํ์์ด ๋์ผํ์ง ์๊ณ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ๊ตฌํ ๊ฐ์ ์๋ฒฝํ ์ํธ ์ด์ฉ์ฑ. ๋น์ ์ด ๊ฐ๊ณผํ๊ณ ์๋ "ํ๋ฌ๊ทธ ๊ฐ๋ฅ์ฑ"์ ์ฐ๋ฆฌ๊ฐ ์ผ๋ง๋ ๋ง์ ์ฌ์์ฑ์ ํด์ผ ํ๋์ง์ ๊ธฐ์กด ๊ตฌํ๊ณผ ์ด ์๋ก์ด ๊ตฌํ์ ์ง์ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค.
ServiceStack์ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์กฑํด์ผ ํ๋ฉฐ ์ด ๊ฐ๋ฐ์ ๋ชจ๋ํฐ๋งํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ ํ ๊ธฐํ๊ฐ ์ฃผ์ด์ง์ง ์์์ง๋ง(๋๋ ์ฌ์ ํ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์๊ณ ์์), ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ๊ฐ์ ๊ฐ์ ์ ํ๊ฐํ๊ธฐ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ, ์ํธ ์ด์ฉ์ฑ ๋ฐ ํธํ์ฑ์ ํ๊ฐํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด์ฉ๋ฉด ๊ทธ๊ฒ์ ํ๋ฅญํ๊ณ ๋ ๊ตฌํ์ ๋ชจ๋ ์ง์ํ๋ ๊ฒ์ด ์ฌ์ธ ๊ฒ์ด์ง๋ง ๊ฒฝํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ง๋ ฌ ๋ณํ๊ธฐ ๊ตฌํ๊ณผ์ ์ํธ ์ด์ฉ์ ๋นํธํ์ฑ ๋ฐ ์ฝ๋ ์ผ์ด์ค์ ๋ค๋ฅธ ์ง๋ ฌํ๋ณ ๊ตฌํ ๋ฐ ๊ธฐ๋ฅ์ ๋ํ ์์กด์ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค. ๋ด ์์ธก์ JSON.NET๊ณผ ๊ธฐ๋ณธ impl ๊ฐ์ ์ํธ ์ด์ฉ์ฑ์ด ๊ทธ๋ค์ ๋์์ธ ๋ชฉํ์ด๊ณ ํ ์คํธ ๋์์ด์ง๋ง ๋ค๋ฅธ ์ง๋ ฌ ๋ณํ๊ธฐ๋ ์ด์ด ์ข์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋ฅญํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๊ฐ๊ณผ๋์ด ์๋์ง์ ๋ํด ๋ถํํ๊ธฐ๋ณด๋ค๋ ์ข์ ๊ณต๋์ฒด ์ ์ ์ ์ก์ฑํ๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ์์ต๋๋ค.
๋๋ ๊ทธ๋ค์ด "์ํ๊ณ"์ ํ๋ ฅํ์ฌ ์ด๊ฒ์ ๊ฐ๋ฐํ๋ค๋ โโ๊ทธ๋ค์ ์ฃผ์ฅ์ ๋์ ํ๊ณ ์์ต๋๋ค. .NET์ "๊ธฐ๋ณธ" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฒ๋ค๋ก ๋ฌถ์ ๋๋ง๋ค ๊ธฐ์กด ์ํ๊ณ๋ฅผ ์ฃฝ์ด๋ ์ญ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ(๊ธฐ๋ณธ๊ฐ์ ๋ฒ๋ค๋ก ๋ฌถ๋ ๊ฒ์ด ์ํ๊ณ์ ๋์์ด ๋์๋ ๋๋ฅผ ํ์ํ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๋ API๊ฐ ๊ณ ์ ๋๊ธฐ ์ ์ ์ก์ธ์คํ๊ณ ์ ๋ ฅํ ์ ์๊ธฐ๋ฅผ ์ํ๋ ๋ชจ๋ ๋ฆด๋ฆฌ์ค์ ์ํํ ํตํฉ์ ๊ฐ๋ฐํด์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ด์ฐฎ์ต๋๋ค. ๊ธฐ์กด ๋ฐ ํฅํ ๊ตฌํ์ ์ง์ํด์ผ ํ๋ ๊ธฐ์กด ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ ๋๋ค. ๋น์ ์ ๊ฐ์ ์ ์ ์งํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ด์ ๊ฐ์ ํ๊ดด์ ์ธ ๋ณํ๋ฅผ ํก์ํ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ๋๊ปด์ผ ํ๋์ง ์๋ ค์ฃผ์ญ์์ค.
๊ธฐ๋ณธ๊ฐ์ ๋ฒ๋ค๋ก ๋ฌถ๋ ๊ฒ์ด ์ํ๊ณ์ ๋์์ด ๋์๋ ๋๋ฅผ ํ์ํ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค.
์ค ์ด์!
(๋๋จธ์ง๋ ๋๋ถ๋ถ ๋์ ์๊ฒฌ์ ๋์ํฉ๋๋ค)
@mythz ์ค๋ ๋ค๋ฅธ ํ์ฌ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ ์์ํฌ์ ๋ฒ๋ค๋ก
๋ด ์์ธก์ JSON.NET๊ณผ ๊ธฐ๋ณธ impl ๊ฐ์ ์ํธ ์ด์ฉ์ฑ์ด ๊ทธ๋ค์ ๋์์ธ ๋ชฉํ์ด๊ณ ํ ์คํธ ๋์์ด์ง๋ง ๋ค๋ฅธ ์ง๋ ฌ ๋ณํ๊ธฐ๋ ์ด์ด ์ข์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋ฅญํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฐฐ์กํ ์ ํ์ JSON.NET์ด ์ง์ํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ด๋ฏธ ๋ง์๋๋ฆด ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ ์ด๋ฏธ ์ฌ์ค์ด ์๋๋ฉฐ ์ค์ ๋ก ์ผ๋ถ ๊ฒฝ์ฐ(์ฑ๋ฅ ๋ฐ ๋ฒ์ ์ด์ ๋๋ฌธ์) ๊ธฐ๋ฅ์ด ์ ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฅ์ฑ์ ์ค๋๋ ๋๋ถ๋ถ ์ด๋ฏธ ์กด์ฌํ๋ฉฐ ๋ชจ๋ ๊ณณ์ ๊ธฐ๋ณธ JSON.NET ๊ตฌํ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ณธ๊ฐ์ ๋์ ์ JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค...
@abatishchev
๊ธฐ๋ณธ ํ๋ ์์ํฌ(๋๋ ํ๋ก์ ํธ)์ ๊ธฐ๋ณธ ๊ตฌํ์ ํฌํจํ๊ฑฐ๋ ์ฑํํ๋ ๊ฒ์ด ๊ธฐ์กด ์ฃผ๋ณ ์ํ๊ณ์ ๋์์ด ๋ ๋๋ ์ธ์ ์ธ์ง ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค. NuGet, MVC, ORM, ๋จ์ ํ ์คํ , ์น API ๋ฑ๊ณผ ๊ฐ์ด ๋ฒ๋ค๋ก ์ ๊ณต๋๋ ๊ฒ์ ๋ณผ ๋๋ง๋ค ํด๋ก์ด ์ํฅ์ ๋ฏธ์น๊ณ ๊ทธ ๊ณต๊ฐ ๋ด์์ ๊ฒฝ์ํ๊ธฐ ์ํ ์ฐ์์ ๋๊ธฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ทจํ์ต๋๋ค.
ASP.NET Ajax์ ๊ฐ์ ๊ฒฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฒฝ์์ ์คํจํ์ฌ ๊ฒฐ๊ตญ ํฌ๊ธฐํ๊ณ jQuery๋ฅผ ์ฑํํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ฐธ๊ณ : ์ด๊ฒ์ ๋ช ๋ ํ .NET์ ๋ฐ์ ํ๊ฒ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ด์ฐฐํ ๊ฒ์ ๋๋ค. ์๊ฐ ์์ ์ ์์ผ๋ฉฐ ์ผ๋ถ์ ๋ํด ์๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด ๊ด์ ์์ ๋ณด๋ฉด MS ๊ธฐ๋ณธ๊ฐ์ ์ํฅ์ ๊ธฐ์กด ๊ธฐ๋ฅ ์ํ๊ณ์ ํด๋ก์ด ์ํฅ์ ๋ฏธ์น๊ณ ์์ต๋๋ค.
@mythz ๋ Microsoft์ ๊ธฐ๋ณธ ์๋ฃจ์ ์ ํตํด ์ฌ์ฉ์๊ฐ ์ป๋ ์ด์ ๊ณผ ๋์ฒด ์๋ฃจ์ ์์ฑ์์ ์ด์ ์ด ๋ค๋ฆ ๋๋ค. EF๋ .NET ์ธ๊ณ์์ ์ต๊ณ ์ ORM์ด๊ณ MSTest๋ ๋น์ NUnit๋ณด๋ค ๋์์ต๋๋ค. ๋ด ์๊ฐ์๋.
๊ทธ๋ฌ๋ ๋ฒ๋ํ์ง ๋ง๊ณ ์ฃผ์ ์ ์ถฉ์คํฉ์๋ค. ๊ฑด๋ฐฐ!
@davidfowl ์ด๊ฒ์ ๊ธฐ๋ณธ๊ฐ์ ๋์ ์ JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค...
๊ธฐ๋ณธ ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์๊ณ ๊ตฌํ์ ๋ค์ด๋ก๋ํด์ผ ํ๋ค๊ณ ์ ์ํ๊ณ ์ถ์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ํ๋ ์์ํฌ ๋๋ ์ผ๋ถ ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํ์ฌ์ ๊ฒฝ์ฐ)์ ์ ์ฉ๋ฉ๋๊น?
๊ธฐ๋ณธ ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์๊ณ ๊ตฌํ์ ๋ค์ด๋ก๋ํด์ผ ํ๋ค๊ณ ์ ์ํ๊ณ ์ถ์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ํ๋ ์์ํฌ ๋๋ ์ผ๋ถ ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํ์ฌ์ ๊ฒฝ์ฐ)์ ์ ์ฉ๋ฉ๋๊น?
๊ฒฝํ์น๊ฐ ํํธ์๊ธฐ ๋๋ฌธ์ ๋ถํฉ๋ฆฌํฉ๋๋ค. ๋ชจ๋ ์ต์ ํ๋ซํผ์๋ JSON์ด ๋ด์ฅ๋์ด ์์ต๋๋ค.
@davidfowl ์์ง ์ถ์๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ
์ฐ๋ฆฌ๊ฐ ๋ฐฐ์กํ ์ ํ์ JSON.NET์ด ์ง์ํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ด๋ฏธ ๋ง์๋๋ฆด ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ ์ด๋ฏธ ์ฌ์ค์ด ์๋๋ฉฐ ์ค์ ๋ก ์ผ๋ถ ๊ฒฝ์ฐ(์ฑ๋ฅ ๋ฐ ๋ฒ์ ์ด์ ๋๋ฌธ์) ๊ธฐ๋ฅ์ด ์ ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
JSON.NET ๊ธฐ๋ฅ์ ํ์ ์งํฉ์ ์ง์ํ ๊ฒ์ผ๋ก ์์ํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด JSON.NET์ด ๊ธฐ๋ณธ ์ ์ ํ์์ ์ง์ํ ๊ฒ์ ๋๊น? (์๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค). ์๋ก์ด impl์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ JSON.NET ์ง๋ ฌํ ํ์์ ์ฑํํ ์์ ์ ๋๊น(์๋ผ๊ณ ๊ฐ์ ).
์ด๋ฅผ ์ํํ๊ฒ ์ง์ํ๋ ค๋ฉด ์ผ๋ง๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๊น? ๊ธฐ์กด ๋์์ ์ง์ํ๊ธฐ ์ํด ์ impl์ ์ฌ์ฉ์ ์ ์๋ฅผ ์ ์ฉํ ์ ์์ต๋๊น? ์ ์ฌ์ฉ์ ์ ์ ๋ชจ๋ธ ๋ฐ API๋ฅผ ์ง์ํ ์ ์์ต๋๊น? ์ง์ํ๋๋ก ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๊น? ๊ธฐ๋ณธ ๊ตฌ์ฑ/์์ด์ด ํ์์ ์ API๊ฐ .NET Core์ .NET Framework๋ฅผ ๋ชจ๋ ์ง์ํ ์ ์์ต๋๋ค.
@mythz ๋๋ ์ด๊ฒ ์ค ์ผ๋ถ๋ฅผ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ์กด์ฌํ๋ API์ ๊ทธ๊ฒ๋ค์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋ ๊ฒ์ธ์ง์ ๋ํด ๋ ผ์ํ๋ ๊ฒ์ด ์ผ๋ง๋๋๋์ง ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ณผ๊น์?
@mythz servicestack ์ ๋ํด ๋ด๊ฐ ๋ณผ ์ ์๋ ์ ์ผํ ์ค์ ๊ด์ฌ์ฌ๋ ์ด ์๋ก์ด API๊ฐ .net ํ๋ ์์ํฌ ํด๋์์์ ์ง์๋์ง ์์ผ๋ฉด servicestack์ด .net ์ฝ์ด์ .net ํด๋์์ ๊ณ ๊ฐ ํจํค์ง๋ก ๋ชจ๋ ์ง์ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ๋ผ .net ํ๋ ์์ํฌ ์ ์ฒด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ๋น์ ์ ๊ด์ฌ์ฌ์ ๋๊น? ๊ตฌ์ฒด์ ์ธ ์๋ก์ ์ฐ๋ คํ์๋ ๋ฐ๊ฐ ๋ช ํํ์ง ์์ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
๋ํ ์ด๊ฒ์ ์ด๊ธฐ ๋จ๊ณ์ ์ ์์ด๋ฉฐ ๋ฌ์ฑํ๋ ค๋ ๋ชฉํ๊ฐ ๋งค์ฐ ์ ๋งํด ๋ณด์ ๋๋ค. ๊ฑด์ค์ ์ธ ๋นํ์ ๋ชจ๋ oss ํ๋ก์ ํธ์ ํญ์ ์ข์ต๋๋ค.
@mythz ๋ Microsoft์ ๊ธฐ๋ณธ ์๋ฃจ์ ์ ํตํด ์ฌ์ฉ์๊ฐ ์ป๋ ์ด์ ๊ณผ ๋์ฒด ์๋ฃจ์ ์์ฑ์์ ์ด์ ์ด ๋ค๋ฆ ๋๋ค.
์ํ๊ณ๋ ์ฃผ๋ณ .NET ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๊ณ/์ปค๋ฎค๋ํฐ(OP์ "์ํ๊ณ"์ด๊ธฐ๋ ํจ)๋ฅผ ์ธ๊ธํ๊ณ ์์ต๋๋ค. ์ด ์ํ๊ณ๋ .NET ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฑด๊ฐํ ์ํ๊ณ์ ์ด์ ์ ๋๋ฆด ์ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ๋ค์ํ ์ต์ ๊ณผ ๋ ๋ง์ ๊ฒฝ์(Python, Java, Node, Ruby, PHP ๋ฑ๊ณผ ๊ฐ์ ๋ ๊ฑด๊ฐํ ์ํ๊ณ์ ํน์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก).
EF๋ .NET ์ธ๊ณ ์ต๊ณ ์ ORM์ ๋๋ค.
EF๊ฐ ์ถ์๋ ์งํ 2012๋ InfoQ ์ธํฐ๋ทฐ ์์ ๋ฐ์ทํ
Entity Framework์์ ORM ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ๋ํ ๊ทธ๋ค์ ์ต๊ทผ ์๋๋ ์ด์ ์ ์ ๋ช ํ๋ ORM NHibernate์ ํ๋ ๋ฒ์ฑํ๋ ์ปค๋ฎค๋ํฐ์๋ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์ณค์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์คํ ์์ค .NET ORM๋ณด๋ค ๋ช ๋ฐฐ ๋๋ฆฌ์ง๋ง EF๋ ๋ค๋ฅธ ๋ชจ๋ ORM์ ํฉ์น ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ค์ด๋ก๋๋ฅผ ์ ์นํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค.
์ด๊ฒ์ ์ฑ๋ฅ์ด ์ด์ ์ต์ฐ์ ์์์ธ .NET Core ์ด์ ์ด์์ง๋ง MS ๊ธฐ๋ณธ๊ฐ์ด ๊ธฐ์กด ์์ฝ์์คํ /์ปค๋ฎค๋ํฐ์ ๋ฏธ์น๋ ํด๋ก์ด ์ํฅ์ ์ญ์ฌ์ ์์ ๋๋ค. IMO MS๊ฐ ๊ธฐ๋ณธ๊ฐ์ ๋์ ํ ๋ ๊ธฐ์กด ์ปค๋ฎค๋ํฐ์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๊ฑฐ์ ๋ฐ์๋ค์ฌ์ง๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์ต๊ทผ์ IdentityServer ๋ฐ AutoMapper์ ๊ฒฝ์ํ๋ ์ถํ ๊ธฐ๋ณธ๊ฐ์์ ๋๋๋ฆฌ๊ธฐ ์ํ ํธ์๋ฐฑ์ด ์์๋ ์ด์ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ MSTest๋ ๋น์ NUnit๋ณด๋ค ๋์์ต๋๋ค.
IMO๋ ๊ฒฐ์ฝ ์์๊ณ (NUnit์ R# ์ง์์ ํญ์ ์ฐ์ํ AFAICR์ด์์ต๋๋ค) Mono์์ ํ๋ซํผ ๊ฐ์ ์คํํ ์ ์๋ค๋ ์ฌ์ค์ Mono(.NET Core ์ด์ )์์ ํ๋ซํผ ๊ฐ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ์ต๋๋ค. ๊ทธ๊ฒ.
๊ทธ๋ฌ๋ ๋ฒ๋ํ์ง ๋ง๊ณ ์ฃผ์ ์ ์ถฉ์คํฉ์๋ค. ๊ฑด๋ฐฐ!
๋๋ ๋ํ ์ด๊ฒ์ ๋ํ ์ด ์ค๋ ๋๋ฅผ ๊ฐ๋ก์ฑ๊ณ ์ถ์ง๋ ์์ง๋ง ๋ด๊ฐ ์ ๋น์ ์ ์์ ์ ๋์ํ์ง ์๋์ง ์ค๋ช ํด์ผ ํ์ต๋๋ค.
์ด์ ๊ด๋ จํ์ฌ ์ด์ JSON.NET๊ณผ ๋ค๋ฅธ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ์ฑ๋ฅ์ด๋ฉฐ ์ด ์๋ก์ด ๊ธฐ๋ณธ ์ง๋ ฌ ๋ณํ๊ธฐ์ ์ด์ ๋ ์ฑ๋ฅ์ ๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด JSON.NET ๊ณต์ ์ ๊ฐ์ฅ ๋์ ๋๋ ์ํฅ์ ๋ฏธ์น ๊ฒ์ผ๋ก ์์๋๋ ๋ฐ๋ฉด ๋์ฒด ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ์ด ๋ ๋น ๋ฅธ impl๊ณผ ํจ๊ป ๋ ์ด์ ์กด์ฌํ์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ ์ด๊ฒ์ด ๊ธฐ์กด(๋์๊ด) ์ํ๊ณ์ ํด๋ก์ด ์ํฅ์ ๋ฏธ์น๋ค๊ณ ๋ด ๋๋ค. IMO JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝํ ์์ฝ์์คํ ์ .NET์ ๋ํด ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง๋ง(๋๋ถ๋ถ์ ์๋น์๊ฐ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ์ต์ ์ ์์ด๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ณผ ์๋ ์์), ๊ทธ๊ฒ ์ ์ฃผ์ ๊ด์ฌ์ฌ๋ ์๋๋๋ค.
@davidfowl @shahid-pk
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ .NET Framework JSON ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ๋งค์ฐ ๋๋ ธ๊ธฐ ๋๋ฌธ์ ServiceStack.Text๋ฅผ ๊ฐ๋ฐํ๋ ์ฃผ๋ ์ด์ ๋ก์ ์ด๊ฒ์ด 8๋ ์ ์ ์กด์ฌํ๋ ๊ฒ์ ์ค์ ๋ก ์ ํธํ์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ฒ์ ๊ฒฐ๊ตญ SS.Text ๋ชจ๋์์ ๊ธฐ๋ฅ ์ฐ๋ฆฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ๋ํ ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ง์ ์ซ์๋ก ํ์ฅ๋์์ต๋๋ค ๋ค๋ฅธ ์ธ์ด ServiceStack ์ง์ง๋ , ๋ค๋ฅธ ServiceStack์์ JSON ์ฌ์ฉ์ ์ ์ ์ต์ ์์ JSON ์ง์ ServiceStack ํ ํ๋ฆฟ ์์ ๋ณตํฉ ํ JSON์ ๋ฉ์ด๋ฆฌ ์ง์ ServiceStack .๋ ๋์ค ๋ฑ
์ด์ ์ ๋ ์ํฅ์ด ๋ฌด์์ธ์ง, ์๋ก์ด API ๋ฐ ํ๋ฌ๊ทธ ๊ฐ๋ฅ์ฑ ์ต์ ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง, ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊ฐ์ ํ ์ ์๋์ง, SS .NET Core Apps์์ JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ก ์ฑํํ ์ ์๋์ง ํ๊ฐํ๋ ๋ฐ ์ง์คํ๊ณ ์์ต๋๋ค. (๋ฌด์์ด ์ค๋จ๋ ๊ฒ์ธ์ง), ServiceStack.Text๊ฐ ์ API๋ฅผ ์ง์ํ ์ ์์ต๋๊น? .NET v4.5๋ฅผ ์ง์ํ ์ ์์ต๋๊น? ๊ธฐ์กด ๋ฐฐํฌ์ ์ ์ ํ์์ ์ง์ํ๋๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๊น? I ์์ง ์ฌ์ฉํ๊ฑฐ๋ ๋ณผ ๊ธฐํ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ๋ํ ์ํฅ์ด๋ ์์ผ๋ก์ ์ ๋ต์ ๋ํด ์ ํ ๋ชจ๋ฆ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ ๊ธฐํ๊ฐ ์๊ธฐ๋ฉด ๋ ๋ง์ ๋ต๋ณ์ ์๊ฒ ๋ ๊ฒ์ด๋ฉฐ API๊ฐ ๋๊ฒฐ๋๊ธฐ ์ ์ ํตํฉ์ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ํ ๊ธฐํ๋ฅผ ๋ถ๋ช ํ ๊ฐ๊ณ ์ถ์ต๋๋ค.
@mythz
์ด๋ฏธ Span API ๋ฅผ ServiceStack.Text - JSON.NET์ ์ด์ด ๋ ๋ฒ์งธ๋ก ์ธ๊ธฐ ์๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ธ๋ ์ด์ ๊ฐ ์๋์?
๋๋ฝ์ ์๋ํ์ง ์์์ต๋๋ค. CoreFxLab ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ผ๋ถ๋ก JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ฒ์ํ๊ณ ์์ ํ์ผ๋ฉฐ ๊ฐ๋ฐ์ ์ค ํ ๋ช ์ด ์์ ์ ์์ ์ ๋ฒค์น๋งํนํ๊ธฐ ์์ํ์ต๋๋ค. NuGet์์ "json"๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๊ฒ์์ด ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ๋ก์ด ์ฒ์์ ์ฑ์์ก๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋น์ ์๊ฒ ์ค๋ง์ค๋ฝ๊ฑฐ๋ ๊ฑฑ์ ์ค๋ฌ์ธ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ฐ๋ฆฌ์ ์ ์ฅ์์ ์ํฉ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ์ญ์์ค. ์ฐ๋ฆฌ ํ์ ํ์ ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ด ๋ฐํ๋ ์ ์ฒด ์ปค๋ฎค๋ํฐ๋ฅผ ์ฐธ์ฌ์ํค๊ธฐ ์ํ ๊ณต๊ฐ ๊ฐ๋ฐ ๋ชจ๋ธ์ ์ผ๋ถ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ ์์ ๊ทธ๋ฃน์ ๋จผ์ ์ฐ๋ฝํ๋ ๊ฒฝํฅ์ด ์๋ ์ ์ผํ ์ด์ ๋ ์ฐ๋ฆฌ์ ๊ณํ๊ณผ ๋ฉ์์ง๊ฐ ์ธ์๊ณผ ๊ณต์ ํ๊ธฐ ์ ์ ํฉ๋ฆฌ์ ์ธ ์์ค์ ์ฌ๋ ค ๊น์๊ณผ ํ์ง์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์์ง ์ต์ข ์ ์ธ ๊ฒ์ ์์ต๋๋ค. ์ถ๊ฐ ํผ๋๋ฐฑ์ ์ ๊ทน์ ์ผ๋ก ์ฐพ๊ณ ์์ต๋๋ค.
์ด๋ค "์ํ๊ณ"๋ฅผ ์ธ๊ธํ๊ณ ์ฌ๊ธฐ์์ "ํจ๊ป ์ผํ๊ธฐ"๋ฅผ ํฌ๋งํ๋์ง ๊ถ๊ธํฉ๋๋ค.
.NET ์์ฝ์์คํ ๋ฐ ํนํ JSON ์ฒ๋ฆฌ์ ๊ด์ฌ์ด ์๋ ๋น์ฌ์.
๋๋ ๋ถ๋ช ํ ์ด๋ฌํ "ํ๋ฌ๊ทธ ๊ฐ๋ฅ" API๊ฐ ์ผ๋ง๋ ํธํ๋๋์ง ๋๋ ์ด๊ฒ์ด ๊ฒฐ๊ตญ ์๋ก์ด MS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑํ ๋ฐ ํตํฉ์ด ๋์ฒดํ๋ ์ํ๊ณ๋ฅผ ์ฃฝ์ด๋ ๋ ๋ค๋ฅธ ์์ญ์ด ๋๋์ง ์ฌ๋ถ์ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ณํ๋ ASP.NET Core ํ์ฅ ์ง์ ์ ๋ชฉ์ ์ ๊ณ ๊ฐ์ด ๊ธฐ๋ณธ ์ ๊ณต JSON ๊ตฌ์ฑ ์์๋ฅผ ์ํ๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ต์ฒดํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ASP.NET์ ํญ์ "๋ฐฐํฐ๋ฆฌ ํฌํจ", ์ฆ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ ํ๊ฒฝ๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ๊ณผ๊ฑฐ์๋ Json.NET์ด์์ผ๋ฉฐ ์์ผ๋ก๋ ํ๋ซํผ์์ ์ ๊ณตํ๋ ๊ตฌ์ฑ ์์์ ๋๋ค. Json.NET์ด ASP.NET์ ์ด๋ ์ ๋ ๊ณ ์ ๋์ด ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ ๊ณํ์ ๋น์ ๊ณผ ๊ฐ์ ์ฌ๋๋ค์๊ฒ ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ ๊ณํ์ ์ด๋ ๋ถ๋ถ์ด ์ํ์ด๋ผ๊ณ ์๊ฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
3.0์ ASP.NET์ฉ ํ ํ๋ฆฟ์ด ๋ฌด์์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๊ฐ๋ฐฉํ ์ง๋ฌธ์ด ์์ต๋๋ค.
ํ ํ๋ฆฟ์ ๋ชจ๋ํํด์ผ ํ ๋ ์๋๊ฐ์? ์๋ฅผ ๋ค์ด vue.js๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์๋ก์ด vue ์ฑ์ ๋ง๋ค๋ฉด ์ํ๋ ๊ฒ์ ์ ํํ ์ ์์ต๋๋ค. ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ฉํ๊ธฐ ์ํด 500๊ฐ์ ํ ํ๋ฆฟ์ ๋ง๋๋ ๋์ asp.net์ ๋ํด ๋น์ทํ ์์ ์ ์ํํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ค์์ JSON.NET์ด ์๋ JSON ์
๋ ฅ/์ถ๋ ฅ ํฌ๋งทํฐ๊ฐ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋๋ .ASP NET Core 2.2์ ๊ธฐ๋ฅ๊ณผ ๋ถ๋ฆฌ๋ ์๋ฃจ์
์ด ์ด๋ป๊ฒ ๋์์ด ๋ ์ ์๋์ง์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์
๋๋ค.
RFC 7807 ํธํ ์ค๋ฅ ์๋ต์ ํ์ฉํ๋ ProblemDetails ๊ธฐ๋ฅ :
https://github.com/aspnet/Mvc/blob/release/2.2/src/Microsoft.AspNetCore.Mvc.Core/ProblemDetails.cs
[JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "instance")]
public string Instance { get; set; }
[JsonExtensionData]
public IDictionary<string, object> Extensions { get; } = new Dictionary<string, object>(StringComparer.Ordinal);
์์ ์ฝ๋๋ ํน์ ๋์ฒด ์์ฑ [JsonExtensionData]
ํฌํจํ์ฌ JSON.NET ํน์ ์์ฑ์ผ๋ก ์ฃผ์ ์ฒ๋ฆฌ๋๋ฉฐ, ๋ชจ๋ ์ ์ ์๋ JSON ์์ฑ์ ์ด ์ฌ์ ์ผ๋ก ์ญ์ง๋ ฌํ๋๊ณ ์ด ์ฌ์ ์ ๋ด์ฉ์ ์ผ๋ฐ JSON ๊ตฌ์กฐ๋ก ์ง๋ ฌํ๋ฉ๋๋ค.
๋ชจ๋ ๋์ฒด JSON ์ ๋ ฅ/์ถ๋ ฅ ํฌ๋งทํฐ๋ ์ด์ ์ด ์ ํ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ(์: ์ด๋ฌํ ์ ํ์ ๋ํด JSON.NET์ผ๋ก ํด๋ฐฑ)์ ์ฐพ์ ์ ์๋๋ก ์ด๋ฌํ JSON.NET ํน์ ์์ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์ด์ JSON์ฉ Input/OutputFormatter๊ฐ 3.0์ ์ง์ํด์ผ ํ๋ ๊ธฐ๋ฅ์ ๋ํ ์ ์ ์๋ ์ฌ์์ด ์๋ ๊ฒฝ์ฐ ์์ ๋ฌธ์ ๋ ์กด์ฌํ์ง ์์ต๋๋ค. ์ฆ ์ด๋ฌํ ์์ฑ์ด Microsoft.Extension... ํจํค์ง ๋ฐ ๋ชจ๋ Custom JSON Formatter์ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํธํ๋๋๋ก ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์๋ ํ, JSON.NET ์์ฑ์ผ๋ก ์ฃผ์์ด ๋ฌ๋ฆฐ ASP.NET Core์๋ "๊ณต์" ์์ค ์ฝ๋์ ๋ช ๊ฐ์ง ์ธ์คํด์ค๋ง ์์ง๋ง JSON.NET ํน์ ์์ฑ์ ์ฌ์ฉํ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณด์์ต๋๋ค(์ผ๋ฐ์ ์ผ๋ก [JsonProperty("name")]
๋ฅผ ํตํ ์์ฑ ์ด๋ฆ
FWIW, ๊ทธ๊ฒ์ด https://github.com/Tornhoof/SpanJson/issues/63 ์ ๊ดํ ๊ฒ์ ๋๋ค.
@terrajobst IMO๊ฐ ๋ด ์ฐ๋ ค ์ฌํญ์ ๋ ๋ช ํํ๊ฒ ์ค๋ช ํ๋ ์ด์ ์๊ฒฌ์ ์ฝ๊ธฐ ์ ์ ๋ต๋ณํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ถ๊ฐ ํผ๋๋ฐฑ์ ์ ๊ทน์ ์ผ๋ก ์ฐพ๊ณ ์์ต๋๋ค.
์ด๋์? API ์ ์/๋ฌธ์๊ฐ ์์ต๋๊น? API๊ฐ ์์ฑ๋์์ต๋๊น? ์ด๋ค ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ฐ๋ฐ ์ค์ ๋๊น?
IMO๊ฐ ๋ด ์ฐ๋ ค ์ฌํญ์ ๋ ๋ช ํํ๊ฒ ์ค๋ช ํ๋ ์ด์ ์๊ฒฌ์ ์ฝ๊ธฐ ์ ์ ๋ต๋ณํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ฝ์์ง๋ง @davidfowl์ด ์ค๋ช ํ๋ฏ์ด ์ฐ๋ฆฌ์๊ฒ ์ค์ฉ์ ์ด์ง ์์ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๋ ๊ฒ์ ๋ฐ๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ์์ ์ ์ฐ๋ฆฌ ๊ณํ์ด ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ, ์ฆ Json.NET์ ์ฌ์ค์ ํ๋ ์์ด์ด๋งํ๋ ๊ฒ์ ๊ฐ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๋ด ์ง๋ฌธ.
์ด๋์? API ์ ์/๋ฌธ์๊ฐ ์์ต๋๊น? API๊ฐ ์์ฑ๋์์ต๋๊น? ์ด๋ค ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ฐ๋ฐ ์ค์ ๋๊น?
์ด ๋ฐํ๋ฅผ ๋จผ์ ๋ฐํํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ .NET Core์์ ์์ง ์ฝ๋ฉ/API ์ค๊ณ๋ฅผ ์๋์ ์ผ๋ก ์ํํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ด ์ด ๋ฐํ๊ฐ ์ ๊ณตํ ๋งฅ๋ฝ์ ์ ๊ณตํ์ง ์๊ณ ์ฐป์์ ์ฝ๋ ๊ฒ์ ์ํ์ง ์์์ต๋๋ค. ์ฆ, ๊ณง API์ ์ฝ๋๋ฅผ ๊ฒ์ํ ์์ ์ด๋ ๊ณ์ ์ง์ผ๋ด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
@terrajobst ๊ฒ์๋ฌผ์ ๋ํ ์ ์ฒด ์ธ์
์์ผ๋ก JSON ์ง์์ ์ผ๋ถ ๋ณ๊ฒฝํ ๊ณํ์ ๋๋ค.
- ์ผ๋ถ ์ฌ์ ์ค๊ณ๊ฐ ์๋ฃ๋์์ต๋๋ค.
๊ณ ์ฑ๋ฅ JSON API๊ฐ ํ์ํฉ๋๋ค.
ASP.NET Core์์ Json.NET์ ๋ํ ์ข ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
Json.NET์ฉ ASP.NET Core ํตํฉ ํจํค์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋ฐฉํฅ์ด ์กํ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. "์ํ๊ณ"์์ ์๊ตฌํ๋ ๋ชจ๋ ๊ฒ์ MS๊ฐ ํ์ค์ ์ผ๋ก ์ค๋ช ํ ์ ์๋ ๋ช ๋ฐฑํ ๋ฌธ์ ์ ์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
ServiceStack์ ์๋ตํ๊ณ ์ด๋ฅผ ์ผ๋ถ ๋ณด์กฐ ํด๋์ค .NET ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ ผ์ํ๋ ๊ฒ์ ์๊ธฐ๋ ์ผ์ ๋๋ค. MS์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ง ์์กดํ๋ค๊ณ ํด์ ๋์์ ๋ํด ๋ชจ๋ฅธ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
๋๋ MS๊ฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ง์ ์ธ๊ธ๋๊ณ ์ด๋ฏธ ๊ฒฐ์ ๋ ๊ฒฐ์ ์ ๋ํ "์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ"์ด ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ.
๊ทธ๊ฒ ๋ด ์ธ์์ด์ผ
@terrajobst
๋๋ ๊ทธ๊ฒ์ ์ฝ์์ง๋ง ๋น์ ์ ๋ํดํธ๋ฅผ ๊ฐ๋ ๊ฒ์ ๋ฐ๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค
JSON.NET์ด ์ด์ ์ ์ด๋ฏธ ๊ธฐ๋ณธ๊ฐ์ด๋ผ๊ณ ์ ์ํ ์ ์ด ์์ต๋๋ค. ์์์ ๋ ์์ธํ ์ค๋ช ํ์ง๋ง ๋ํ์ดํ๊ธฐ ์ํด ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ธ์ํ๊ณ ํจ๊ณผ์ ์ผ๋ก .NET Core๊ฐ ๋ฏธ๋์ 2๊ฐ์ JSON ์ง๋ ฌ ๋ณํ๊ธฐ(์ด ์๋ก์ด ์ฌ์ค์์ ๊ณ ์ฑ๋ฅ ๊ธฐ๋ณธ๊ฐ ๋ฐ JSON)๋ง ๊ฐ๊ฒ ๋๋ ์๋ก์ด ์ฌ์ค์์ ํ์ค์ด ๋ ์์น์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ง์ ๊ธฐ๋ฅ์ ์ํ NET. ๋ค๋ฅธ JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ ํ์ ์์ฅ์ด ๋ ๊ฒ์ ๋๋ค(์: ๋ค๋ฅธ ์๋๋ฆฌ์ค๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ถ๊ฐ๋ ๊ณ ์ ๊ธฐ๋ฅ).
์ด ๋ฐํ๋ฅผ ๋จผ์ ๋ฐ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์ฝ๋ฉ/API ์ค๊ณ .NET Core๋ฅผ ์ํํ์ง ์์์ต๋๋ค.
์ข์, "์ธ๋ถ์ธ"์ด ํ๋ฌ๊ทธ ๊ฐ๋ฅ์ฑ, ํ์ฅ์ฑ ๋๋ ์ํธ ์ด์ฉ์ฑ์ ์ผ๋ง๋ ์ ์๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์์ง ๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ด ์ด ๋ฐํ๊ฐ ์ ๊ณตํ ๋งฅ๋ฝ์ ์ ๊ณตํ์ง ์๊ณ ์ฐป์์ ์ฝ๋ ๊ฒ์ ์ํ์ง ์์์ต๋๋ค. ์ฆ, ๊ณง API์ ์ฝ๋๋ฅผ ๊ฒ์ํ ์์ ์ด๋ ๊ณ์ ์ง์ผ๋ด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๊ทธ๋ผ ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐํ ๊ฑด๊ฐ์? ์ถ์ํ ํ ์ผ๋ง๋ ์ค๋ ์ธ๋ถ์ธ์ด API ๋์์ธ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ํ
์คํธํ๊ณ ์ ์ํด์ผ ํฉ๋๊น? "ํ๋ฌ๊ทธ ๊ฐ๋ฅ" ๋ฐ "ํ์ฅ ๊ฐ๋ฅ" API๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง์ ๋ํ ์ ์ ์ฃผ์ ๊ด์ฌ์ฌ๋ Ref/Value ์ ํ์ ์์ด์ด ํ์์ "์ธ๊ณ"ํ๊ณ ์๋ฒฝํ๊ฒ ์ ์ดํ ์ ์์ต๋๊น? ๋ด์ฅํ, ์ด๊ฑฐํ, ๋ถ์ธ, ๊ธฐํ ๋ด์ฅ ํจ์ ๋ฑ์ ์ด๋ป์ต๋๊น? ์๋ฅผ ๋ค์ด "yes", "on", "1"๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ JSON ๊ฐ์ ํ์ฉํ๋๋ก bool
๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ง๋ฌธ:
@mythz
์ค์ ๋ก ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐ๋ ๊ฒ์ ์๋๋ฉฐ(๋ด ์ง์์ผ๋ก๋) Reader/Writer ๋ถ๋ถ์ corefxlab(https://github.com/dotnet/corefxlab/tree/master/src/System.Text.JsonLab/System/Text/)์์ ์ํ๋ฉ๋๋ค. Json) ๋ฐ ํนํ corefxlab์๋ ์์ง ์ด์ ๋ํ ๊ณ ์์ค API๊ฐ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ/ํ๋ฌ๊ทธ ๊ฐ๋ฅ API ๋ถ๋ถ์ .NET Standard(์: ์์ฑ ๋ฑ)๋ก ์ ์ธํ๊ณ ์ถ์ต๋๋ค. corefxlab์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ฌ .NET Standard 1.1์ด์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ฑ๋ฅ ๋ชฉํ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@mythz
๋น์ ์ ๋ด ์ง์ ์ ๋ฐ์๋ค์ด๊ณ ๊ทธ๊ฒ์ "์ ๋ฆฌ๊ฐ ๋ฐ์ฏค ๋น์๋ค"-๋งฅ๋ฝ์ ๋๊ธฐ๋ฅผ ์ด๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋น์ ์ ํ์์ ์ ๋๋ค. ๋๋ ์ฐ๋ฆฌ ์ค์ค๋ก ๋ง์ ํค ์ ๋ ฅ์ ์ ์ฅํ๊ณ ์ถ์์ ์ผ๋ก ๋ ผ์ํ๊ธฐ๋ณด๋ค๋ ๊ตฌ์ฒด์ ์ธ API ์ ์์ ๋ํด ๋ ผ์ํ ๊ฒ์ ์ ์ํฉ๋๋ค. ๋๋ ์ฐ๋ฆฌ ๊ณํ์ด ๋น์ ์๊ฒ ํ์ํ ํ์ฅ ์ง์ ์ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
@terrajobst ํ์์ ์ผ๋ก System.Text.JsonLab ์ด ํ์ฌ impl์ ๋๊น? ์ด๊ฒ์ .NET Standard 2.0 ๋ฐ .NET v4.5๋ ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
์ด๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์๊ฒ ์ข์ ๊ธฐ๋ฅ์ผ ์ ์์ง๋ง ์ข ์์ฑ ํธ๋ฆฌ๊ฐ ์๋ 50๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ค ๊ฐ์ ํธํ์ฑ์ ์ฐพ์ผ๋ ค๋ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋ถ์ผ์น๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ธ๋ฉ ๋ฆฌ๋๋ ์ ์คํ์ผ ๋งคํ ๊ตฌ์ฑ์ด ์์ต๋๊น?
์ฌ๋๋ค์ด ์ด๋ค ์์ผ๋ก๋ ๊ธฐ๋ถ์ด ์ํ๊ฑฐ๋ ์ทจํ๊ฑฐ๋ ์ทจํ์ง ์์ ์กฐ์น๋ฅผ ๋ณํธํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ํ๋ ์ฑ๊ธํด ๋ณด์ ๋๋ค. ์ฝ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์ฃผ์์ ์ฌ๊ณผ! ํ์ฌ ์ํ๋ฅผ ๊ทธ๋๋ก ๋๊ณ ์งํํด ์ฃผ์ธ์.
์ด๋ฌํ ๋ณํ์๋ ๋ ๊ฐ์ง ์ด์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ .Net Core ๋ด์์ ์๋ก์ด ์ ํ์ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ค๋ ์๊ตฌ์ ๋๋ค.
๋ํ, ์ผ๋ง ์ ์ .Net ์ธ๋ถ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ JSON.Net์ ๋ํ ํ๋ ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ ์ํคํ ์ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ์ธ์ํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ์ฌ์์ ์์ฒด ๊ตฌํ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์ธํฐํ์ด์ค์ ํจ๊ป ์๋ก์ด ๊ธฐ๋ณธ ์ ๊ณต JSON ๊ตฌํ์ ๋์ ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ผ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊น์? ์! ์ด๊ฒ์ด ๋ฐํ ์ "์ค์ํ ๋ณ๊ฒฝ ์ฌํญ" ๋ ์ด๋ธ์ด ์๋ ์ด์ ์ ๋๋ค. (์๋ง๋ ๊ทธ ๋ ์ด๋ธ์ ์ฌ๊ธฐ์ ๋ณต์ ๋์ด์ผ ํฉ๋๋ค.) ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ธ๋ ์ดํน ์ฒด์ธ์ง(Breaking Change)๋ก ์๋ ค์ ธ ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ์กฐ์ฌํ๊ธฐ ์ํ ๋ ผ์๊ฐ ์์๋์์ต๋๋ค. ๋ํ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํด JSON.Net์ ๊ณ์ ์ฌ์ฉํ ์ ์๋ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๋์๊ด ์ ์๋ก์ ๋๋ ์ด๊ฒ์ ์ ๋ง ๊ด์ฌ์ด ์์ผ๋ฉฐ ๋ํ๊ฐ ์งํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@Tornhoof ์์ ์ ๋ํ ์๋ต์ผ๋ก ์ด์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ์ ์์ต๋๋ค. ํนํ ๋ด ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์ ์ฌํ ๊ฐ๋ ์ ๋ํด ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ๋ ๋ด๊ฐ ์ ํํ ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ์ง๋ ฌํ์ ์ด๋ฌํ ์์ฑ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ๋ช ์ํ๋ ํ๋ ์์ํฌ(.Net Core)๋ฅผ ์ํ์ง ์์ต๋๋ค .
.Net์์ ์ ๊ณตํ๋ ์๋ฃจ์ ์ ๊ทธ๋ณด๋ค ๋ ์ผ๋ฐ์ ์ด์ด์ผ ํฉ๋๋ค. ํน์ ๋ชจ๋ธ ์ง๋ ฌํ ์ฒ๋ฆฌ๋ ์ ํํ JSON ๊ตฌํ์์ ์ํํด์ผ ํฉ๋๋ค.
@mythz ์ด ์ ์์ ๋ง๋๋ ๋ฐ ๊ด๋ จ๋ ์ฌ๋๋ค๋ก๋ถํฐ ๋ด๊ฐ ์๊ณ ๋ณธ ๋ชจ๋ ๊ฒ์์ ์ ์๋ API์ ๊ตฌํ์ด ์์ ์ ์ธ ๊ฒ์ผ๋ก ์ถ์๋๊ธฐ ์ ์ ๊ฒํ ํ๊ณ ์๊ฒฌ์ ์ ์ํ ์ ์๋ ๊ธด ๊ธฐํ๋ฅผ ์ป๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ์ด ๊ฒ์๋ฌผ์ ๋ง๋ ๋ชฉ์ ์ค ํ๋๋ ํนํ ์ด๋ฐ ์ด์ ๋ก ๋น์ ๊ณผ ๊ฐ์ ์ฌ๋๋ค์ ์ฐพ๋ ๊ฒ์ด์์ต๋๋ค.
@gregsdennis
๋ ์ผ๋ฐ์ ์ธ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ง๋ ฌ ๋ณํ๊ธฐ์ json ์์ฑ ์ด๋ฆ์ ์ฌ์ ์ํ๊ณ null ๋์ ๋ฐ/๋๋ ํด๋ฐฑ/์บ์น ์ฌ ๊ตฌํ์ ๋ณ๊ฒฝํ๋ ๊ฐ๋
์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ ๋ชจ๋๊ฐ .net core 3.0์ฉ JSON ์ง๋ ฌ ๋ณํ๊ธฐ์ ๋ํ ๊ณต์ ์ฌ์์ ์ผ๋ถ๋ผ๊ณ ๊ฐ์ ํ๋ฉด ๊ตฌํ ํจํค์ง ์ด๋ฌํ ์์ฑ์ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ ๋ณด์ ๋งคํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ [DataMember]
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ(SpanJson์ฒ๋ผ) ํตํฉ ํจํค์ง๋ ์ด๋ฅผ ์ฝ๊ฒ ๋งคํํด์ผ ํฉ๋๋ค.
์์ฑ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋ ์์ ์์ ๋ณผ ์ ์๋ ๋ถ๋ถ์ผ ๋ฟ์
๋๋ค.
๋ถ๋ช ํ ์ด์์ ์ธ ์ธ์์ ASP.NET Core ํ๋ ์์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง๋ ฌํ ๋์์ ์ ์ดํ๊ธฐ ์ํด ํน์ ์ฃผ์์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. .
์ด๋ ์ชฝ์ด๋ , ๋๋ ์ด๋ฌํ ๊ณต์ ๊ธฐ๋ฅ, ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ ํฅํ ์ค๋ช ์ ๋ํด ๋ง์ ๋ ผ์๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
RapidJSON์์์ ๊ฐ์ด ์๋ก์ด JSON ํ์์์ SIMD ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ณํ์ด ์์ต๋๊น?
์ฐธ์กฐ: http://rapidjson.org/
์ ์๋ ์ ์์ ์ข์ ๋ณด์ด์ง๋ง " ์ค๋จ ๋ณ๊ฒฝ "์ ์๋ํ๊ณ ๋งค๋๋ฝ๊ฒ ํ์ญ์์ค. ์ ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ฐ ์ฌ์ฉ์์ด๋ฉฐ ์ต๊ทผ์ UWP .net ๊ธฐ๋ณธ ๋ฆด๋ฆฌ์ค ๋น๋ ํ๋ก์ธ์ค(์ปดํ์ผ๋ฌ ).
๋ฐ๋ผ์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ช ๋ฌ ๋์ UWP ์ฑ์ ๋ฆด๋ฆฌ์ค ๋ชจ๋๋ก ๋น๋ํ ์ ์์์ต๋๋ค. ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ UWP ๋ถ๋ถ์์ ๋ฐ์์ ์ ์ธํ๊ธฐ ์ํด ๊ตฌํ์ ๋ค์ ๋ถํ ํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋์๊ด ์๊ฐ๋ค์ ํํฐ์ ์ค์ง ์์๊ณ ๋๋ ์ด์ฉ ์ ์์ด ๋ฐฐ๋ฅผ ํ๋ค. MS๊ฐ ์ ๋ฉด์ ๋์ .net ํ์ค 2.1์์ ๋์์ ๊ตฌํํ๊ธฐ๋ก ์ฝ์ํ์ง๋ง. ์ค์ ํ์ค์ .net ํ์ค 2.1์ด ์ต์ด์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๊ณตํ๋ ๋ฐ ๋ช ๋ฌ์ด ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์์ ์ ๊ฐ๋จํ ๋งํด์, ์ด๊ฒ์ ์ต์ข ์ฌ์ฉ์์๊ฒ ๋ง๋ํ ์ํฅ์ ๋ฏธ์ณค๊ณ "๋ถ๋๋ฝ๊ณ " ๋ง์ฐฐ์ด ์์์ต๋๋ค.
์ด๊ฒ์ ํ์คํ ์ฌ๋ฐ๋ฅธ ๋จ๊ณ์
๋๋ค.
์ด Json.Net ์ฐธ์กฐ๋ฅผ ๋ณด๊ณ ์ ์ ๊ถ๊ธํฉ๋๋ค.
@Tornhoof ์ ์๋ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ ๊ณต๊ธ์๊ฐ .Net Core 3.0๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด ๊ตฌํํด์ผ ํ๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๊ธฐ๋ณธ ๊ตฌํ์ ๋๋ค.
์ธํฐํ์ด์ค๋ ๊ฐ๋ฅํ ํ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค. Serialize()
๋ฐ Deserialize()
๋ฉ์๋๋ง ์ ์ํ๋ ๊ฒ์ฒ๋ผ ๊ฐ๋จํฉ๋๋ค.
๋ค๋ฅธ ์ธ๋ถ ์ฌํญ์ ๊ตฌํ์ ๋งก๊ฒจ์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌํ์ด ํน์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ์์ฑ ํค ์ง์ ๋ฉ์ปค๋์ฆ์ ์ ์ํ๋ ๊ฒฝ์ฐ์๋ ๊ด์ฐฎ์ต๋๋ค. ์ธํฐํ์ด์ค์ ์ผ๋ถ๊ฐ ์๋์ด์ผ ํ๋ ๊ตฌํ๋ณ ์ธ๋ถ์ ๋ณด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฆ, ์์ฑ์ ์ฌ์ฉ์ ์ง์ ํ๋ ๊ธฐ๋ฅ ์ ๊ฐ๋ ๊ฒ์ด ์๊ตฌ ์ฌํญ์ด ๋ ์ ์์ง๋ง ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์ฑ๋ฌธํ๋ ์ ์๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@gregsdennis ๋ค ๋ง์ต๋๋ค. ์ ๋ ์ฃผ๋ก ํ์ฌ ASP.NET Core์ ์ด๋ฏธ ์กด์ฌํ๋ IInput/OutputFormatter, ํนํ JSON.NET์ด ์๋ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์์์ต๋๋ค.
์ด์จ๋ ๊ทํ์ @mythz์ ์๊ฒฌ์์ ์ ์ ์๋ฏ์ด ๋ฒ์ ์ ์๊ฐ ํฅ๋ฏธ๋กญ๊ณ ๊ฐ๋จํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค(DI ์ธํฐํ์ด์ค ์ฌ์์ ๋ฌธ์ ๋ฅผ ๊ธฐ์ตํฉ๋๋ค). ๋ฐ๋ผ์ ํ๋ก์ธ์ค ์ด๊ธฐ์ ๋ค์ํ ๊ด์ ์ ํฌํจํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@Tornhoof๊ฐ ๋์ํ์ต๋๋ค. ํ์ฌ ํฌ๋งทํฐ ์ธํฐํ์ด์ค ๋ ๋ถ๋ช ํ JSON.Net ๊ธฐ๋ฐ์ด์ง๋ง ์ง๋ ฌ ๋ณํ๊ธฐ ์์ฒด๊ฐ ์๋๋ผ ์ต์ ๊ฐ์ฒด์ ์์ต๋๋ค. ์ต์ (๊ณตํต ์ต์ ๊ฐ์ฒด)์ ์ ๋ฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ๋ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ์ต์ ๊ฐ์ฒด๊ฐ ๊ตฌํ์ ์ํ ์ต์ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น? ๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์๋๋ค. ์ต๊ทผ์ ์ต์ ๊ฐ์ฒด๋ฅผ ์์ ํ ๋ฌด์ํ๋ ์ง๋ ฌ ๋ณํ๊ธฐ์ ๋ํ ํฌ๋งทํฐ๋ฅผ ๊ตฌํํ์ง๋ง ์ด๋ ๊ฐ์ธ์ ์ธ ์ฉ๋์์ต๋๋ค. ๊ณต๊ฐ์ฉ์ผ๋ก ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์ง์ํ๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ๋ง์ ์ต์ ์ ํด์ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
์ง๊ธ ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์๋ ์ผ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ต์ ์ ์ง๋ ฌ ๋ณํ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ๊ณตํต ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. MVC์ ํฌ๋งทํฐ๋ ์ด๋ฏธ ์ ์ ํ๊ฒ ์ ๊ฑฐ๋์์ผ๋ฉฐ ์๋ฌด ๊ฒ๋ ์ฐ๊ฒฐ๋์ง ์์์ต๋๋ค. JsonResult๋ JsonSerializationOptions(JSON.NET ์ ํ)๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค.
๊ฐ์ ๋ง์ ํ๋ ค๋ ์ฐธ์ด์๋ค. JSON ํ๋
๊ธฐ/์์ฑ๊ธฐ/์ง๋ ฌ ๋ณํ๊ธฐ์ ๋ํ ์ถ์ํ๋ฅผ ๊ตฌ์ถํ ๊ณํ์ ์์ต๋๋ค. ํ์ํ์ง ์์ต๋๋ค. ํ๋ ์์ํฌ๋ IO ํ๋ฆฌ๋ฏธํฐ๋ธ(์: Stream
, TextReader
)๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ ๋์ ์์ค์ ํ๋ ์์ํฌ ์ฒ๋ฆฌ(์: ASP.NET Core ํฌ๋งทํฐ)์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ณ ์ถฉ์ ๋ํด ๋งํ์๋ฉด: ๊ฐ์ธ์ ์ผ๋ก(๊ทธ๋ฆฌ๊ณ ๋๋ ์์ฃผ ์์์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค) ๋ง์ JSON ํ์์ ๋์จํ ํน์ฑ์ ๋ํด ์ฐ๋ คํฉ๋๋ค. ํ์ค(tm)์ด ์์ง๋ง ๋๋ถ๋ถ์ ํ์๋ ๊ด๋ํ๊ณ ๋ถ์ ํฉ ๋ฌธ์๋ฅผ ์๋ฝํ๊ธฐ๋ก ์ ํํ์ต๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ๋์ ์ ์ ๊ฐ๋ฐ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๊ตฌํํ๋ ํ์ค์ ๋ํด ๊ตฌํํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ถ์ ํฉ ๋ฌธ์๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋นํธ๊ฐ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ ๊ฐ๋ฐ์๋ ๋ง์กฑํฉ๋๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋๋ฉ์ธ ๊ฐ์ ํต์ ์ ์๋ํ ๋ ๊ณ ํต์ด ๋ฐ์ํฉ๋๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ํ JSON์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์๊ธฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ ํ ๊ด๋ํ๊ฒ ๋ง๋ค๊ฑฐ๋(๊ทธ๋ฌ๋ ์๋ง๋ ๋ณต์ก์ฑ๊ณผ ๋ชจํธํจ์ผ๋ก ๋๋ ์ ์์) ๊ทผ๋ณธ ์์ธ์ ๊ณต๊ฒฉํ์ฌ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ๋น ํ์ธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
์ํฅ๋ ฅ ์๋ MS๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ํธ ์ด์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด MS๊ฐ JSON ํ์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์นํธํ๋๋ก ์๊ตฌํ ๊ฒ์ด ๋ง์ง๋ง ์ ๋ ๋ฌ๋์ผ๋ฉด ํฉ๋๋ค. ์ฝ๊ธฐ์๋ ๊ด๋ํ์ง๋ง ์ฐ๊ธฐ์๋ ์๊ฒฉํ ๊น์?
(ํ์ค์ ์๋ ๊ฒ, ์ฃผ์, ํํ ์ผํ, ์์๋ฐ์ดํ ๋ฌธ์์ด, ์ธ์ฉ ๋ฌธ์์ด ์์ ๋ฑ)
IMHO, JSON์ ์น ๋ธ๋ผ์ฐ์ ์ธ๊ณ์์ ์ ๋ํ๋ฏ๋ก ์ํธ ์ด์ฉ์ฑ์ ์ํด JSON ํ์ค์ด ๋ด๋น์์ ๋ํด ์๋ฌด ๊ฒ๋ ๋งํ์ง ์๋๋ผ๋ JSON์ ๊ธฐ๋ณธ ํํ์ผ๋ก double์ ์ ํํด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
API์ ๋ํด ๋งํ๋ฉด์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ API๋ API์ ๊ฐ์ DOM์ผ ๊ฒ์ด๋ผ๊ณ ์๋ฌต์ ์ผ๋ก ๊ฐ์ ํ์ง๋ง ํ ํฐ ์คํธ๋ฆผ์ ์๋นํ๊ฑฐ๋ ๋ฐฉ๋ฌธ์ ์ธํฐํ์ด์ค์ ๋ํ ์ ํธ๋ฅผ ๋ฐ์ ์ ์๋ ๋ฎ์ ์์ค์ API๊ฐ ์๋ค๋ฉด ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค ๋ฐ์ดํฐ์ ์์ ๋ถ๋ถ๋ง ์ถ์ถํ๋ ค๋ ๋์ฉ๋ ๋ฌธ์์ ๋๋ค.
@mrange - ๊ฐ๋ฅํ ํ ์๊ฒฉํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ข์ํ๋ ๋งํผ.... ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋ถ์ ํฉ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ฌ๋ ค ์์ต๋๋ค.
๋ค๋ฅธ ํ์ฌ์ ํต์ ํ์ ์๋ ๋ ๊ฑฐ์ ์๋น์ค์ ์ํธ ์์ฉํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฑฐ์ 0์ ๊ฐ๊น์ต๋๋ค. Strict-on-Write๋ ๊ฐ๋ฅํ์ง๋ง ์ฌ๊ธฐ์ ์์ฒด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๊ฐ ๋ถ์ ํฉํ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ๊ฒ์ผ๋ก ์์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
@terrajobst ๊ฐ์ฌํฉ๋๋ค! ์ฌ๊ธฐ์ ํ์ํ ๊ฒ์ Func<Stream, CancellationToken, Task<T>>
๋ฐ Func<T, CancellationToken, Stream, Task>
์
๋๋ค. TextReader/Writer, Span ๋ฐ string์ ๋ํ ์ผ๋ถ ์ค๋ฒ๋ก๋๊ฐ ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ์ ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๋ ค๊ณ ํ ๋ ํด๋น ์ ํ์ด ์ฌ์ฉํ์ง ์๋ json ์ง๋ ฌ ๋ณํ๊ธฐ์ ์์ฑ์ผ๋ก ์ฅ์๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
@thefringeninja ๊ฐ์ฒด์ ๋ํด ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ด๋ฏธ ๋ค๋ฅธ ์ง๋ ฌ ๋ณํ๊ธฐ์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒ์ ๋๋ค. ๊ฑฐ๊ธฐ์๋ ์๋ฌด๊ฒ๋ ๋ฐ๋์ง ์์์ต๋๋ค.
๋๋ ๋๋ ค์์ ํผ๋จ๋ฆฌ๋ ์ฌ๋ ์ด
@terrajobst ์ํ๊ณ์ ๊ด๋ จํ์ฌ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง๋ง NuGet์์ "json"์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๋ ๊ฒ์ด ๋๊ตฌ์๊ฒ๋ ๋ง์ ๊ฒ์ ์๋ ค์ค ๊ฒ์ด๋ผ๊ณ ๋ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ง๋ ServiceStack.Text๋ผ๋ ์ด๋ฆ์ "์๋ ํ์ธ์! ์ ๋ JSON์ (์ญ)์ง๋ ฌํํ ์ ์๋ ํจํค์ง์ ๋๋ค!"๋ผ๊ณ ๋งํ๋ ๊ฐ์ฅ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ ์๋์ง๋ง, ์ด๋ฅผ ๋น๊ตํ๋ ๋ฒค์น๋งํฌ๊ฐ ์๋ ๋์ ์์์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ MS ๊ธฐ๋ณธ๊ฐ์ dogfoodํ๊ณ ๋์์ ํญ๊ณผ ์ธ๊ธฐ๋ฅผ ์์ง ๋ชปํ๊ฑฐ๋ ๋ด๋ถ์ ์ผ๋ก ์ต์ํด์ง ๋งํผ ์ถฉ๋ถํ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ผ ์ ์์ต๋๋ค.
๋๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ _๊ทธ๋ฅ ์๋_ํ๋ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ค์ ์ด ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ์ํ๊ณ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ํตํฉ ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ ๋ฌธ์, ๋ฆด๋ฆฌ์ค ๋ ธํธ ๋ฑ์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ์ฌ ๊ธฐ๋ณธ๊ฐ ์ด์ธ์ ๋์์ด ์์์ ๊ฐ์กฐํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋ฐ๊ฒฌํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ ์ํ๊ณ์ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ด ํฌ๋ง์ ์ข ์์ฑ์ ์ ๊ฑฐํ๋ ค๋ ๋ชฉํ๊ฐ ์ง์งํ ๊ฒฝ์ฐ API๊ฐ ์ปค๋ฎค๋ํฐ์ ์๊ตฌ๋ฅผ ๊ฐ์ฅ ์ ๋ํ๋ด์ผ ํ๋ฉฐ Json.NET์ ์ง์ ๋ชจ๋ธ๋ก ํด์๋ ์ ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๋ก ์ ServiceStack๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์ ์์ ์ด ํ์ํ์ง๋ง API๋ Json.NET์ API์ ์ง์ ์ ์ผ๋ก ์ ์ฌํด์๋ ์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ข ์์ฑ์ฒ๋ผ ๋ณด์ด์ง๋ง dll์ด ์๋ ์ํ๋ก ๋์๊ฐ๋๋ค.
API๋ Json.NET์ API์ ์ง์ ์ ์ผ๋ก ์ ์ฌํด์๋ ์ ๋ฉ๋๋ค.
... ๋๋ ๋ค๋ฅธ ํน์ ๊ณต๊ธ์์ ๊ตฌํ.
๋ฐํ ์ด์ ์ ์งํ๋ ํ ๋ก ์ ์ผ๋ถ์๋ .Net ํ์ด ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ค์ํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋๋์ ์ป์ ๋ค์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ์์ด๋์ด๊ฐ ํฌํจ๋์์ต๋๋ค. ์์ ์ ์์ด๋์ด์ ๊ฒฐํฉ. ์ฌ๋ฌ ๋ฉด์์ ๋ค๋ฅธ ์๋ก์ด JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฐ๋ฐ๋๋ ๋ฐฉ์๊ณผ ๋ค๋ฅด์ง ์์ต๋๋ค. ์ด๊ฒ์ ํ๋ ์์ํฌ์ ํฌํจ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ค์ค๋ก ๊ตฌ์ถํ ํ์๊ฐ ์๋ ๊ณ ์ฑ๋ฅ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. :)
๋ฌด์์ด๋ ๋ ผ์ํ๊ธฐ ์ ์ ํด๋น ์์ญ์ ๋ํ Microsoft Research์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค(๋ ๊ตฌ์ฒด์ ์ผ๋ก, no branching no FSM parsing) https://www.microsoft.com/en-us/research/publication/mison-fast-json-parser -๋ฐ์ดํฐ ๋ถ์/
์ฐ๋ฆฌ๋ ๊ณ ์ฑ๋ฅ JSON ๊ตฌ๋ฌธ ๋ถ์์ ์ํด ๊ทธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์์ต๋๋ค --- ๋ฌผ๋ก Span<T>
์ธ์๋ ---
cc @terrajobst @karelz
:( JSON์ ๋ํ ์ด ๋ชจ๋ ๋ ผ์๋ ํ ํ๋ฆฟ์ ๋ํ ๋ด ์ง๋ฌธ์ด ์๋ชป๋์๋ค๋ ๋๋์ ์ค๋๋ค.
์ง์ฅ์ด์๊ธฐ ๋๋ฌธ์ ์ด ํ ๋ก ์ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ๊ณ ์ถ์์ง๋ง ๊ทธ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ๋์๋์ง ์ ์ ์์ต๋๋ค. 4.6.1์ ์ ๊ทธ๋ ์ด๋ ๋ฐ ์ ๊ทธ๋ ์ด๋์ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํ๋ฉฐ ๋๋จธ์ง๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค.
core ๋ฐ 461์ ๋ํด ํ์๋ ํจํค์ง๋ฅผ ๋ง์ด ๋ณด์๊ณ ์ด ์ ํ์ด๋ ๋ณ๊ฒฝ์ผ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ณ๋จ์ ๋ฌธ์ ๊ฐ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ๊น๋ด ๊ฑฑ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ๋ ธ๋ค๋ ๊ฒ์ ์ฆ๋ช ํด ์ฃผ์ธ์.
// ๋ชจ๋ ๊ณณ์์ net devs ์ ์ ์ฐ์ต๋๋ค.
@c0shea
[โฆ ] ๊ธฐ๋ณธ๊ฐ ์ด์ธ์ ๋์์ด ์์์ ๊ฐ์กฐํ๊ธฐ ์ํด ๋ฌธ์, ๋ฆด๋ฆฌ์ค ๋ ธํธ ๋ฑ์ ํ๋ฌ๊ทธ๋ฅผ ๊ฝ์ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ๋ฌธ์ ์๋ DI ์ปจํ ์ด๋ , ๋ก๊น ๊ณต๊ธ์ , Swagger ํตํฉ ๋๋ EF Core ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ธ์ ์ ๊ฐ์ ์ฌ๋ฌ ์ฃผ์ ์ ๋ํ ๋์ฒด ๊ตฌํ์ด ์ด๋ฏธ ๋์ด ๋์ด ์์ต๋๋ค .
@ํ๋ฆฝ ํค์ด๋
ํ
ํ๋ฆฟ ์์คํ
์ ์ด๋ฏธ ์ฌ์ฉ์ ์ง์ ๊ฐ๋ฅํ ํ
ํ๋ฆฟ์ ์ง์ํ๊ณ ๊ธฐ์กด ํ
ํ๋ฆฟ์๋ ์ค์ ๋ก ์ด๋ฏธ ๋ง์ ์ต์
์ด ์์ต๋๋ค. ํ์ฌ ๊ฐ๋ฅํ ๊ฒ์ ๋ํด์๋ dotnet new mvc --help
๋ฅผ ํ์ธํ์ญ์์ค. ์๋ฅผ ๋ค์ด ๋์ฒด JSON ์ง๋ ฌ ๋ณํ๊ธฐ ํตํฉ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์์ผ๋ฉฐ ์ด์ ๋ํ ๊ธฐ๋ฅ ์์ฒญ ๋๋ ๋์ด์ค๊ธฐ ์์ฒญ์ aspnet/Templates ์์ ํ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
@mrange - ๊ฐ๋ฅํ ํ ์๊ฒฉํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ข์ํ๋ ๋งํผ.... ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋ถ์ ํฉ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ฌ๋ ค ์์ต๋๋ค.
๋ค๋ฅธ ํ์ฌ์ ํต์ ํ์ ์๋ ๋ ๊ฑฐ์ ์๋น์ค์ ์ํธ ์์ฉํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฑฐ์ 0์ ๊ฐ๊น์ต๋๋ค. Strict-on-Write๋ ๊ฐ๋ฅํ์ง๋ง ์ฌ๊ธฐ์ ์์ฒด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๊ฐ ๋ถ์ ํฉํ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ๊ฒ์ผ๋ก ์์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฒฉ ๋ชจ๋๊ฐ ์๊ณ ๋ ๊ด๋ํ ๋ชจ๋๋ก ๋ช ์์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
@poke vue cli๋ฅผ ์๋ํ ๋ค์ dotnew new๋ฅผ ๋ค์ ์๋ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ๋ท๋ท ์...๋...์ ๋๋ค...
๋ค์ํ ๋ธ๋ผ์ฐ์ ์ JSON ๊ตฌ๋ฌธ ๋ถ์์ด int64 ๊ฐ์ ์ ๋๋ก ์ง์ํ์ง ์๋๋ค๋ ์ ์ ๊ธฐ์ตํ๊ณ long์ ๋ฌธ์์ด๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ์์ฒญํ ์ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋น์ ์ ์ธ๊ฒ ๋ฌผ ๋๊น์ง ๋์น ์ฑ์ง ๋ชปํ๋ ๊ฒ๋ค ์ค ํ๋์ ๋๋ค. ์ด๊ฒ์ ๋ณํ์ ์ซ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก int ๋๋ long์ผ๋ก ์ญ์ง๋ ฌํ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์ํ ๋ธ๋ผ์ฐ์ ์ JSON ๊ตฌ๋ฌธ ๋ถ์์ด int64 ๊ฐ์ ์ ๋๋ก ์ง์ํ์ง ์๋๋ค๋ ์ ์ ๊ธฐ์ตํ๊ณ long์ ๋ฌธ์์ด๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ์์ฒญํ ์ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋น์ ์ ์ธ๊ฒ ๋ฌผ ๋๊น์ง ๋์น ์ฑ์ง ๋ชปํ๋ ๊ฒ๋ค ์ค ํ๋์ ๋๋ค. ์ด๊ฒ์ ๋ณํ์ ์ซ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก int ๋๋ long์ผ๋ก ์ญ์ง๋ ฌํ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
....์, EcmaScript, ๋ชจ๋ ๊ฒ์ ๋ ๋ฐฐ๋ก ๋ง๋ค์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ฝ๋์ ๋ค๋ฅธ ๋ถ๋ถ์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์์๋ค๊ณ ํ์ ํฉ๋๋ค...
๋๋ ์์์ฃผ์์๋ก์ ์ด๋ฐ ๊ฒ์ ์ซ์ดํ๋ค.
ํ์ค์ฃผ์์๋ก์ ๋๋ ์ด๊ฒ์ ๋์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๋ก์ด JSON ๊ตฌํ์ ์ผ๋ถ๊ฐ .Net Standard 2.1์ ํฌํจ ๋ฉ๋๊น?
๋๋ ์ด๊ฒ์ ์กฐ๊ธ ๋ฐ๋ผ ํด ๋ณด์๊ณ ๋ด๊ฐ ๋์น ๊ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ๊ฒํ ํ ์ ์๋ ์ ์๋ API ํ๋ฉด ๋๋ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๊น? ์ด ์ ์์ ๋ํ API ๋ ธ์ถ ์์ญ์ ๋ณด๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ฒํ ํ ์ ์๋ ์ ์๋ API ํ๋ฉด ๋๋ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๊น?
์์ง ํ ์ผ์ด ๋ง์ง๋ง https://github.com/dotnet/corefx/pull/33216 ์ ์์์ ๋๋ค. ๋ค์ ์ API ๊ฒํ ๋ ธํธ ์ ๋๋ค.
์ ๋ฐ์ดํธ: ๋ก๋๋งต๋ ์ฌ๊ธฐ์์ ๋ณผ ์
๊ทธ๋ ๋ค๋ฉด aspnet 3.0 API๋ json.net API์ ๋น๊ตํ์ฌ ๊ธฐ๋ฅ์ด ์ผ๋ง๋ ์์ฑ๋ฉ๋๊น? ๋ํ json.net์ ๋ชจ๋ ์๋์ ๋ชฉ์ ์ ์ํด ๊ธฐ๋ณธ API๋ฅผ ์ฌ์ฉํ๋ ์ ์ฑ ๊ฐ๋ฐ๋ก ๋จ๊ณ์ ์ผ๋ก ์ ๊ฑฐ๋ฉ๋๊น?
์ฑ๋ฅ์ ํฅ์์ํค๊ฑฐ๋ json.net์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋์ฒดํ์๊ฒ ์ต๋๊น?
์ด๊ฒ์ ๋๋ผ์ด ์์์ ๋๋ค.
๋ ๊ฐ๋ ฅ์ ๊ทธ์ ์ํ @neuecc๊ณผ ํ๋ ฅํ๋ ค๊ณ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค MessagePack , Utf8Json , ZeroFormatter ๊ฒฝ์ด์ ์ธ์๋ค ๋ฑ.
@linkanyway ๊ฒฐ๊ณผ๋ ํ ๋น๋์ง ์์ ์๋ก์ด API๋ฅผ ์ ๊ณตํ๋ฉด์ json.net์ ํ์ ์งํฉ์ ๋์ฒดํ๋ ๊ฒ์ ๋๋ค.
๋๋ถ๋ถ์ aspnet ์ฌ์ฉ์๋ json.net ๊ตฌํ์ ๋ํ ๊ฐํ ์ข ์์ฑ์ด ์์ผ๋ฉฐ ๊ฑฐ์ โโ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฒํ ํ ์ ์๋ ์ ์๋ API ํ๋ฉด ๋๋ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๊น?
์์ง ํ ์ผ์ด ๋ง์ง๋ง dotnet/corefx#33216์ ์์์ ๋๋ค. ๋ค์ ์ API ๊ฒํ ๋ ธํธ ์ ๋๋ค.
์ ๋ฐ์ดํธ: ๋ก๋๋งต๋ ์ฌ๊ธฐ์์ ๋ณผ ์
@khellang ์ค์ ๋ก C#์์ json์ ์์ฑํ ์ ์๋ ์ธ์ด ๋์๋ง์ ์ป์ ์ ์์ต๋๊น?
OSS ๋ฐฉํฅ์ผ๋ก ํ ๋ฒ ๋ ์ข์ ์์ง์. ๋ค๋ฅธ ์์ ์ฉ ํ๋ซํผ์ ๊ฐ๋ฐ์๊ฐ MS๊ฐ ์ด๋ฏธ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ๊ฒ์ ๊ฐ๋ฐํ๋๋ก ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๊ฑฐ๋ ์ปค๋ฎค๋ํฐ์ ์ ๋ง๋ก ๊ด์ฌ์ด ์๋ค๋ฉด ์์ ํ OSS๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ค์ ๋ก C#์ผ๋ก json์ ์์ฑํ ์ ์๋ ์ธ์ด ๋์๋ง์ ์ป์ ์ ์์ต๋๊น?
@dotnetchris "lang help"๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. JSON ๋ฆฌํฐ๋ด? ๋๋ ๊ทธ๊ฒ์ด ์ผ์ด๋ ๊ฒ์ด๋ผ๊ณ ์์ฌํ๋ค. ๊ณง ์ถ์๋ "์๋ฒ ๋๋ ์ธ์ด" ๊ธฐ๋ฅ์ ๋ณด์ จ์ต๋๊น? ํนํ JSON ?
@khellang ๊ทธ๊ฒ์ ํ์คํ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ๋จ๊ณ์ด์ง๋ง ์ ํญ์ ์ธ ์ง์์ ์๋ฏธํฉ๋๋ค. ๋งํฌ์์ ๋์ผํ ์ํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๋ ์ ์ฌํฉ๋๋ค.
json v1 = {
first: 0,
second: ["s1", "s2" ]
}
var andCsharp = v1.second.Where(item => item.EndsWith("1"));
์์์ ํํ/๊ฐ ํํ/๋ ์ฝ๋ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ฐ์ ์ถฉ๋ถํ ๋ถ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒ์ด ๋ฐฐํ์์ lang ์์ค์์ ์๋ํ๋๋ก ํฉ๋๋ค.
๋ฐ๋๋ก ์ปดํ์ผ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ด json ์๋น์ค๋ฅผ ํธ์ถํ๊ณ ํด๋์ค๋ฅผ ๋ง๋ ๋ค์ ํด๋์ค์ ์ธ์คํด์ค๋ก ์์ ํ ์ ์์ต๋๋ค.
var v1 = "{ first: 0, second: ['s1', 's2' ] }".Deserialize<MyV1>();
ํธ์ง: LOL @ downvoters.
@dotnetchris https://github.com/dotnet/csharplang/issues/1238
@dotnetchris ๊ด์ฌ์ด ์์ผ์๋ฉด https://github.com/dotnet/roslyn/pull/24110์์ ํฌํ
"๋ด์ฅ" ๋ฐ "ํ๋ซํผ ์ ๊ณต" JSON API๋ ๋ณ๋์(netstandard) ๋๊ฒ ํจํค์ง๊ฐ ์๋์ ์๋ฏธํฉ๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ์ ๋ ๊น์?
์๋ก์ด ASP.NET Core ๊ณต์ ํ๋ ์์ํฌ๊ฐ nuget ํจํค์ง์ ์์กดํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๊น, ์๋๋ฉด ๊ทธ๋ด ์ ์์ต๋๊น?
System.Json ๋ค์์คํ์ด์ค๊ฐ ์ด๋ฏธ ์์ง ์์ต๋๊น? ์ด๊ฒ์ด .NET Core 3.0 ๋ฐ ๊ถ๊ทน์ ์ผ๋ก .NET Standard์ ๋ํด ์ฌ์ฉ/ํ์ฅ๋ ๋ค์์คํ์ด์ค์ ๋๊น? ํด๋น ๋ค์์คํ์ด์ค๋ Xamarin.Android 7.1+, Xamarin.iOS 10.8+ ๋ฐ Xamarin.Mac 3.0+์์ ์ด๋ฏธ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค(๋ง์ด ์ฌ์ฉ๋์ง๋ ์์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ ๐ ).
์ ๊ฑฐํ๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์์๋ฉ๋๋ค. ๊ทธ๋๋ก ๋๊ณ ์ API๋ฅผ ์์ํ๋ฉด ์ฝ๊ฐ์ ํผ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. API๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ํ์ฅ/ํฅ์ํ๋ ๊ฒ์ ์ API๋ฅผ ์ถ๊ฐํ ๋ ์ฝ๊ฐ ์ ํ์ ์ผ ์ ์์ต๋๋ค.
JsonReader/JsonWriter์ ๋ํ ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์คํธ๋ฆผ ์ธ์ ๋ค๋ฅธ ์์ค์ ๋์์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด MongoDB์ฉ JSON.NET๋ ์ฌ์ฉํฉ๋๋ค. ๋ ๋น ๋ฅด๊ณ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฌ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค.
์ฑ๋ฅ์ด ์ฝ๊ฐ ์ ํ๋ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
@SebastianStehle : JsonReader/JsonWriter๋ ๋์ ์์ค์ ์ถ์ํ์ ๋๋ค. terrajobst์ ์๊ฒฌ์ ์ฐธ์กฐํ์ธ์
3.0์ ๋ํ ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ด์ฅํ ๊ณ ์ฑ๋ฅ JSON API. ์ ์์ค ๋ฆฌ๋/๋ผ์ดํฐ, ์คํธ๋ฆผ ๊ธฐ๋ฐ ๋ฆฌ๋/๋ผ์ดํฐ ๋ฐ >์ง๋ ฌ ๋ณํ๊ธฐ.
- ASP.NET Core๋ JSON ๊ตฌ์ฑ ์์์ ํ๋ฌ๊ทธ์ธํ ์ ์์ต๋๋ค.
3.0์ ASP.NET์ฉ ํ ํ๋ฆฟ์ด ๋ฌด์์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๊ฐ๋ฐฉํ ์ง๋ฌธ์ด ์์ต๋๋ค. 3.0์์ ์ ๊ณตํ ์ ์๋ ์ถฉ์ค๋์ ๋ฐ๋ผ Json.NET ํตํฉ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชฉํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ๊ฒ๋ค์๋ง ์์กดํ๊ธฐ์ ์ถฉ๋ถํ ์ถฉ์ค๋์ ํจ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
๋์ ์์ค์ ์ฌ์ฉํ๊ธฐ ์ฌ์ด API๋ ์คํธ๋ฆผ์์ ์ฝ๊ฒ ์ญ์ง๋ ฌํํ๊ธฐ ์ํด ์คํธ๋ฆผ ์ฃผ์์ ๋ํ๋ฉ๋๋ค(์ด๊ฒ์ ์ง๋ ฌํํ ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์
๋๋ค. ์คํธ๋ฆผ์ ์ฌ์ฉํ ์ ์๋ ์๋๋ฆฌ์ค์์ ์ต์์ ์ฑ๋ฅ์ ์ํ๋ค๋ฉด ๋ฎ์ Span<T>
๋๋ Memory<T>
์์ ์๋ํ๋ ๋ ๋ฒจ API , ํนํ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์์ ์๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํ๊ณ ๋น๋๊ธฐ ์ค๋ฒํค๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
@TsengSR
https://github.com/neuecc/Utf8Json ์ ์ฑ๋ฅ์์ ์ด์ (๊ฐ์ ํธ์ถ ๋ฐ ํ ๋น ์ถ์ธก)๋ก ์ธํด ์ฌ์ฉ์ ์ง์ ํ๋ ๊ธฐ/์์ฑ๊ธฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ๋์ผํ ๊ฒฝ๋ก๋ฅผ ๊ฐ๊ณ ์ถ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ์ง๋ ฌํ ์ฝ๋๋ฅผ ๋ณธ ์ ์ด ์์ต๋๋ค.
@JonasZ95 ๋ฐ @gregsdennis ์ ๋์ํฉ๋๋ค. ๊ตฌํ์ด ๋์ผํ JSON.Net ๊ตฌํ ์ธ๋ถ ์ ๋ณด์ ๊ฐ๋จํ ์ถ์ํ๊ฐ ์๋๋ผ _ํด์ผ ํ๋_ ๋ชจ์์ ์ด์ ์ ๋ง์ถ๊ธธ ๋ฐ๋๋๋ค.
๋๋ ๋ํ ๊ทธ๊ฒ์ด 2 ๊ฐ์ ๊ฐ๋ณ ๊ธฐ๋ฅ์ผ๋ก ์ ๊ทผํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค ...
ASP.NET Core ํ๋ ์์ํฌ๊ฐ JSON ํน์ ์ถ์ํ ๋์ ์ผ๋ฐ ์ง๋ ฌํ ์ถ์ํ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ์ฅ์ฑ์ ๊ดํด์๋ ํ๋ ์์ํฌ๊ฐ ์ถ์ํ(์ถ์ ํด๋์ค๊ฐ ์๋ ์ธํฐํ์ด์ค)๋ก ์ฝ๋ฉํ๋ DI ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ๋จ์ํ ๋ก์ปฌ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์ ๊ด์ ์์ ์ด๊ฒ์ ์ธํฐํ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ์ ์ฌ์ฉํ๋ ASP.NET Core ์ด๋ํฐ ํด๋์ค๋ฅผ ์ ๊ณตํ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ํฐ๋ฅผ ์ฌ์ฉํ๋๋ก ASP.NET Core๋ฅผ ๊ตฌ์ฑํ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋ฐ์ด๋ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
```C#
// ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐธ์กฐ
Newtonsoft.Json ์ฌ์ฉ;
// ๊ฐ๊ฒฐํจ์ ์ํ ๋งค์ฐ ์์งํ ์
// ์์ ์ ๋ง๋ ๋ค
๊ณต๊ฐ ํด๋์ค NewtonsoftAdapter : ISerializer
{
๊ฐ์ธ JsonSerializerSettings _settings;
๊ฐ์ธ ์์ _format;
public NewtonsoftAdapter(JsonSerializerSettings Configuration, Formatting FormatOption)
{
_settings = Configuration;
_format = FormatOption;
}
// interface method
public string Serialize<T>(T Subject)
{
return JsonConvert.SerializeObject(Subject, _format, _settings);
}
// interface method
public T Deserialize<T>(string SerializedContent)
{
return JsonConvert.DeserializeObject<T>(SerializedContent, _settings);
}
}
...
// ํ์ฌ ์ฌ์ฉ์ ์ ์ ์ต์
์ด ์๋ ์ค์ ์ด๋ํฐ
var ์ค์ = ์๋ก์ด JsonSerializerSettings
{
MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore
};
var ์ด๋ํฐ = new NewtonsoftAdapter(์ค์ , Formatting.Indented);
// asp.net ์ฝ์ด ๊ตฌ์ฑ
// ์ด๋ํฐ๊ฐ ISerializer๋ฅผ ๊ตฌํํ๋ ๊ณณ(๋๋ ์ฌ๋ฌ๋ถ์ด ์๊ฐํด๋ธ ์ด๋ฆ)
// ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ ์์ ๋ง์ UseXYZ() ํ์ฅ ๋ฉ์๋๋ฅผ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
app.UseSerializer(์ด๋ํฐ);
```
JSON ๊ณผ ๊ฐ์ ๊ตฌ์กฐํ๋ ํ ์คํธ๋ฅผ ํฌํจํ์ฌ SIMD ๊ธฐ๋ฐ ํ ์คํธ ๊ตฌ๋ฌธ ๋ถ์์์ ๋ง์ ๋ฐ์ ์ด ์์์ต๋๋ค. .NET Core์ ์์ ์ด ์ด ์ฑ๋ฅ ์์ค์ ๋๋ฌํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
Hey, Microsoft Research์๋ ์๋ก์ด ๊ณ ์ฑ๋ฅ ์๋ฃจ์ ์ด ์์ต๋๋ค !
@AnthonyMastrean ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋ํ ์ด ํ์ฌ Json impl์ด simdjson๊ณผ ์ด๋ป๊ฒ ๋น๊ต๋๋์ง์ ๋ํ ์์ด๋์ด๋ฅผ ์ป๊ธฐ ์ํด ๋ชจ๋ ๋ฒค์น๋งํฌ์ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , simdjson์ ์์ฑ์๋ ์์ง ์ด ํ๋ก์ ํธ๋ฅผ ์์ ํ ๊ฒ์ํ๋ ์์ ์ ํ๊ณ ์๋ค๊ณ ๋งํ์ต๋๋ค (๋ด ์๊ฐ์ ๋ ๋ง์ ๋ฌธ์). ์ง๊ธ ์ HN์์ ์ด ํ๋ก์ ํธ์ ๋ํ ํฅ๋ฏธ๋ก์ด ํ ๋ก ์ ์ฝ์ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
.NET Core 3.0์ ํ๋ซํผ ์ข ์ ๋ด์ฅ ํจ์ ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ํ์คํ ํ ์ ์์ต๋๋ค ๐
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ์น ๋ฒ์์์ ๋คํธ์ํฌ๋ ์ฃผ์ ๋ณ๋ชฉ ํ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ช ์ด ์์ ๊ธฐ๊ฐ๋ฐ์ดํธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋ค๋ ๊ฒ์ ๋ฉ์ง ์ผ์ด์ง๋ง ์น ํ๋ก์ ํธ์๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์คํดํ์ง ๋ง์ธ์. ์ด์ ๊ฐ์ ์ฑ๋ฅ ์ต์ ํ๋ ๋งค์ฐ ํ๋ฅญํ๋ฉฐ ๋งค์ฐ ์์ JSON ๋ฌธ์์๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด์ ์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํผํ๊ณ ๋ชจ๋ ๊ฒ์ ๋คํธ์ํฌ ๊ณ์ธต์ ๋งค์ฐ ๊ฐ๊น๊ฒ ์ด๋ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ๋ง์ผ๋ก๋ ์ด๋ฏธ JSON.NET์ ๋นํด ์ฑ๋ฅ์ด ๋ง์ด ํฅ์๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ธฐ ์์ ์ด ์๋ฃ๋๋ฉด ์ถ๊ฐ ์ต์ ํ๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ ๋ ๋ค๋ฅธ ์ด์ผ๊ธฐ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ผํ๋ ๊ณณ์์๋ ๋งค์ผ ํ ๋ผ๋ฐ์ดํธ์ JSON์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. .NET ๋ฐ F#์ ์ฌ์ฉํ์ฌ ๋ง์ JSON ๋ฌธ์๋ ์ฒ๋ฆฌํ๋ ๋ค๋ฅธ ์ฌ๋๋ค๋ ์๊ณ ์์ต๋๋ค. JSON์ ๋จ์ํ ์๋ฒ => ๋ธ๋ผ์ฐ์ ์ ์ก ๋ฉ์ปค๋์ฆ์ด ์๋๋๋ค. ์์ํ ๋ฐฑ์๋ ์๋๋ฆฌ์ค์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
OFC; ๋ฐฑ์๋๊ฐ AVRO/Protobuf์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ ํํ๋ ๊ฒ์ด ๋ ๋ซ์ง๋ง ์ข ์ข ๊ทธ๊ฒ์ด ์ด๋ ต๊ณ JSON์๋ ๋ช ๊ฐ์ง ์ด์ ์ด ์์ต๋๋ค(๋ง์ง๋ชปํด ์ธ์ ํฉ๋๋ค). ์ ๋ง ๋น ๋ฅธ JSON ํ์๋ฅผ ๊ฐ๋ ๊ฒ์ ์ฐ๋ฆฌ์ ์ ์ฌํ ํ์ฌ๋ฅผ ์ํด ๋ฌธ์ ๊ทธ๋๋ก ํ ๋ฌ์ 10,000๋ฌ๋ฌ๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
@poke ์ด ํ๋ก์ ํธ๋ .NET Core(ASP.NET ์๋...)์
.NET Core 3.0์ ๋ํ ์ด ํน์ ์ต์ ํ ๊ธฐ์ ์ ๋ํด ์์ ํ๊ธฐ์๋ ๋๋ฌด ๋ฆ์๋ค๋ ์๊ฐ์ ๋์ํ ์ ์์ง๋ง, ์ต์ ํ๊ฐ ๋ฏธ๋์ ๊ฐ๋ฅํ๋๋ก(์ฆ, ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด) ์ผ๋ถ ์กฐ์ฌ๊ฐ ์ง๊ธ ์ํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ).
JSON์ C# ํด๋์ค์ ๋งคํํ๊ธฐ ์ํ ์์ฑ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ์ ์ํ๋ ํตํฉ ๋งคํ ์ด์ ๋ธ๋ฆฌ('System.Text.Json.Mapping')์ ๊ฐ์ ๊ฒ์ ๋ง๋๋ ๊ฒ์ด ๋ ๋์๊น์? ์ด ์์ ์ ๊ตฌํํ ํ ๊ธฐ์กด์ ๋ชจ๋ JSON ํ์/๋ผ์ดํฐ๋ฅผ ์ฑํํ์ฌ ํตํฉ ๋งคํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ .NET Standard ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ ํต ์์ด ๋ค๋ฅธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
@AlexeiScherbakov ์๋ก์ด ์ถ์ํ๋ ์ค์ ๋ก ๊ทธ๋ค์ง ๋์์ด๋์ง ์์ต๋๋ค. ๊ณตํต ์ถ์ํ๋ฅผ ์ ํํ์ฌ ๋ค์ ์์ ์ ์ ํํ๊ณ ์ถ์ํ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ ๋ง์ ๊ฒ์ ํ์๋ก ํ๋ ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํญ์ ์์ ๊ฒ์ ๋๋ค. ์ ๋ฅผ ๋ค์ด ๊ทธ๋ฌ์ต๋๋ค .
์ ๋ ์ด ์๋ก์ด ๊ตฌํ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ถ์ํ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ์ด๋ค ์ด์ ๋ ์ ๊ณตํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํนํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด์จ๋ ํจ์ฌ ๋ ํ๋ถํ ๊ธฐ๋ฅ์ ๊ฐ๋๋ก ์ค๊ณ๋ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ด๋ฏธ DataContract/DataMember ํํ์ ๊ธฐ์กด netstandard ์ถ์ํ๊ฐ ์์ต๋๋ค. ์ด ์ถ์ํ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ค๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค(์ถ์ํ๊ฐ ๋ค์ ์ ํ์ ์ผ์ง๋ผ๋).
๋ฌด์ ์์ฑ ์ธ์๋ 10์ต ๊ฐ์ ์๋ก์ด ์์ฑ๊ณผ ์๋๋ฆฌ์ค๋ฅผ ์์ฉํ ์ ์์ต๋๋ค. ํ์ค์์ ๋ฒ์ด๋๊ฑฐ๋ ๋ ๊ฑฐ์๋ฅผ ์ง์ํ๋ ค๋ฉด JSON์ ํด๋์ค์ 1:1 ๋งคํํ๋ ๋์ json.net์ ์ฌ์ฉํ์ญ์์ค.
๊ฐ์ธ์ ์ผ๋ก ์ ๋ JSON <=> C# ํด๋์ค์ ๋ํด ๋ณ๋ก ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. JSON ๋ชจ๋ธ์์ ์์ฑ๋ C# ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ JSON ํ์ฑ/์ฐ๊ธฐ ๊ฐ๋
์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด (JSON <=> C# ํด๋์ค์ ๋ํด ๋ณ๋ก ์ ๊ฒฝ ์ฐ์ง ์๋) ์ผ์ข
์ ๊ฐ์ฒด ๋ชจ๋ธ์ ์๋ณตํ์ง ์๊ณ ๋ ์ ๋ง ํจ์จ์ ์ธ ํ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
@mrange ๊ทธ๊ฒ์ด ๋ ์์ ์๊ฐ์ ๋ชฉ์ ์ ๋๋ค
ํ๋ซํผ์์ ์ ๊ณตํ๋ JSON API์์ Reader/Writer API๋ฅผ ๊ธฐ๋ํ ์ ์๋ค๋ ๋ป์ธ๊ฐ์? Reader/Writer ํจํด์ด ๊ฐ์ฅ ํจ์จ์ ์ธ๊ฐ?
ํ์ฌ System.Text.Json
์๋
Utf8JsonReader
- UTF-8๋ก ์ธ์ฝ๋ฉ๋ JSON ํ
์คํธ๋ฅผ ์ฝ๋ ๋น ๋ฅด๊ณ ์บ์ฑ๋์ง ์์ ์ ๋ฐฉํฅ ์ ์ฉ ๋ฐฉ๋ฒ์
๋๋ค.Utf8JsonWriter
- ^ Utf8JsonReader
์ ๊ฐ์ง๋ง ์ฐ๊ธฐ์ฉ์
๋๋ค.JsonDocument
- JSON ํ์ด๋ก๋์ ๋ํ ์ฝ๊ธฐ ์ ์ฉ ์์ ์ก์ธ์ค ๋ฌธ์ ๋ชจ๋ธ์
๋๋ค.์์ ๋ชจ๋ ์ ํ์ (๋ค์) ํ ๋น์ด ์์ด์ผ ํฉ๋๋ค ๐
์ฐ๋ฆฌ๋ simdjson ๋ ผ๋ฌธ์ ๊ฒ์ํ์ต๋๋ค : https://arxiv.org/abs/1902.08318
simdjson์ C# ํฌํธ์ ๋ํ ์์ ๋ ์งํ ์ค์ ๋๋ค. https://github.com/EgorBo/SimdJsonSharp
cc @EgorBo
JSON์ C# ํด๋์ค์ ๋งคํํ๊ธฐ ์ํ ์์ฑ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ์ ์ํ๋ ํตํฉ ๋งคํ ์ด์ ๋ธ๋ฆฌ('System.Text.Json.Mapping')์ ๊ฐ์ ๊ฒ์ ๋ง๋๋ ๊ฒ์ด ๋ ๋์๊น์? ์ด ์์ ์ ๊ตฌํํ ํ ๊ธฐ์กด์ ๋ชจ๋ JSON ํ์/๋ผ์ดํฐ๋ฅผ ์ฑํํ์ฌ ํตํฉ ๋งคํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ .NET Standard ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ ํต ์์ด ๋ค๋ฅธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์๋ก์ด ์ถ์ํ๊ฐ ์์ฑ์ ์์กดํ์ง ์๊ธฐ๋ฅผ ์ ๋ง๋ก ๋ฐ๋๋๋ค. ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊นจ๋ํ POCO ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ DI๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ์ ๋ํด ์ ํ์๊ฐ ์๋๋ก ํฉ๋๋ค. ๊ตฌํ์ ํ์ํ ์์ฑ์ผ๋ก ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฅ์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ์ด๋ก ์ธํด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ์กด ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ json์ ๋งคํํ๋ ์ถ๊ฐ ํด๋์ค๊ฐ UI ๋ ์ด์ด์ ์์ฑ๋ ์ ์์ต๋๋ค.
์๋ง๋ json์ C# ํด๋์ค๋ก 1-1 ๋งคํํ๋ ๊ฒ์ด ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ผ ๊ฒ์ ๋๋ค. ์ ์ด๋ ์ด๋ค ๊ฒฝ์ฐ์๋ viewmodel ์ ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ฌ์ ํ ํ์ํ๋๋ผ๋ ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
ํ์ํ์ง ์์ ์์ฑ์ ๋ฌด์ํ๊ณ ์ง๋ ฌํ ์ธก๋ฉด(์: ๋ํ ๋ ํ์ค์นผ ์ผ์ด์ค)์ ์ต์ํ ์ ์ดํ๋ โโ์ผ์ข ์ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
@mrange ๊ทธ๊ฒ์ด ๋ ์์ ์๊ฐ์ ๋ชฉ์ ์ ๋๋ค
@davidfowl ์ API๊ฐ ์ด ๊ฒฝ๋ก๋ก ๊ฐ๊ณ ์๋ค๋ ๋ป์ธ๊ฐ์? ๋์์ธ์ด ์์ฑ๋์๋์?
์ฐ๋ฆฌ๊ฐ ๋งํ๋ ๋๋ก ์ง๋ ฌํ ์ง์์ด ์์ ๊ด๋ จ ๋ฌธ์ ๋ ๋ค์
- ์๊ฐ ์ ์ฝ์ผ๋ก ์ธํด ํผ๋๋ฐฑ์ ์์งํ๊ธฐ ์ํด ๊ธฐ๋ฅ ์ธํธ๋ 3.0์ฉ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์ต์ ์ ํ์ ๋์์ผ๋ก ํฉ๋๋ค.
- ๋จ์ POCO ๊ฐ์ฒด ์๋๋ฆฌ์ค๊ฐ ๋์์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก DTO ์๋๋ฆฌ์ค์ ์ฌ์ฉ๋ฉ๋๋ค.
- ํ์ ๋ฆด๋ฆฌ์ค ๋ฐ ์ปค๋ฎค๋ํฐ์์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ํด ํ์ฅํ ์ ์๋๋ก ์ค๊ณ๋ API์ ๋๋ค.
- ๋ค์ํ ์ต์ ์ ์ ์ํ๊ธฐ ์ํ ๋์์ธ ํ์ ์์ฑ์ด์ง๋ง ๋ฐํ์ ์ ์์ ์ ๊ณ์ ์ง์ํฉ๋๋ค.
- ํธํ์ ์ํด ํ์ค ๋ฆฌํ๋ ์ ์ผ๋ก ํด๋ฐฑํ๋ IL Emit์ ์ฌ์ฉํ๋ ๊ณ ์ฑ๋ฅ.
๋ํ ์ด๊ฑฐํ ๋ณํ, null ์ฒ๋ฆฌ, ๋ํ ๋ PascalCasing ๋ฑ์ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
์ด์ ๋ํ ํผ๋๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ์ด์ ๋๋ pull request์ ์๊ฒฌ์ ๋จ๊ฒจ์ผ ํฉ๋๋ค.
@lemir ์์ฐ, ์ ๋ง
TechEmpower ์
TechEmpower repo ๋ฐ ASP.NET repo ์์ ์ด๋ฌํ ๊ตฌํ์ ์ฐพ์์ต๋๋ค.
@KPixel ์ง๋ ฌํ ๋ง์ฃ ? ํํธ simdjson์ ํ์์ ๋๋ค. ์ฉ์ด์ ๋ํด ํผ๋ํ์ง ์๋ ํ ์ด๋ฌํ ๊ฒ๋ค์ด ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์งํ๋ฉ๋๊น?
๋ด ์๋ชป์ด์ผ. ๋๋ ์ญ์ง๋ ฌํ ๋ถ๋ถ(ํ์๋ฅผ ์ฌ์ฉํ ๊ฒ)์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค.
System.Text.Json
๋ .net ํ์ค ๋๊ฒ ํจํค์ง๊ฐ ๋ ๊น์? ๋๋ .net core 3.0์์๋ง ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์
๋๊น?
@John0King ์ ์ฌ๊ธฐ๋ฅผ ๋ณด์ญ์์ค: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/source_package/README.md
์ฌ์ฉ์ฑ๋ ์๋ก์ด JSON ํจํค์ง์ ์ด์ ์ด ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์๊ฐํ๋ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ JSON ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ ์ง์์ ๋๋ค. Newtonsoft๋ ์ด์ ๋ํ ๋น์ฉ์ ์ฒญ๊ตฌํฉ๋๋ค. ์ด๊ฒ์ XML ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ซํผ์์ ๋ฌด๋ฃ๋ก ์ ๊ณต๋์ด์ผ ํ ๋งํผ ์ถฉ๋ถํ ๊ธฐ๋ณธ์ ์ ๋๋ค.
@jemiller0 ๋ด ์ธ์์ XML ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ๋ค์ ํผํฉ ๋ฐฑ์ด์๊ณ JSON ์คํค๋ง๊ฐ ์ค์ ๋จ์ด์์ ๊ทธ๋ ๊ฒ ์ฑํ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ถ๊ฐ ๋จ๊ณ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ํญ์ ์คํค๋ง ๊ฒ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค... ๋ฌผ๋ก , ์ฌ๊ธฐ์๋ ์ํํธ์จ์ด ๋ผ์ด์ ์ค๋ฅผ ์ทจ๋ํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ง๋ง ํฐ ๋ฌธ์ ์ ๋๊น?
@lemire ์, ์คํ ์์ค ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐ ์ค์ด๊ณ ๋ชจ๋ ์ฌ๋์ด ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ค๋ฉด ํฐ ๋ฌธ์ ์ ๋๋ค. XML ๊ตฌ๋ฌธ ๋ถ์์ ํผํฉ ๋ฐฑ์ด ์๋๋๋ค. ํจ๊ณผ๊ฐ์๋ค. JSON ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ์ ๋์ผํฉ๋๋ค. ์ด๋ฅผ ์ํ ๊ธฐ๋ณธ ์ ๊ณต ๋ฌด๋ฃ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ .NET ํ๋ซํผ์ ๊ฒฝ์๋ ฅ์ด ์์ต๋๋ค.
์ค์ ์ธ๊ณ์์ ์ฌ์ฉ๋๋ json ์คํค๋ง๋ฅผ ๋ณธ ์ ์ด ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ทธ๊ฒ์ ์ฌ๊ธฐ์ ๋ ผ์ ๋ ๊ตฌํ์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋คํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ json.net์ ์๋ 10์ต ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ๋จ์ ์ค ์ด๋ ๊ฒ๋ ์ฌ๊ธฐ์์ ๊ตฌํ๋์ด์๋ ์ ๋ฉ๋๋ค. ์ด๊ฒ์ ์ด๊ฒฝ๋์ ๋น ๋ฅธ ๊ตฌํ์ ์ง๋์ง ์์ต๋๋ค. json ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด json.net์ ๋ํ ๋ผ์ด์ ์ค๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ. ์์ ๋ง์ ์คํ ์์ค ๊ตฌํ์ ๋ง๋ค๊ณ ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋์ญ์์ค.
@jemiller0
์ ๋ง ๊ถ๊ธํฉ๋๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ JSON ์คํค๋ง ์ง์์ ์ ๊ณตํฉ๋๊น?
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉํ๋ JSON๊ณผ ํจ๊ป ์๋ํ๋ ๊ณ ์ฑ๋ฅ, ์ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ ๋๋ค. JSON.NET์ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ JSON ์คํค๋ง์ ๋๋ถ๋ถ์ ํฌํจํ๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
JSON ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ์์ ๋กญ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ๋ฎ์ ์์ค์ด์ด์ผ ํฉ๋๋ค.
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ JSON ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ๋ซํผ์ ๊ฒฝ์๋ ฅ ์ฌ๋ถ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉํ๋ JSON๊ณผ ํจ๊ป ์๋ํ๋ ๊ณ ์ฑ๋ฅ, ์ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ ๋๋ค. JSON.NET์ ๊ณ ๊ธ ๊ธฐ๋ฅ ๋๋ถ๋ถ์ ํฌํจํ๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
Newtonsoft.Json์ ๋์ฒดํ ์ ์๋๋ก ์ค๊ณ๋ ๋ ๋์ ์์ค์ ๊ธฐ๋ฅ๋ ํฌํจํ๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋
@poke ๋น์ ์
@lemire ๊ณง Python์ ํ์ธํ ๊ฒ์ ๋๋ค. ์ด๋ ์์ ์์ ๋๋ ๊ทธ๊ฒ์ด ๋ด์ฅ๋์ด ์๊ฑฐ๋ ์ฝ๊ฒ ์ค์นํ ์ ์๋ ํจํค์ง๋ก ํฌํจ๋์ด ์์์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์๋ค๋ฉด ๋งค์ฐ ๋๋์ ๊ฒ์ ๋๋ค. ์ง๊ธ ํ์ํ ๊ฒ์ NJsonSchema๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ๋งจ ์์์ ๋ฌธ์๊ฐ ์๋ง์์ ์ ์ ์์ต๋๋ค. ์, ํ์ง์ด ์ข๊ฑฐ๋ ์ข์ง ์์ ์ ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ฒ์ ์์ ํ ์ ๋น์ฟผํฐ์คํ๊ณ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ JSON ์์ ๊ณผ ๊ฐ์ ์ผ์ ์ข์ ์์ด๋์ด์ ๋๋ค. ์์ฉ ์ํํธ์จ์ด๋ ๋ฌธ์๊ฐ ์๋ ํ์ฌ ํจํค์ง์ ๋ชจ๋ ์์กดํฉ์๋ค. .NET์ Python๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ๋ซํผ๊ณผ ์ผ์นํด์๋ ์ ๋ฉ๋๋ค. ๊ทธ๋ค์ ์ฆ์ ์ ์ ํ ๋ฌธ์์ ํจ๊ป ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ทธ๋ค์ ์ด๊ฒจ์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ญ์ฌ์ ์ผ๋ก ๊ทธ๊ฒ์ด ์๋ํ ๋ฐฉ์์ ๋๋ค. ๋ด๊ฐ ์ผํ๋ ๊ณณ์์ ๋ชจ๋๊ฐ .NET์ ์ซ์ดํ๊ณ ๋ด๊ฐ Python์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๊ณ ์ถ์ดํฉ๋๋ค. ๋์น์ฑ์ จ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ์ ๋ ๋ง์ ์ฌ๋๋ค์ด ๋ฐฐ๋ฅผ ๋ฒ๋ฆฌ๊ณ Python์ผ๋ก ์ ํํ๊ณ ์์ต๋๋ค. ์์ฌ์๊ฒ JSON ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฐ์ ๊ฐ๋จํ ์์ ์ ์ํํ๋ ค๋ฉด ๋ผ์ด์ ์ค๋ฅผ ๊ตฌ์ ํด์ผ ํ๋ค๊ณ ๋งํ์ต๋๋ค. ๋ด๊ฐ ๋จผ์ .NET์ ์ฌ์ฉํ๊ณ ์ถ์ ์ด์ ์ ๋ํ ๋๊ฐ๋ก ๋ฌด์์ ์ป์ ์ ์๋์ง์ ๋ํ ์ง๋ฌธ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ด์จ๋ ๋ผ์ด์ผ์ค๋ฅผ ์ป์ ์ ์๋ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ํ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์ ๊ฒฝ์ฐ์ง ๋ง์ญ์์ค. ๋ฐ๋ผ๊ฑด๋ NJsonSchema๊ฐ ์ ๋๋ก ์๋ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. JSON์ผ๋ก ์์ ํ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ถ๋ช ํด์ผ ํ๋ ํ๋ ์์ํฌ์ ๋์ ๋๋ ๋๋ฝ์ ์ง์ ํ๊ณ ์์ต๋๋ค.
์ ๋ ์ง์ฅ์์ JSON Schemas๋ฅผ ์ฌ์ฉํ๊ณ ์ ๋ฐ๋ง ์ข์ JSON ํ์ + JSON ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ณด๋ค ์ ๋ง ์ข์ JSON ํ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ AFAIK JSON ์คํค๋ง๋ ํ์ฌ _draft_ 7์ ๋๋ค. ๋ฐ๋ผ์ ์คํค๋ง์ ํจ๊ป ๋น ๋ฅด๊ฒ ๋ฐ์ ํ ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก JSON ์คํค๋ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ๋ก๋๋งต์ JSON ์คํค๋ง๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
@jemiller0
XML์ ๋ํด ์ญ์ฌ์ ์ผ๋ก ์ง์๋์๋ ๊ฒ๊ณผ ๋์ผํ ์์ค์ JSON ์ง์์ ๊ฐ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค.
.Net์๋ XSLT ๋ฐ XPath์ ๋ํ ์ง์๋ ํฌํจ๋ฉ๋๋ค. "๋์ผํ ์์ค์ ์ง์"์ ์ํ๋ฉด JSON์ฉ ๋ฒ์ ๋ ํ์ํ์ง ์์ต๋๊น?
๋ด๊ฐ ๋งํ๋ ค๋ ๊ฒ์ JSON ์ํ๊ณ๊ฐ XML ์ํ๊ณ์ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค. ๋ ๋ค ์ฌ์ฉ ํจํด์ด ๋ค๋ฅด๊ณ ๊ด๋ จ ๊ธฐ์ ์ ์ฌ์ฉ ํ์์ ํ์คํ ์์ค์ด ๋ค๋ฆ ๋๋ค. ๋ํ NuGet, git ๋๋ GitHub๊ฐ ์กด์ฌํ๊ธฐ ์ ์ XML์ด .Net์ ์ถ๊ฐ๋์์ต๋๋ค. ์์ฆ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๊ณ ํจ์ฌ ๋ ์์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋์, ์๋์, ๋งน๋ชฉ์ ์ผ๋ก "XML์ด ์ด๊ฒ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก JSON๋ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋จ์ํ ๊ตฌ๋ฌธ ๋ถ์๊ณผ ์ง๊ตํฉ๋๋ค. ์ด๋ ์์ ์์ ์ ํจ์ฑ ๊ฒ์ฌ ์ง์์ด ์ถ๊ฐ๋๋ฉด ์ ๋์ ์ผ๋ก ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค(๋ค๋ฅธ ํจํค์ง์ ์์ ์๋ ์์). ๊ทธ๋ฌ๋ ์ ์ ํ ๊ตฌ๋ฌธ ๋ถ์ ์ง์์ ์ํด์๋ ์ ํ ํ์ํ์ง ์์ต๋๋ค.
API REST ์์ฒญ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ฒฉํ๊ฒ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
API๋ฅผ ํตํด ๋ค์ด์ค๋ json์ ์ค๋ฅ ์์ด ์ ์ฅํ๊ณ ๋์ค์ JS์์ ํํ ์ผํ ๋ฑ์ผ๋ก ์ธํด ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๊ธ ๊ทธ ์์ฒญ์ ํ์ธํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@philip-haydon @freerider7777 ๊ด์ฐฎ์ JSON ํ์๋ JSON ์ฌ์์ ์ค์ํด์ผ ํ๋ฉฐ ๋ฌธ์ ํ์์ด ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฒฝ์ฐ(์: ๋ค์ ์ผํ๊ฐ ์๋ ๊ฒฝ์ฐ) ์ค๋ฅ(๋ฐ/๋๋ ๊ฒฝ๊ณ )๋ฅผ ๋ฐ์์์ผ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ด์ง๋ง JSON ๋ฐ์ดํฐ๋ฅผ ์คํค๋ง์ ๋น๊ตํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ์๋ ๋ค๋ฆ ๋๋ค(์ ์ด๋ ์ด๊ฒ์ด ์ ๊ฐ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค).
๊ฐ์ฅ ํฐ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ์ฌ ์ค ํ๋์ธ Microsoft์๋ ๊ฒ์ฆ ์์ ์ ํ ์ฌ๋์ด ์์ต๋๋ค. ๋น ๋ฅธ ํ์๊ฐ ๋ ์ค์ํฉ๋๋ค. ๋น์ ์๋๋ก ์ ํจํ์ง ์์ JSON์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. :-) ๋น ๋ฅธ ๊ฒ์ฆ์ด ์ ์ฉํ ์ ์๋ค๋ ์๊ฐ์ ๋๊ตฌ์๊ฒ๋ ์ผ์ด๋์ง ์์์ต๋๋ค. ์ด๊ฒ์ ASP.NET Core์ ๋ง์ฐฌ๊ฐ์ง๋ก Web Forms๋ก ๋น ๋ฅด๊ฒ ์ ๊ทธ๋ ์ด๋๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๊ธ ๊ทธ ์์ฒญ์ ํ์ธํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@philip-haydon ์ด๋ฌํ json์ด ์๋ ์ปจํธ๋กค๋ฌ ์ฝ๋์์:
ModelState.IsValid == ์ฐธ
๐คฆโโ๏ธ
์ด๋ฏธ NSwag + System.ComponentModel.DataAnnotations
๋ฅผ ์ฌ์ฉํ์ฌ json ์คํค๋ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
<Project Sdk="Microsoft.NET.Sdk" >
<ItemGroup>
<PackageReference Include="NSwag.MsBuild" Version="12.0.10" />
</ItemGroup>
<ItemGroup>
<Compile Remove="**\*.g.cs" />
</ItemGroup>
<ItemGroup>
<SchemaFiles Include="$(MSBuildProjectDirectory)\..\schema\*.json" InProject="false" />
<EmbeddedResource Include="$(MSBuildProjectDirectory)\..\schema\*.json" LinkBase="Messages\Schema" />
</ItemGroup>
<Target Name="GenerateMessageContracts" BeforeTargets="GenerateAssemblyInfo">
<Exec Command="$(NSwagExe_Core21) jsonschema2csclient /name:%(SchemaFiles.Filename) /namespace:MyNamespace.Messages /input:%(SchemaFiles.FullPath) /output:$(MSBuildProjectDirectory)/Messages/%(SchemaFiles.Filename).g.cs" />
<ItemGroup>
<Compile Include="**\*.g.cs" />
</ItemGroup>
</Target>
</Project>
@lemire ์ ๋์ํฉ๋๋ค. JSON ๊ตฌ์กฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๊ฒ๊ณผ ์คํค๋ง์ ๋ํด JSON์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๋ฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋๋ Microsoft๊ฐ ์ ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ ์ํด ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๋ค์๋ค๋ ๋ฐ ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ํ์๋ ์ฝ๋ ์ผ์ด์ค์ด๋ฉฐ ์ด JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ๋์์ธ์ ๋ง์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ asp.net ์ฝ์ด๊ฐ ์๋ํ๋ ๋ฐ ํ์ํ ๋งํผ๋ง ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๊ตฌ๋ฌธ ๋ถ์์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์์ ๋ถ๋ช ํ ํ์ต๋๋ค. newtonsoft์ ํ์์ ํจ๊ป ์ ๊ณต๋๋ _extras_๋ฅผ ํฌํจํ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค. (์ค๋ ๋ ์๋ถ๋ถ์ @poke ์ฃผ์์ ์ฐธ์กฐํ์ญ์์ค).
๋๋ ๊ทธ๋ค์ด ์๋์ ์ผ๋ก ๋ชจ๋ ์ข ์๋ฆฌ์ ํํ๋๊ณผ ํจ๊ป ์ด๊ฒ์ ๋์์ธํ์ง ์์๋ค๋ ์ฌ์ค์ด ๊ทธ๊ฒ์ ์ด๋ฑํ ์ ํ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋ฏธ๋ฆฌ๋ณด๊ธฐ 4์ ํจ๊ป ์ ๊ณต๋ฉ๋๊น?
System.Text.Json.Serialization.Policies.JsonValueConverter๋ฅผ ๋ง๋ค ๊ณํ์ด ์์ต๋๊น?
System.Text.Json
๋ nuget์ ํตํด ์์ ํ .Net ์ง์๊ณผ ํจ๊ป ๋ฐฐ์ก๋ฉ๋๊น? ์์ ํ ์ํธ ์ด์ฉ์ฑ์ ๋ณด์ฅํ๊ณ ์ ์ฒด ํ๋ ์์ํฌ์ ์ด์ ์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
System.Text.Json
๋ ์ต๊ทผ์ OOB ๋ฐฐ์ก์ ์ํ netstandard2.0
๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. https://github.com/dotnet/corefx/pull/37129 :
๊ฐ๋ฅํ ๊ฒฝ์ฐ .NET Core 3.0์ ๋์์ผ๋ก ํ๊ณ ๊ธฐ๋ณธ ์ ๊ณต System.Text.Json API๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ netstandard2.0์ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ(์: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์ธ ๊ฒฝ์ฐ) netstandard2.0๊ณผ ํธํ๋๋ NuGet ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฒด ํ๋ ์์ํฌ์ ์ด์
์ด๊ฒ๋ค์ ๋ ๋ญ์ผ? ๐ค
@kellang
๋ด๊ฐ ์ ํธํ๋ ๊ฒ์ ์ ์ฒด ํ๋ ์์ํฌ(4.5 ๋๋ ํ์ฉ ๊ฐ๋ฅํ ์ต์๊ฐ ์ด์), ํ์ค ๋ฐ ์ฝ์ด๋ฅผ ํฌํจํ์ฌ ๋ค์ํ ํ๋ฏธ๋ฅผ ๊ฐ์ง ๋๊ฒ์ ๋๋ค. ์ธ๋ฐ์ค ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ ๋งํฌ๋ ๋ฌธ์ ๋ ์ด ํจํค์ง๋ฅผ ์ฐธ์กฐํ์ง๋ง ์ง์๋์ง ์์ต๋๋ค.
https://www.nuget.org/packages/System.Text.Json
ํ์ฌ ์ง์๋๋ ํจํค์ง๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์ ํธํ๋ ๊ฒ์ ์ ์ฒด ํ๋ ์์ํฌ(4.5 ๋๋ ํ์ฉ ๊ฐ๋ฅํ ์ต์๊ฐ ์ด์), ํ์ค ๋ฐ ์ฝ์ด๋ฅผ ํฌํจํ์ฌ ๋ค์ํ ํ๋ฏธ๋ฅผ ๊ฐ์ง ๋๊ฒ์ ๋๋ค.
์ ๊ทธ๊ฒ์ ์ ํธํ ๊น์? ๋ค์ค ๋์์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ฉ๋๋ ๋ชจ๋ API๊ฐ ํ์ค์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ ๋จ์ผ ๋์์ ๊ฐ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค ๐
ํ์ฌ ์ง์๋๋ ํจํค์ง๊ฐ ์์ต๋๊น?
์์ง ๋ฐฐ์ก์ด ์ ๋ ๊ฒ ๊ฐ์์. PR์ ๋ฉฐ์น ์ ์ ๋ณํฉ๋์์ต๋๋ค. ๊ทธ ํจํค์ง๋ ํ์ฌ MS๋ก ์ด์ ๋ ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ์์ต๋๋ค.
@khellang ๊ทธ๊ฒ์ ์ธ๋ถ ์ฌํญ์ ๋ฌ๋ ค ์์ต๋๋ค. ๋๋ ์ผ๋ฐ์ ์ธ ์ง์ ์ํ๊ณ ์์์ต๋๋ค.
๋คํธ ํ์ค ๋ฒ์ ์ด ๋คํธ ์ ์ฒด ๋ฒ์ ์์ ๊ฐ๋ฅํ ๋คํธ ์ฝ์ด ๋ฒ์ ์์ ๋ฌด์์ด๋ ์๋ตํด์ผ ํ๋ค๋ฉด ์ธ ๊ฐ์ง ๋ฒ์ ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ ๋ฒ์ ์ ๋์์ผ๋ก ํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒ์ ๋ํ ์์ ๋งํฌ๋ ๋ฌธ์ ์ ์๋ ์ง์ ๊ณผ ๋์ผํ ์ผ๋ฐ์ ์ธ ์ถ๋ก ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๊ฒ ํจํค์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ ๋ ๊ฐ์ฅ ์ ํฉํ ์ ์ ํ ํ๋ ์ด๋ฒ๊ฐ ์๋์ผ๋ก ์ ํ๋ฉ๋๋ค. ๊ทธ๋์, ๊ทธ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ์ค์ด๋ฉด ์ ํ์ค ๋ง์ด ์ ํ๋ฉ๋๋ค.
์ธ๋ฐ์ค ํ๋ ์ด๋ฒ์ ๋ํ ๋์ ์ผ๋ฐ์ ์ธ ์ ํธ๋ ๋ด๊ฐ goto definition
์ผ ๋ ๋์ปดํ์ผ๋ ์์ค๋ฅผ ์ป๋ ๊ฒ์
๋๋ค. ๋ท ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ goto definition
ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก NotImplemented
์์ธ๋ฅผ ๋ฐ์์ํค๋ ์คํ
์์ค๋ง ๋ณผ ์ ์์ต๋๋ค.
์ ์ฒด ํ๋ ์์ํฌ์ ์ด์
์ด๊ฒ๋ค์ ๋ ๋ญ์ผ? ๐ค
๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ .NET Core๋ฅผ ์ ๋์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์๊ฐ ์๋๋ผ .NET Core๊ฐ ์ต์ ์ด ์๋๊ธฐ ๋๋ฌธ์ .NET Framework๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ต์ ์ธ ๊ฒฝ์ฐ .NET Core๋ฅผ ์ฌ์ฉํฉ๋๋ค. Windows Server 2012(์ต์ .NET Core 3.0 ๋ฒ์ )๋ณด๋ค ๋ฎ์ Windows ๋ฒ์ ์ ๋์์ผ๋ก ํด์ผ ํ๋ ๊ฒฝ์ฐ .NET Framework๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. Windows Server 2008 R2 ์ดํ์ ๋ํ ์ง์์ ์ค๋จํ๋ ๊ฒ์ ๋งค์ฐ ๊ณ ํต์ค๋ฌ์ด ๊ฒฐ์ ์ด์๋ค๊ณ ํ์ ํ์ง๋ง, ์ ๊ทธ๋ ์ด๋/์ข ์ข ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒ์๋ถํฐ ๋ค์ ๋ง๋ค๊ณ ์ถ์ง ์์ ์๋ฒ๋ฅผ ๋ณด์ ํ ์ ๋ฃ ๊ณ ๊ฐ์ ๋ณด์ ํ ๋ชจ๋ ํ์ฌ์๊ฒ๋ ๋งค์ฐ ๊ณ ํต์ค๋ฌ์ด ๊ฒฐ์ ์ ๋๋ค. ์กฐ๊ธ ๋ ์๋ก์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก.
๋ด์ผ .NET Framework ์ฌ์ฉ์ ์ค๋จํ ์ ์๋ค๋ฉด ๋๋ณด๋ค ํ๋ณตํ ์ฌ๋์ ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง .NET Core 3.0 ์ด์์์ ๋ชจ๋ WPF ๋ฐ Windows Forms ๊ธฐํ๊ฐ ์์์๋ ๋ถ๊ตฌํ๊ณ Microsoft๋ ์ง์ ์ ์ฑ ์ ํตํด ์ด๋ฅผ ์ค์ง์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์์ต๋๋ค. ๋๋ ๋ง์ดํฌ๋ก์ํํธ์์ ๋ฃ๊ณ ์ถ์ดํ๋ ๋๊ตฌ์๋ ์ด ๋ฌธ์ ์ ๋ํด ๋ ผ์ํ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ์ฌํ๊ฒ๋ ๋๋ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋์๋ค๋ ํ์ธ ์ด๋ฉ์ผ๋งํผ ์์ง ๋ฐ์ง ๋ชปํ์ต๋๋ค.
@JesperTreetop ์ ์ํฐํ๋ผ์ด์ฆ์ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์๋ .NET Core ๋ฒ์ ์ ๋ํ LTS ์ง์ ๋ถ์กฑ์ ๋งํ ๊ฒ๋ ์๊ณ ;) 3.x์์ LTS ์ง์์ ๋ฐ๊ธฐ๋ฅผ ํฌ๋งํฉ๋๋ค. ์ ์กฐ์ง์ .NET ์ค๊ณ์๋ก์ ์ ๋ LTS๋ฅผ ์ง์ํ๋ 3.x ๋ฒ์ ์ ์ป๋ ๊ฒฝ์ฐ .NET Core ์ฑํ.
@marksmeltzer ์ด์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ .NET 5 ์๊ฐ ๋ .Net Core 3.1์ด LTS๊ฐ ๋ ๊ฒ์ด๋ฉฐ 2019๋ 11์์ ์ถ์๋ ์์ ์์ ๋ณด์ฌ์ค๋๋ค.
์ด ์๋ก์ด JSON ์ง๋ ฌ ๋ณํ๊ธฐ๋ F# ์ ํ์ ์ง์ํฉ๋๊น?
@rliman์ ํ์ฌ Guid ๋๋ Enum์ ์ง์ํ์ง ์์ผ๋ฏ๋ก ๊ฐ ๊ธธ์ด
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๊ฒ์ด ์๋ชป๋ ์ํคํ ์ฒ ์ค๊ณ ๊ฒฐ์ ์ ๋ํ ์ฑ๊ธํ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ค๋์ ์ ํ์ด์ผ ํ๋ ์ผ์ ๋๋ค.... ์ด์ ๋ชจ๋ ๊ณณ์์ ๋ง์ ๊ณ ํต์ ์ผ๊ธฐํ ๊ฒ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์์ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์์ ์ด๋ฅด๊ธฐ๊น์ง.
์ด ์๋ก์ด "๊ธฐ๋ฅ"์ "๋ถ๋๋ฝ๊ฒ" ๋ง๋๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
์ด๊ฒ์ MS๊ฐ ์ฒ์์ ์ผ๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ MS์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ชจ๋๊ฐ ๊ทธ ๋๊ฐ๋ฅผ ์น๋ฌ์ผ ํฉ๋๋ค.
NET Core๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฑด์ด ์ฝ๊ฐ "๋น ๋ฅธ" ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ์์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค... ์ด ์์ํ "๋ฏผ์ฒฉํ" ์ ๊ทผ ๋ฐฉ์์ ์๋๋ฅผ ์ฝ๊ฐ ๋ฆ์ถ๊ณ ๋ชจ๋ ์ฌ๋์ด ์จ์ ์ด ์ ์๋๋ก ํด์ผ ํ ์ ์์ต๋๋ค.
ASP.NET Core์์ ์ด๋ฌํ "๊ธฐ๋ฅ"(์ค์ํ ๋ณ๊ฒฝ ์ฌํญ)์ด ์๋ก์ด ํ์ค์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์๊ฐ์ ASP.NET Core๋ ์ํคํ ์ฒ ์ค๊ณ ํ๋ก์ธ์ค์ ์ฌ์์ ์ด ์ ์คํ ํ์ํฉ๋๋ค. ์ด๋ฌํ "๋์ค์ ๊ณ ์น ๊ฒ์ ๋๋ค" ๊ธฐ๋ฅ์ ๊ณ์ํด์ ๋ง๋ค๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ ์ด๊ธฐ ๋ฒ ํ ๋๋ถํฐ ASP.NET Core๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ .NET์์ ํฌ๊ฒ ๊ฐ์ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ MS ํ์ ์ ์ ๋ฉ์ถ๊ณ ์ฌ๊ธฐ์์ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํฉ๋๋ค. ์ฑ๊ธํ๊ณ ์ผ๊ด์ฑ ์๋ ์ํคํ ์ฒ ์ค๊ณ ๊ฒฐ์ ์ ๋๋ค.
๊ทธ๋ฅ ๋์๊ฐ์ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์ฝ์ผ์ญ์์ค ... ๋ฐ๋ณต๋๋ ์ฃผ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ด์ ์์์ ๋ ์์ ์ ์ธ ์ ํ์ ๋ง๋๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ๋ค์ ์๊ฐํด์ผ ํ ๋์ผ ์ ์์ต๋๋ค.
Classic .NET์ Core๋งํผ ๊ฐ๋ ฅํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ 2.0 ์ดํ๋ก ๋งค์ฐ ์์ ์ ์ด๊ณ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
๊ทธ๋ฅ ๋ด ์๊ฒฌ์ ๋๋ค.
์๋
ํ์ธ์ @suncodefactory ์
๋๋ค .
๋๋ ์ผ๋ง ์ ์ ppl์ด ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋ํด ms์๊ฒ ์๋ฆฌ์ณค์ ๋๋ฅผ ๊ธฐ์ตํฉ๋๋ค.
๋ด ๊ด์ ์์ Aspnet/core MVC API๋ mvc1/2 ์ดํ๋ก ๋งค์ฐ ์์ ์ ์ด์์ต๋๋ค! aspnet์ด 2.0 ์ดํ๋ก ์์ ์ ์ด์๋ ์ด์ ๋ ์ ํ ๋ณ๊ฒฝ/๊ฐ์ ๋์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค ๐.
์์งํ ๋งํด์ ์ง๋ ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ๋ชจ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ง์ํ๋ ์ฒํ๋ ๋์ ๊ทธ๊ฒ์ ๋ํด ๋ค์ ์๊ฐํ๊ณ ์์
์ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ฌธ์ ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ํด๊ฒฐํด์ผ ํ ์๋ชป๋ ๋ฌธ์ ์ ์ง๋ ฌํ๋ฅผ ์ฌ์ฉํ๋ ์๋ชป๋ ๋ฐฉ๋ฒ.
๋ช
ํ์ฑ, ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๋ฐ ํฅํ ํ์ฅ์ ์ง๋ ฌํ ๊ฐ๋ฅํ dto, ์ผ๋ฐ์ ์ธ ๋น์ฆ๋์ค ๋
ผ๋ฆฌ ๊ฐ์ฒด์์ ์ฌ์ฉ๋๋ ๋งค์ฐ ๋ค๋ฅธ ์ ์ถฉ์(๊ฐ์ธ์ฉ, ๋ง์ ๊ธฐ๋ฅ ๋ฑ)์ ๊ตฌ๋ํ๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ ํ ํ์ ๋ ธ๋ ฅ ์์ด ๋ท ํ๋ ์์ํฌ์์ Linux(๋ท ์ฝ์ด)๋ก ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ฌด์จ ์๊ธฐ๋ฅผ ํ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Microsoft๋ ์ค๋ซ๋์ ๊ธฐํ์ด ์ง๋ ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํ์ ๊ฐ์ํํ๋ ํ๋ฅญํ ์ผ์ ํ๊ณ ์์ต๋๋ค.
์๋ ํ์ธ์ @suncodefactory ์ ๋๋ค .
๋๋ ์ผ๋ง ์ ์ ppl์ด ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋ํด ms์๊ฒ ์๋ฆฌ์ณค์ ๋๋ฅผ ๊ธฐ์ตํฉ๋๋ค.
๋์๊ฒ ์์ ์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค... ์ด๊ฒ์ ์ด ํน๋ณํ ๊ฒฝ์ฐ์ ๋ถ์กฑํ๊ฑฐ๋ ์์ ํ ์๋ชป๋ ์ํคํ ์ฒ ๋์์ธ์ ๊ดํ ๊ฒ์ ๋๋ค.
๋ํ ์ ๋ ๊ณ ์ ์ ์ธ asp.net์ ๋ํด ์ด์ผ๊ธฐํ ์ ์ด ์์ต๋๋ค... ์ ๋ .NET Framework 2.0์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์์ ์ ์ธ ์ด์ ๋ (.net ์ฝ์ด๊ฐ .NET 4.6.1์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์) ๋น์ ์ด ์๋ชป ์ฃผ์ฅํ ๊ฒ์ฒ๋ผ ๊ฐ์ ์ด ์์๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค. ๊ทธ ์ด์ ๋ ์ ๊ณํ๋๊ณ ๊ฑด์ถ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
aspnet ์ฝ์ด๊ฐ ์ด ํน์ ์ค๋ ๋์ ์๋ฌด ๊ด๋ จ์ด ์๋ ํด๋์ asp.net mvc์ ๋น๊ตํ์ฌ ์ผ๋ง๋ ์ข์์ง์ ๊ดํด์.
์ด ์ค๋ ๋๋ MS๊ฐ ๊น์ด ์๊ฐํ์ง ์๊ณ ๋ค์ ํ ๋ฒ ์ถ์ํ๋ ค๋ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๊ดํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ ํ ํ์ ๋ ธ๋ ฅ ์์ด ๋ท ํ๋ ์์ํฌ์์ Linux(๋ท ์ฝ์ด)๋ก ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ฌด์จ ์๊ธฐ๋ฅผ ํ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Microsoft๋ ์ค๋ซ๋์ ๊ธฐํ์ด ์ง๋ ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํ์ ๊ฐ์ํํ๋ ํ๋ฅญํ ์ผ์ ํ๊ณ ์์ต๋๋ค.
์ด๋ฐ ๋ณํ๋ ์ ํ ์ผ์ด๋๋ฉด ์๋๋๋ฐ..... ๊ทธ๋ผ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๋ง์กฑํ์๋์?
๊ทธ๋ฆฌ๊ณ asp.net ํต์ฌ ํ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฌํ๋ ๋ฐ ํฐ ์ญํ ์ ํ๋ค๊ณ ๋งํ๋ ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค.
์ ๋ ๋ฒ ํ 3๋ถํฐ asp.net ์ฝ์ด๋ก ๊ฐ๋ฐํด ์์ผ๋ฉฐ ์ํคํ ์ฒ ์ค๊ณ ํ๋ก์ธ์ค๊ฐ ๋ถ์กฑํ๋ค๊ณ ํ์ ํฉ๋๋ค.
asp.net ์ฝ์ด๊ฐ ํด๋์์ ๋นํด ์ผ๋ง๋ ์ข์์ง์ ๊ดํด์๋... ์ ๋ ํด๋์๋ณด๋ค ๋ซ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด์๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ asp.net ์ฝ์ด๊ฐ ํด๋์๋ณด๋ค ๋ซ๋ค๊ณ ํด์ ์ํคํ ์ฒ ์ค๊ณ๊ฐ ํ๋ฅญํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ๊ทธ ๋์ ์์ ํ ๋ค๋ฅธ ์ฃผ์ ์ ๋๋ค.
์ด ๋ ผ์๋ฅผ .NET Core 3์ JSON ๊ธฐ๋ฅ์ผ๋ก ์ ํํ ์ ์์ต๋๊น?
์ด๋ฐ ๋ณํ๋ ์ ํ ์ผ์ด๋๋ฉด ์๋๋๋ฐ..... ๊ทธ๋ผ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๋ง์กฑํ์๋์?
๊ทธ๋์ ๊ฐ์ ์ ํด์ผ ํ์ง ์์ต๋๊น? ์ํํธ์จ์ด๊ฐ ๋ฐ์ ํ๊ณ ์ฑ์ฅํ๊ณ ๋ ์ข์์ง๊ธฐ๋ฅผ ์ํ์ง ์๋๋ค๋ฉด ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋๊ฒ ์ต๋๊น?
@suncodefactory
์ด๋ฐ ๋ณํ๋ ์ ํ ์ผ์ด๋๋ฉด ์๋๋๋ฐ..... ๊ทธ๋ผ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๋ง์กฑํ์๋์?
์, ์ด๋ฐ, "๋ณํ๋ฅผ ๊นจ๋ ๊ฒ"์ฒ๋ผ ๋ค๋ฆฐ๋ค๋ ๊ฒ์ ํ๋ก์ ํธ๋ฅผ ํ๊ธฐํ๊ณ ์ฒ์๋ถํฐ ์์ํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ผ๋ง๋ ๋ง์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ASP.NET Core 2.x/3.0์ ์์๋์ง ์ ์ ์์ต๋๊น?
??
@suncodefactory
์ด ์ค๋ ๋๋ MS๊ฐ ๊น์ด ์๊ฐํ์ง ์๊ณ ๋ค์ ํ ๋ฒ ์ถ์ํ๋ ค๋ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๊ดํ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ด ์ค์ ๋ก ์ด๋ป๊ฒ _๊นจ๋_ ๋ณ๊ฒฝ ์ฌํญ์ ๋๊น? ์๋ก์ด JSON API๋ ๊ธฐ์กด ํญ๋ชฉ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ค๋จํ์ง ์๋ .NET Core์ ๋์ ๋ ์์ ํ ์๋ก์ด API ์ธํธ์ ๋๋ค. ์, ๋ค์ํ ์ต์ ํ ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ์๋ ์ฌ๋ฌผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ง๋ง ์ด๋ฅผ ์ฝ๋์ ์ ์ฉํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
ํนํ ASP.NET Core์ ๋ํด ๋งํ๋ฉด _"์ด ํน์ ์ค๋ ๋์ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค."_ ์ผ๋ถ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์์กดํ๋ ๊ฒฝ์ฐ Newtonsoft.Json์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์, ์๋ํ๋ ค๋ฉด ์ผ๋ถ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ์ง๋ง ์ค์ ๋ก ์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ๊ทธ๋ ๊ฒ ํ๋ฉด ๋๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ์ ๋ง ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด์ ์ข์ ์ ์ ๋๋ค. ๋ ๋ง์ ์ ํ๊ถ์ด ์์ต๋๋ค.
์ด๋ค ์ด์ ๋ก๋ ์ด ๊ธฐ๋ฅ์ด ๋ง์์ ๋ค์ง ์๋๋ค๋ฉด ์์ ์ ์ด๊ณ ๊ณ ์ ๋ ๊ธฐ๋ฅ ์ธํธ๋ก ์๋ ค์ง .NET Framework๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ญ์์ค. ๊ทธ๊ฒ์ ๊ฝค ์ค๋ซ๋์ ๊ฑฐ๊ธฐ์ ๋จธ๋ฌด๋ฅผ ๊ฒ์ด๋ฏ๋ก ๊ทธ๊ฒ์ ์ ์ ์ผ๋ก ์์กดํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ _โ์ด ํน์ ์ค๋ ๋์ ๊ด๋ จ์ด ์๋โ_ ๊ฒฝ์ฐ ์ด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํญ๋ชฉ ๋ฐ๋ ์์ ๋ฅผ ์ ํํ๋ ๊ฒ์ ์ค๋จํ์ญ์์ค.
EF Core ์ฌ์ฉ์์ ๋ ๊ฐ์ง ์ง๋ฌธ์ ๋๋ค.
System.Text.Json
์ํ ์ฐธ์กฐ๋ฅผ ์ง์ํฉ๋๊น? ์ํ ์ฐธ์กฐ๋ ํด๋์ค ๊ฐ์ ์๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ํ์ ๋งํฌ๊ฐ ์๋ EF Core ๋ฐ์ดํฐ์์ ๋ฐ์ํ ์ ์์ต๋๋ค. Json.NET์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ผ๋ก ์ด๊ฒ์ ์ฒ๋ฆฌํฉ๋๋ค.c#
var json = JsonConvert.SerializeObject(entities, new JsonSerializerSettings()
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
System.Text.Json
์ญ์ง๋ ฌํํ ์ ์์ต๋๊น?@JonPSmith IMO ์ค์ํ์ง ์์์ผํฉ๋๋ค. ์ํฐํฐ๋ฅผ ์ง์ ์ง๋ ฌํํด์๋ ์๋ฉ๋๋ค. ํ๋ก์ ์ ์ ์ง๋ ฌํํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ํ ์ฐธ์กฐ๊ฐ ๋ฐฉ์ง๋๊ณ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ง ์์ต๋๋ค. ํนํ ์ํฐํฐ์ ๋ฏผ๊ฐํ๊ฒ ๋ ์ ์๋ ์์ฑ์ ๋ ์ถ๊ฐํ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
@JonPSmith :
๊ฒ๋ค๊ฐ ์๋ก์ด JSON API๋ ๊ณ ์ฑ๋ฅ ์๋๋ฆฌ์ค๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ํ๋ถํ ๊ธฐ๋ฅ ์ธํธ๊ฐ ํ์ํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ JSON.NET ๋๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@suncodefactory ์ด๊ฒ์ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๋ฐ๋์ ๋๋ค. ํ์ฌ ASP.NET Core 2.2์์ JSON.NET์ ํ๋ ์์ํฌ์ ์ฌ์ฉ์ ์ฝ๋์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ Newtonsoft.Json์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ถฉ๋์ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ASP.NET Core 3.0์ด JSON.NET 12.x๋ก ์ด๋ํ๊ณ ๊ฑฐ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋จ์ํค๋ ์ผ์ข ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด Microsoft.Extensions.Configuration.Json 2.2.0์ ์ดํด๋ณด์ญ์์ค. Newtonsoft.Json 11.0.2์ ์ข ์๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ๊ตฌ์ฑ ํจํค์ง์ ๋๋ค. HTTP ์์ฒญ ์ฒ๋ฆฌ ๋๋ ASP.NET Core MVC์ ๊ด๋ จ์ด ์์ต๋๋ค. ๋๋ JSON ์น ํ ํฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ Microsoft.IdentityModel.Protocols.OpenIdConnect ๋ฅผ ์ดํด๋ณด์ธ์. ๊ฐ๋ฅํ ํ ๋ง์ ์ฑ๋ฅ์ด ํ์ํ ํซ ํจ์ค์ ๋๋ค. JSON.NET์ ํ์ค์ ๋ฐ๋ผ ๋๋ฆฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ง๋ง ์ฑ๋ฅ, ํ๋ถํ ๊ธฐ๋ฅ ๋ฐ ๊ด๋ฒ์ํ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ ๋ํ ์ง์ ๊ฐ์ ๊ท ํ์ ์ ์งํฉ๋๋ค. Microsoft์ ์๋ก์ด JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JSON.NET์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ต๋ ์ฑ๋ฅ์ผ๋ก ์ ๋์ ์ธ ๊ธฐ๋ณธ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ง์คํ ์ ์์ต๋๋ค.
.NET์ ํญ์ System.Runtime.Serialization.Json์ ์์ฒด JSON ์ง๋ ฌํ ์๋ฃจ์ ์ ๊ฐ์ง๊ณ ์์์ง๋ง .NET Core์ ๊ณ ์ฑ๋ฅ ์ธ๊ณ์์๋ ๊ทธ๋ค์ง ์ข์ ์๋ฃจ์ ์ด ์๋๋๋ค. ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์์ ์๊ฒฉ ์ฆ๋ช ์ ํ์ธํ๊ธฐ ์ํด ํธ์ถ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ์ต์ UTF-8 ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ต์ํ์ ํ ๋น์ ๊ฐ์ถ ์๋ก์ด JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งค์ฐ ํ์ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ Newtonsoft.Json์ ๊ณ์ ์ฐธ์กฐํ ์ ์์ผ๋ฉฐ ์ด์ ๊ณผ ๊ฐ์ด ์์ฒญ/์๋ต ๋ฐ์ดํฐ์ ๋ํ ์ญ์ง๋ ฌํ/์ง๋ ฌํ ํ์ดํ๋ผ์ธ์ผ๋ก ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ๋ถํฐ๋ Core ํ๋ ์์ํฌ๊ฐ ์์กดํ๋ ๋ฒ์ ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ๋ชจ๋์๊ฒ ์น๋ฆฌ์ ๋๋ค.
@phillip-haydon๊ณผ @TsengSR ์ ์๊ฐ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ด ์ง์๋๋์ง ๋ฌผ์๊ณ ๋น์ ์ ๊ทธ๊ฒ์ด ์ดํดํ๊ณ ์์ฉํ์ง ์๋๋ค๊ณ ๋งํฉ๋๋ค. EF Core ํด๋์ค๋ฅผ ์ง๋ ฌํ/์ญ์ง๋ ฌํํด์ผ ํ๋ ๊ฒฝ์ฐ Json.NET์ ๊ณ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์ฉ. DDD ์คํ์ผ EF Core ์ํฐํฐ ํด๋์ค๋ฅผ ์ง๋ ฌํ/์ญ์ง๋ ฌํํด์ผ ํ๋ ์ ํจํ ์ด์ ๊ฐ ์์ต๋๋ค. ์ ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ก๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ์ค๋ ์ท์ ๋ง๋ค๊ณ ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ์ต๋ช ํํ ๋ค์ ์ค๋ ์ท์ผ๋ก ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ํ ์ ์๋๋ก ํ๋ ํ๋ก๋์ ์์ ์๋ ๋ผ๊ณ ํ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.
๋๋ ๋ด ํด๋ผ์ด์ธํธ์ ์ด ๊ธฐ๋ฅ์ด ํ์ํ๊ณ ๊ทธ๋ค์ ์ํด ์์ฑํ๋ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์๋๋ก ๋ด ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ EfCore.TestSupport ์ ์ด ๊ธฐ๋ฅ์ ๊ตฌ์ถํ์ต๋๋ค.
[DataContract]
, [DataMember]
๋ฐ ์น๊ตฌ๋ค์ ์ง์ํ ๊ณํ์ด ์์ต๋๊น?
์ค๋๋ ์ด๊ฒ์ ์ง๋ ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ ๋ํ ์ข ์์ฑ์ ๊ฐ์ ธ์ค์ง ์๋ ๋ฐฉ์์ผ๋ก ์ ํ์ด ์ง๋ ฌํ/์ญ์ง๋ ฌํ(์: ํ๋ ์ด๋ฆ)ํด์ผ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
ํ์ฌ JsonNamingPolicy
๋ ๋ฌธ์์ด๋ง ์ฌ์ฉํ๋ฏ๋ก ๋ฉค๋ฒ์ ์์ฑ์ ๊ฒ์ฌํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์๋
ํ์ธ์.
๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ DotNet ์ฝ์ด 3 ๋ฏธ๋ฆฌ ๋ณด๊ธฐ 6์ผ๋ก ์ ํํ๋ ค๊ณ ์๋ํ์ง๋ง ๋ณ๊ฒฝํ ์ ์๋ ์ฐธ์กฐ ์ ํ(๋ถ๋ณ ์์ฑ์ด ์๋ ํด๋์ค(์ธํฐ ์์)๊ณผ ๋ชจ๋ ์์ฑ์ ์ค์ ํ๋ ๋จ ํ๋์ ์์ฑ์)์ ์ญ์ง๋ ฌํํ ์ ์์ต๋๋ค. Json.net์ ์ด๋ฌํ ํด๋์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๊ฒ์ System.Text.Json API๊ฐ ํ์ํ ๋ฌธ์ ์
๋๊น, ์๋๋ฉด ์ง์ํ ๊ณํ์
๋๊น?
์๋ตํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
@agjini ์ฐธ์กฐ https://github.com/dotnet/corefx/issues/38569
@khellang๋ ๊ฐ์ฌํฉ๋๋ค.
์ง์์ ์ค์ ๋ก ๊ณํ๋์ด ์์ง๋ง 3.0 ๋ฆด๋ฆฌ์ค์๋ ์ง์๋์ง ์์ต๋๋ค.
DotNet core 3์์ Json.net์ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ง๋ง ์ด๋ป๊ฒ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค(ํจํค์ง ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค). ๋ฐฉ๋ฒ์ด ์๋์?
@agjini :
C#
services.AddControllers()
.AddNewtonsoftJson()
๋์์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
ํจ๊ณผ๊ฐ์๋ค !
๋ชจ๋ ๊ฒ์ด ์ค๋ช
๋ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋๋ฅผ ๋์ณค์ต๋๋ค.
IMO json.net์ ๋ฐ์ฏค ๊ตฌ์์ก๊ณ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊นจ๋ ๊ธฐ๋ณธ๊ฐ(์ฆ, ์ ํธ๊ธฐ์ ๊ฒฝ์ฐ)์ผ๋ก ๋ง๋๋ ๊ฒ์ ์๊ธฐ์์กฐ์์ต๋๋ค.
๋ฐ๋ฉด์ .NET Core 2.2์์ 3.0์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ฃผ์ ๋ฒ์ ์ ๊ทธ๋ ์ด๋์ด๋ฉฐ .NET Core ํ์ด ์๋ฏธ ์ฒด๊ณ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์๊ฒฉํ๊ฒ ๋ฐ๋ฅด์ง ์๋๋ผ๋ ๋ช ์์ ๋ณ๊ฒฝ ์์ด ํ ๋ฒ์ ์์ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. (ํ์ดํ๋ผ์ธ์ Newtonsoft์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ฒ๋ผ)
ํ์๋ ๊ณต์ง์ฌํญ์ด์ง ๋ฌธ์ ๊ฐ ์๋๋๋ค.
์ปค๋ฎค๋ํฐ์์๋ ๊ฐ์ ์ ๋ฐ๋ํ๋ ๋ชฉ์๋ฆฌ๊ฐ ๋ง์ง๋ง, ์๋ก์ด ๊ณ ์ฑ๋ฅ ํ๋ ์์ํฌ๋ก์ ์๋๊ฐ ๋จ์ด์ง๋ ๊ฒ์ ์ฉ๋ฉํ ์ ์์ต๋๋ค.
์ ์๋ ๋ง์๋๋ ธ์ง๋ง ์ ์์๋ ๋ง๋ถ์ด๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ถ๋ณ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ์ ์๋ค๋ฉด ์ ๋ง ์ข์ง ์์๊น. MVC-Pipeline์ Json.NET
๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ๋ฅํ์ง๋ง ์ ๊ฒฝ์ฐ์๋ Microsoft.AspNet.WebApi.Client
์ ํผ์ด ์ข
์์ฑ ์ด๋๊ฐ์ ๊ตฌํ๋ ReadAsAsync<>
๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ
์คํธ๊ฐ ๋ชจ๋ ์คํจํฉ๋๋ค. Microsoft.AspNet.WebApi.Client
๋ฐ System.Text.Json
์ ์์กด
๊ณ ๊ฐ์ด .NET Standard๋ฅผ ์ง์ํ๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฐ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก .NET Standard ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ System.Text.Json์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. .NET Standard์์ System.Text.Json์ ์ง์ํ ๊ณํ์ ๋ฌด์์ ๋๊น?
@์์ฌ๋ฏธ
์ฐ๋ฆฌ๋ ๋ถ๋ณ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ์ ์๋ค๋ฉด ์ ๋ง ์ข์ง ์์๊น.
๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ๋ง ํ์ํฉ๋๊น, ์๋๋ฉด ๋ถํ์ด ์ค๋งํธํ๊ฒ ๊ต์ฒด๋๋ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ๋ ํ์ํฉ๋๊น(์: ๋ถ๋ณ ์ปฌ๋ ์
๋ฐ Roslyn)? ์ ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ณง ์ถ์๋ JsonDocument
DOM API๋ฅผ ์ ๊ณตํฉ๋๋ค.
@mwoo-o
.NET Standard์์ System.Text.Json์ ์ง์ํ ๊ณํ์ ๋ฌด์์ ๋๊น?
.NET Standard 2.0์ฉ NuGet ํจํค์ง: System.Text.Json ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
@terrajobst
๊ฐ์ฌ ํด์. ์ด System.Text.Json์ .NET Standard SDK์ ์ธ์ ํฌํจ๋ฉ๋๊น?
.NET ํ์ค 3.0(๋๋ ์ผ๋ถ ๋ค๋ฅธ ์ดํ ๋ฆด๋ฆฌ์ค ๋ฒ์ )์ System.Text.Json ํจํค์ง๊ฐ ํฌํจ๋ฉ๋๊น? .NET Core 3.0 SDK ํ๋ก๋์
๋ฆด๋ฆฌ์ค์์ ๋ฐ์ํฉ๋๊น?
@terrajobst
PipeReader์์ Deserialize ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ณํ์ด ์์ต๋๊น? ๋๋ ์ญ์ง๋ ฌํ๋ฅผ ์์ํ ๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ์คํธ๋ฆฌ๋ฐ ์๋๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์๋ Patch ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ค์์ ์ ์๋ API์ ๋จ์ํ๋ ๋ฒ์ ์ ๋๋ค.
private async ValueTask<T> Deserialize<T>(PipeReader reader, CancellationToken cancellationToken)
where T: new()
{
T model = new T();
while (!cancellationToken.IsCancellationRequested)
{
ReadResult readResult = await reader.ReadAsync(cancellationToken);
ReadOnlySequence<byte> buffer = readResult.Buffer;
if (readResult.IsCanceled) break;
if (buffer.IsEmpty && readResult.IsCompleted) break;
SequencePosition consumed = JsonSerializer.Patch(model, buffer, readResult.IsCompleted);
reader.AdvanceTo(consumed, buffer.End);
}
return model;
}
public SequencePosition Patch<T>(T model, ReadOnlySequence<byte> jsonData, bool isFinalBlock, JsonSerializerOptions options = null)
{
...
}
@terrajobst
๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ๋์ฐ๋ณ์ด์ํค๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฅ๋ ฅ
ํ์ฌ ์ด๊ฒ๋ง. ์ค์ ๋ก '๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด'๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ์ข์ ์์!
@mwoo-o
๊ฐ์ฌ ํด์. ์ด System.Text.Json์ .NET Standard SDK์ ์ธ์ ํฌํจ๋ฉ๋๊น?
.NET ํ์ค 3.0(๋๋ ์ผ๋ถ ๋ค๋ฅธ ์ดํ ๋ฆด๋ฆฌ์ค ๋ฒ์ )์ System.Text.Json ํจํค์ง๊ฐ ํฌํจ๋ฉ๋๊น? .NET Core 3.0 SDK ํ๋ก๋์ ๋ฆด๋ฆฌ์ค์์ ๋ฐ์ํฉ๋๊น?
.NET Standard SDK๋ ์์ต๋๋ค. .NET Standard๋ ์ง์๋๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ API ํ๋ฉด์
๋๋ค. .NET Standard์์ ์ง์ํ๋ ์ง์ ํ๋ซํผ์ ๋์์ผ๋ก ์คํ๋๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ System.Text.Json
๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. .NET ๊ตฌํ ์ง์์ ์ฐธ์กฐํ์ญ์์ค.
@TsengSR
.NET Standard SDK๋ ์์ต๋๋ค. .NET Standard๋ ์ง์๋๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ API ํ๋ฉด์ ๋๋ค.
API๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๋ก์ ํธ ์ ํ์ด ์์ต๋๋ค. @mwoo-o๊ฐ .NET Standard์ System.Text.Json
๋ฅผ ์ถ๊ฐํ ๊ณํ์ด ์๋์ง ๋ฌป๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ต์ '์๋์ค. ์ง๊ธ์ ์ด๊ฒ์ NuGet ํจํค์ง๋ก ๋จ๊ฒจ๋ ๊ณํ์
๋๋ค.
๋์ฐํ๋ค์. ํ๋ก์ ํธ์ ์ ์ฉํ ๊ธฐ๋ฅ์ด ๋๋ฌด ์ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ์๋ก์ด ํ์๊ฐ
appSettings.json
์ ๊ฐ์ ๋ชจ๋ ๋ด์ฅ JSON ํญ๋ชฉ์ ์ฌ์ฉ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฃผ์ ์ง์์ ์กฐ๊ธฐ์ ์์ฒญํ ์ ์์ต๋๊น?๊ฐ์ฌ ํด์.