์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ์์. ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ์ธ์ด์ ๊ด๊ณ ์์ด ํต์ผ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก, ์ผ์ ํ ํจํด์ ์ง๋ ๋ฌธ์์ด์ ์์ฑํด ๋ด๋ณด๋ด๋ฉด ํด๋ผ์ด์ธํธ๋ ๊ทธ๋ฅผ ํด์ํด ๋ฐ์ดํฐ๋ฅผ ์๊ธฐ๋ง์ ๋ฐฉ์์ผ๋ก ์จ์ ํ ์ ์ฅ, ํ์ํ ์ ์๊ฒ ๋๋ค.
๊ณผ๊ฑฐ ์น ์ด๊ธฐ ์์ ๋ถํฐ ์ฌ์ฉ๋์ด ์จ XML์ ํค๋์ ํ๊ทธ ๋ฑ์ ์ฌ๋ฌ ์์๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ , ์ธ๋ฐ์์ด ์ฉ๋์ ์ก์๋จน๋๋ค๋ ๋จ์ ์ด ํญ์ ์ง์ ๋์ด ์๋ค. ์ด์ ๋์ํด ๊ฐ๊ฒฐํ๊ณ ํต์ผ๋ ์์์ผ๋ก ๊ฐ๊ด์ ๋ฐ๊ณ ์๋ ๊ฒ์ด JSON์ด๋ค.
๊ณผ๊ฑฐ ์น ์ด๊ธฐ ์์ ๋ถํฐ ์ฌ์ฉ๋์ด ์จ XML์ ํค๋์ ํ๊ทธ ๋ฑ์ ์ฌ๋ฌ ์์๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ , ์ธ๋ฐ์์ด ์ฉ๋์ ์ก์๋จน๋๋ค๋ ๋จ์ ์ด ํญ์ ์ง์ ๋์ด ์๋ค. ์ด์ ๋์ํด ๊ฐ๊ฒฐํ๊ณ ํต์ผ๋ ์์์ผ๋ก ๊ฐ๊ด์ ๋ฐ๊ณ ์๋ ๊ฒ์ด JSON์ด๋ค.
2. ๊ตฌ์กฐ[ํธ์ง]
{
"ํ์ฌ": [
{
"์ด๋ฆ": "Apple",
"์ด์์ฒด์ ": [
"macOS",
"iOS"
]
},
{
"์ด๋ฆ": "Microsoft",
"์ด์์ฒด์ ": [
"MS-DOS",
"Windows"
]
}
]
}๏ผป๏ผฝ์์ ๊ฒ์ ์์๊ฐ ์๋ ๋ฐฐ์ด[2], ๏ฝ๏ฝ์์ ๊ฒ์ ์์ฑ๋ช (ํํ ์ด๋ฆํ๋ผ๊ณ ํ๋ค)์ด ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด ์์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ ์๋ ์์ด์ XML์ฒ๋ผ ๋ณต์กํ ๊ตฌ์กฐ ๋ํ ํํ์ด ๊ฐ๋ฅํ๋ค! ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ํ๋ ๊ฐ์ {}๋ก ํ๊ธฐ๋๋ ๊ฐ์ฒด,
[]๋ก ํ๊ธฐ๋๋ ๋ฐฐ์ด, ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, null์ 6๊ฐ์ง๊ฐ ์ ๋ถ๋ค. ๋ํ null์ ์กด์ฌ์์ ์ ์ ์๋ฏ, JSON์ JavaScript ์ด์ธ์ ์ธ์ด์์ ์ฌ์ฉ๋ ์ํฉ์ ๋ค๋ถํ ๊ณ ๋ คํ๊ณ ์๋ค.[3]3. ํน์ง[ํธ์ง]
๊ทธ๋๋ ํ๋ฉด์ ์ผ๋ก W3C์ ํ์ค์ XML์ธ๋ฐ, ๊ทธ๊ฒ๊ณผ๋ ๋ฌด๊ดํ๊ฒ JSON์ 2009๋
๋ง Ecma์ ์ํด ECMAScript5์์ ์คํฌ๋ฆฝํธ ์์ง์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ๋ด์ฅ๋์ด ๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ์๋กญ๊ฒ ์ถ์๋๋ ๋ธ๋ผ์ฐ์ ๋ค ๊ธฐ์ค์์๋ DOM์ ํตํด XML ํ์ฑํ๋ ๊ฒ๋ณด๋ค JavaScript ์์ง์์ JSON์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฐ๋ ์ชฝ์ด ์ฑ๋ฅ์ผ๋ก ๋ณด๋ ํธ๋ํฝ์ผ๋ก ๋ณด๋ ํจ์ฌ ๋ ๋์ ์ ํ์ด ๋์ด๋ฒ๋ ธ๋ค. ๊ทธ๋ฐ ๊ด๊ณ๋ก ์น์์ XML์ ๋ณธ๊ฒฉ ๊ณ๋ฅตํ๊ฐ ์งํ์ค...
๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ๊ฐ์ฒด ํ๊ธฐ๋ฒ์ ๋ถ๋ถ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฒจ์์ ์ฐธ ์ฝ๊ฒ ํด์ํ ์ ์์ผ๋ฉฐ, ๋ชจ์๊ณผ ๊ท์น ์์ฒด๊ฐ ๋จ์ํ ๊ด๊ณ๋ก ๋ค๋ฅธ ์ธ์ด์์ ๊ตฌํํ๊ธฐ๋ ์ฝ๋ค. ๊ทธ๋์ ์ค๋๋ ์ฌ์ฉ๋๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ด๋ฌํ ์ง์์ ํ์ ์ด AJAX ๊ตฌํ์๋ ์๋นํ ๋น๋ฒํ๊ฒ ์ฐ์ธ๋ค.
์์ฒญ๋๊ฒ ๋จ์ํ์ง๋ง ์ ์ฐํ ํ๊ธฐ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ด์ ๋ ๋ฆฝ๋ ํ์ค์ ์ธ ๋ฐ์ดํฐ ํ๊ธฐ๋ฒ์ผ๋ก ํ์ฐ๋๊ณ ์๋ค. ๋ณธ๋์ ๋ฒ์๋ฅผ ๋์ด์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ํ๊ธฐ์ฉ์ผ๋ก ๋ง๊ฐ์กฐํ BSON[4]๋ ์์ผ๋ฉฐ, NoSQL DB์ค DocumentDB๋ค์์๋ ๊ทธ๋ฅ ํ์ค ํ๊ธฐ๋ฒ์ผ๋ก ์ทจ๊ธ๋๊ณ ์๋ค. ์ต๊ทผ์๋ NoSQL๋ฟ๋ง ์๋๋ผ ๊ด๊ณํDB์ธ PostgreSQL์์๋ ์ง์ํ๊ธฐ ์์. MySQL์์๋ 5.7์์ ๊ณต์ ์ง์ํ๋ค.
๊ทธ๋ฌ๋ ํ์ฐ๋๊ณ ์๋ค๊ณ ํด๋ ์ด๋๊น์ง๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ๊ฐ ๋๋ ํ๊ฒฝ, ํนํ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ HTML ๊ณผ ์ด๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ๊ณตํ๋ JavaScript๊ฐ ์ฐ๋ํ๋ ํ๊ฒฝ ์์ฃผ๋ก ํผ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ณณ์์๋ ์ฌ์ ํ XML์ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ์๋ค. XML ํ์๋ ๋ค์ํ ํ๋ซํผ์ ๊ตฌํ๋ผ์๊ณ XML์ด๋ ๋์ด ๋ฑํ ๋ฌด์จ ๊ฒฐํจ์ด ์๋ ๊ฒ๋ ์๋๋ฉฐ ๊ฒฐ์ ์ ์ผ๋ก XML์๋ ์คํค๋ง(Schema)๊ฐ ์์ด์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ ์ ์๋ค. JSON์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๋ ์ญํ ์ ์ ์ ์ผ๋ก ๊ทธ๊ฑธ ์ฌ์ฉํ๋ ์ธก์ ๋ ๋งก๊ธด๋ค. ๋ค๋ง JSON์ด ์น์ ์์์ผ๋ก ํธ์์ฑ์ด ๋๋ฆฌ ์๋ ค์ง๋ฉด์ ์ต๊ทผ ๋ค์ด ๋ค์ํ๋ถ์ผ๋ก ๋ง์ด ์ฐ์ด๋์ค์ด๋ค.
๊ทธ๋ฆฌ๊ณ JSON๋ ์ ์ฉ๋๋ ๊ณณ์ด ๋์ด๋จ์ ๋ฐ๋ผ XML๊ณผ ๊ฐ์ด validํ ๊ฒ์ฆ์ด ํ์ํด์ก์ผ๋ฉฐ, Namespace ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๊ณ ์๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด JSON-Schema, JSON-LD(JSON Linking Data) ๊ฐ์ ๊ฒ์ด ๋ฑ์ฅํ๊ณ ์๋ค.
๊ทธ๋ฌ๋ ๋์์ฑ ์ผ๋ก ์ ์๋ JSON ์คํค๋ง๋ ํ์ฌ ๊ฑฐ์ ์ฐ์ด์ง ์๊ณ ์๋ค. ์น์ด๋ผ๋ ํ๊ฒฝ ํน์ฑ์ ๋ฐ์ดํฐ๊ฐ ์ข ์๋ชป ๋ค์ด๊ฐ๋ค๊ณ ํด์ ํน๋ณํ ํฐ์ผ์ด ๋๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฒ๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋ชป ๋ค์ด๊ฐ๋ฉด ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข ๋ฃํ๋ค๊ฑฐ๋ ํ๋ ํฌ๋ฆฌํฐ์ปฌํ ์์ฉ์์๋ ๊ทธ๋ฅ XML์ ์ฌ์ฉํ๊ณ ์๋ค. JSON์ ์ฝค๋ง๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์ค๊ดํธ๊ฐ ์๋ชป ๋ซํ๋ ๋ฑ์ ์ค์ผ์ ์์ฃผ ์ทจ์ฝํ๋ค. XML์ SAXํ์๋ฅผ ์ฌ์ฉํด์ ์ด๋ฐ ๋ฐ์ดํฐ ์ค๋ฅ๋ฅผ ๋ฐ๋ก์ก๊ณ ์ฌ๋๊ธฐํ๊ฐ ์ฝ๋ค.
Unity3D ์์ง์์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์๋ฆฌ์ผ๋ผ์ด์ ์ ๋์๋ฆฌ์ผ๋ผ์ด์ ๋ฅผ ์ ๊ณตํ๊ธฐ ์์ํ๋ฉด์ ๋ชจ๋ฐ์ผ ํ๋ซํผ์์๋ ๋๊ฑฐ ์ฌ์ฉ๋๊ธฐ ์์ํ๋ค. CSV ๋ฑ ๊ธฐ์กด ํฌ๋ฉง์ ๋นํด ํ๊ทธ์ ์ํ ๋ฐ์ดํ ํ์ฅ๊ณผ ๋ณํ์ด ์ฉ์ดํ๊ณ ๊ณผ๊ฑฐ์ ๋นํด ๋ฐ์ดํ ์ฌ์ฉ๋์ด ์์ ๋กญ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ํ์์ด ๊ฐ์ํ ๋๊ณ ์๋ค. (๋จ์ ์ธ ์๋ก ๋ง์ ๊ฒ์ ๋ฐ์ดํฐ๋ค์ด ์ ์ด์จ์ผ๋ก ๋์ด์๋ค.)
Sublime Text, Visual Studio Code์์๋ ํ๊ฒฝ ์ค์ ํ์ผ์ JSON์ ์ฌ์ฉํ๊ณ ์๋ค.
ECMAScript๋ 5๋ถํฐ Trailing comma(ํํ ์ผํ)๋ฅผ ์ง์ํ์ง๋ง JSON์ ๊ทธ ์ด์ ์ ๊ท๊ฒฉ์ด ์ ํด์ก๊ธฐ ๋๋ฌธ์ Trailing comma๋ฅผ ์ง์ํ์ง ์๋๋ค.
http://www.json.org์์ ํ๊ธฐ๋ฒ๊ณผ ์ธ์ด๋ณ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณผ ์ ์๋ค.
์ฐธ๊ณ
๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ๊ฐ์ฒด ํ๊ธฐ๋ฒ์ ๋ถ๋ถ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฒจ์์ ์ฐธ ์ฝ๊ฒ ํด์ํ ์ ์์ผ๋ฉฐ, ๋ชจ์๊ณผ ๊ท์น ์์ฒด๊ฐ ๋จ์ํ ๊ด๊ณ๋ก ๋ค๋ฅธ ์ธ์ด์์ ๊ตฌํํ๊ธฐ๋ ์ฝ๋ค. ๊ทธ๋์ ์ค๋๋ ์ฌ์ฉ๋๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ด๋ฌํ ์ง์์ ํ์ ์ด AJAX ๊ตฌํ์๋ ์๋นํ ๋น๋ฒํ๊ฒ ์ฐ์ธ๋ค.
์์ฒญ๋๊ฒ ๋จ์ํ์ง๋ง ์ ์ฐํ ํ๊ธฐ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ด์ ๋ ๋ฆฝ๋ ํ์ค์ ์ธ ๋ฐ์ดํฐ ํ๊ธฐ๋ฒ์ผ๋ก ํ์ฐ๋๊ณ ์๋ค. ๋ณธ๋์ ๋ฒ์๋ฅผ ๋์ด์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ํ๊ธฐ์ฉ์ผ๋ก ๋ง๊ฐ์กฐํ BSON[4]๋ ์์ผ๋ฉฐ, NoSQL DB์ค DocumentDB๋ค์์๋ ๊ทธ๋ฅ ํ์ค ํ๊ธฐ๋ฒ์ผ๋ก ์ทจ๊ธ๋๊ณ ์๋ค. ์ต๊ทผ์๋ NoSQL๋ฟ๋ง ์๋๋ผ ๊ด๊ณํDB์ธ PostgreSQL์์๋ ์ง์ํ๊ธฐ ์์. MySQL์์๋ 5.7์์ ๊ณต์ ์ง์ํ๋ค.
๊ทธ๋ฌ๋ ํ์ฐ๋๊ณ ์๋ค๊ณ ํด๋ ์ด๋๊น์ง๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ๊ฐ ๋๋ ํ๊ฒฝ, ํนํ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ HTML ๊ณผ ์ด๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ๊ณตํ๋ JavaScript๊ฐ ์ฐ๋ํ๋ ํ๊ฒฝ ์์ฃผ๋ก ํผ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ณณ์์๋ ์ฌ์ ํ XML์ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ์๋ค. XML ํ์๋ ๋ค์ํ ํ๋ซํผ์ ๊ตฌํ๋ผ์๊ณ XML์ด๋ ๋์ด ๋ฑํ ๋ฌด์จ ๊ฒฐํจ์ด ์๋ ๊ฒ๋ ์๋๋ฉฐ ๊ฒฐ์ ์ ์ผ๋ก XML์๋ ์คํค๋ง(Schema)๊ฐ ์์ด์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ ์ ์๋ค. JSON์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๋ ์ญํ ์ ์ ์ ์ผ๋ก ๊ทธ๊ฑธ ์ฌ์ฉํ๋ ์ธก์ ๋ ๋งก๊ธด๋ค. ๋ค๋ง JSON์ด ์น์ ์์์ผ๋ก ํธ์์ฑ์ด ๋๋ฆฌ ์๋ ค์ง๋ฉด์ ์ต๊ทผ ๋ค์ด ๋ค์ํ๋ถ์ผ๋ก ๋ง์ด ์ฐ์ด๋์ค์ด๋ค.
๊ทธ๋ฆฌ๊ณ JSON๋ ์ ์ฉ๋๋ ๊ณณ์ด ๋์ด๋จ์ ๋ฐ๋ผ XML๊ณผ ๊ฐ์ด validํ ๊ฒ์ฆ์ด ํ์ํด์ก์ผ๋ฉฐ, Namespace ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๊ณ ์๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด JSON-Schema, JSON-LD(JSON Linking Data) ๊ฐ์ ๊ฒ์ด ๋ฑ์ฅํ๊ณ ์๋ค.
๊ทธ๋ฌ๋ ๋์์ฑ ์ผ๋ก ์ ์๋ JSON ์คํค๋ง๋ ํ์ฌ ๊ฑฐ์ ์ฐ์ด์ง ์๊ณ ์๋ค. ์น์ด๋ผ๋ ํ๊ฒฝ ํน์ฑ์ ๋ฐ์ดํฐ๊ฐ ์ข ์๋ชป ๋ค์ด๊ฐ๋ค๊ณ ํด์ ํน๋ณํ ํฐ์ผ์ด ๋๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฒ๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋ชป ๋ค์ด๊ฐ๋ฉด ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข ๋ฃํ๋ค๊ฑฐ๋ ํ๋ ํฌ๋ฆฌํฐ์ปฌํ ์์ฉ์์๋ ๊ทธ๋ฅ XML์ ์ฌ์ฉํ๊ณ ์๋ค. JSON์ ์ฝค๋ง๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์ค๊ดํธ๊ฐ ์๋ชป ๋ซํ๋ ๋ฑ์ ์ค์ผ์ ์์ฃผ ์ทจ์ฝํ๋ค. XML์ SAXํ์๋ฅผ ์ฌ์ฉํด์ ์ด๋ฐ ๋ฐ์ดํฐ ์ค๋ฅ๋ฅผ ๋ฐ๋ก์ก๊ณ ์ฌ๋๊ธฐํ๊ฐ ์ฝ๋ค.
Unity3D ์์ง์์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์๋ฆฌ์ผ๋ผ์ด์ ์ ๋์๋ฆฌ์ผ๋ผ์ด์ ๋ฅผ ์ ๊ณตํ๊ธฐ ์์ํ๋ฉด์ ๋ชจ๋ฐ์ผ ํ๋ซํผ์์๋ ๋๊ฑฐ ์ฌ์ฉ๋๊ธฐ ์์ํ๋ค. CSV ๋ฑ ๊ธฐ์กด ํฌ๋ฉง์ ๋นํด ํ๊ทธ์ ์ํ ๋ฐ์ดํ ํ์ฅ๊ณผ ๋ณํ์ด ์ฉ์ดํ๊ณ ๊ณผ๊ฑฐ์ ๋นํด ๋ฐ์ดํ ์ฌ์ฉ๋์ด ์์ ๋กญ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ํ์์ด ๊ฐ์ํ ๋๊ณ ์๋ค. (๋จ์ ์ธ ์๋ก ๋ง์ ๊ฒ์ ๋ฐ์ดํฐ๋ค์ด ์ ์ด์จ์ผ๋ก ๋์ด์๋ค.)
Sublime Text, Visual Studio Code์์๋ ํ๊ฒฝ ์ค์ ํ์ผ์ JSON์ ์ฌ์ฉํ๊ณ ์๋ค.
ECMAScript๋ 5๋ถํฐ Trailing comma(ํํ ์ผํ)๋ฅผ ์ง์ํ์ง๋ง JSON์ ๊ทธ ์ด์ ์ ๊ท๊ฒฉ์ด ์ ํด์ก๊ธฐ ๋๋ฌธ์ Trailing comma๋ฅผ ์ง์ํ์ง ์๋๋ค.
http://www.json.org์์ ํ๊ธฐ๋ฒ๊ณผ ์ธ์ด๋ณ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณผ ์ ์๋ค.
์ฐธ๊ณ
4. ๋จ์ [ํธ์ง]
XML์ด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ธฐ์ ํ์์ ๋นํด ์๋์ ๊ฐ์ ๋จ์ ์ด ์๋ค.
- ๋ฌธ๋ฒ ์ค๋ฅ์ ๋ฏผ๊ฐํ๋ค. ์ฝค๋ง๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์ค๊ดํธ๊ฐ ์๋ชป ๋ซํ๋ ๋ฑ ๊ตฌ๋์ ์์ ์คํ๊ฐ ๋๋ฉด ์ ์ฒด JSONํ์ผ์ด ๋ง๊ฐ์ง๋ค. ์ฐพ๊ธฐ ๊ธฐ๋ฅ์ด ์๋ ํธ์ง๊ธฐ์์ ์ค ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๋ฉด ์ฝค๋ง๊ฐ ๋๋ฝ๋ ๊ณณ์ ์ฐพ๊ธฐ ํ๋ค๋ค.
- ์ฃผ์์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋์ ์ค์ ํ์ผ์ JSON์ผ๋ก ์์ฑํ๋ ๊ฒ์ ์ด๋ ต๋ค. [5]
- ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ ํ ์ ์๋ค. JSON ์คํค๋ง๋ก ๋ณด์์ ๊ฐ๋ฅํ์ง๋ง ๋ฐ์ดํฐ ์ค์ค๋ก ์์ ์ ํ์ ์ ๊ธฐ์ ํ ๋ฐฉ๋ฒ์ด ์๋ค.
์์ ๊ฐ์ ๋จ์ ์ ๋ณด์ํ๊ณ ์ YAML ๋ฑ์ ๋์ฒด ํฌ๋งท์ ์ฐ๊ธฐ๋ ํ๋ ๊ธฐ๊ณ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ฃผ๋ก ์ฐ์ด๋ JSON์ ํน์ฑ์ ์์ ๋จ์ ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋ผ์ JSON์ 2017๋ 11์ ํ์ฌ๋ XML๊ณผ ๋๋ฑํ๊ฒ ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ค.
5. JSONP[ํธ์ง]
OpenAPI ์๋น์ค ์ค CORS[6]๊ฐ ์ค์ ๋์ง ์์ ๊ตฌํ ์๋น์ค์์ JSON ๋ฐ์ดํฐ๋ฅผ ๋๋ ค์ค ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํ์์ด๋ค. P๋ ํจ๋ฉ(Padding)์ ์ฝ์ด๋ก, HTML script ํ๊ทธ๋ฅผ ์ด์ฉํ๋ฉด CORS๋ฅผ ์ฐํํ์ฌ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ค๋ ์ ์ ์ด์ฉํด JSON ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํ callback ํจ์๋ฅผ ํธ์ถํ๋ ์ ํจํ JavaScript ์คํฌ๋ฆฝํธ ํ์์ผ๋ก ํจ๋ฉํ์ฌ ๋๋ ค์ค๋ค. callback ํจ์์ ์ด๋ฆ์ ์์ฒญ์๊ฐ ์ ํด์ ์๋ฒ์ ๋๊ฒจ์ค๋ค. ์๋ก jQuery์ jsonp๋ jQuery89034758903475๊ฐ์ ๋์ ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํ๋ค.
์๋ฅผ ๋ค์ด https://jsonplaceholder.typicode.com/posts/1?callback=__cb12345 ๋ฅผ ํธ์ถํ๋ฉด ์๋์ ๊ฐ์ ์๋ต์ด ๋์์จ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด JSONP์ ๋ชฉ์ ์ ์น ๋ธ๋ผ์ฐ์ ๋ด์์์ CORS๊ฐ ์ค์ ๋์ง ์์ ํธ์คํธ์์ ํต์ ์ ์ํ ๊ฒ์ผ๋ก, ์น ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ Same Origin ์ ์ฑ ์ด ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ JSONP๋ฅผ ์ด์ฉํ ํ์๊ฐ ์๋ค. ๋ํ API๋ฅผ ์ง์ ๊ฑด๋๋ฆด ์ ์๋ค๋ฉด CORS ์ ์ฑ ์ ์ง์ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์๋ฅผ ๋ค์ด https://jsonplaceholder.typicode.com/posts/1?callback=__cb12345 ๋ฅผ ํธ์ถํ๋ฉด ์๋์ ๊ฐ์ ์๋ต์ด ๋์์จ๋ค.
/**/ typeof __cb12345 === 'function' && __cb12345({
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
});
๊ธฐ๋ณธ์ ์ผ๋ก ์ด JSONP์ ๋ชฉ์ ์ ์น ๋ธ๋ผ์ฐ์ ๋ด์์์ CORS๊ฐ ์ค์ ๋์ง ์์ ํธ์คํธ์์ ํต์ ์ ์ํ ๊ฒ์ผ๋ก, ์น ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ Same Origin ์ ์ฑ ์ด ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ JSONP๋ฅผ ์ด์ฉํ ํ์๊ฐ ์๋ค. ๋ํ API๋ฅผ ์ง์ ๊ฑด๋๋ฆด ์ ์๋ค๋ฉด CORS ์ ์ฑ ์ ์ง์ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
[1] ์ ์ด์จ์ด๋ผ๊ณ ์ฝ๋๋ค.
[2] ๋ด๋ถ์ ์ผ๋ก 0,1,2,... ์ ๊ฐ์ ์ซ์๋ก ๋ ์ด๋ฆํ(์ธ๋ฑ์ค)๊ฐ ์๋์ผ๋ก ์ฃผ์ด์ง๋ค. ์ ์์ ์ ์ํ๋ฉด "0":"macOS", "1":"iOS".... ์ ์์๋ก ์ด๋ฆํ๊ฐ ๋งค๊ฒจ์ง๋ค.
[3] JavaScript์์ ์ ๋ง ์๋ฌด๊ฒ๋ ์๋๋ผ๋ ์๋ฏธ๋ undefined๊ณ null์ null์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ฒด๋ค(...)
[4] MongoDB์์ ์ฐ์ธ๋ค.
[5] ๋จ, ๋น๊ณต์ ๊ท๊ฒฉ์ธ jsonc๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ํ "_comment"๋ผ๋ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค.