JSON ํฌ๋งคํฐ & ๊ฒ์ฆ๊ธฐ
์จ๋ผ์ธ์ผ๋ก JSON ๋ฐ์ดํฐ๋ฅผ ํฌ๋งทํ , ๊ฒ์ฆ ๋ฐ ์ ๋ฆฌํฉ๋๋ค. ๊ตฌ๋ฌธ ๊ฐ์กฐ ๋ฐ ์ค๋ฅ ๊ฐ์ง ๊ธฐ๋ฅ์ด ํฌํจ๋ JSON ํ์.
์ค๋งํธ ํฌ๋งทํ
์ง๋ฅํ ๋ค์ฌ์ฐ๊ธฐ์ ๊ตฌ๋ฌธ ๊ฐ์กฐ๋ก ์ง์ ๋ถํ JSON์ ์๋์ผ๋ก ์ ๋ฆฌํฉ๋๋ค.
์์ถ & ์ถ์
ํ๋ก๋์ ๋ฐฐํฌ ๋ฐ API ์ ์ก์ ์ํด JSON ํ์ด๋ก๋ ํฌ๊ธฐ๋ฅผ ์ฆ์ ์ค์ ๋๋ค.
์ฆ์ ๊ฒ์ฆ
์ค์๊ฐ ๊ฒ์ฆ๊ณผ ์ ํํ ์ค๋ฅ ์์น ๋ณด๊ณ ๋ก ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
JSON ํฌ๋งทํฐ๋ ๋ฌด์์ธ๊ฐ์?
JSON ํฌ๋งทํฐ๋ ์์, ์ถ์ ๋๋ ์๋ชป๋ ํ์์ JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ ์ ํ ๋ค์ฌ์ฐ๊ธฐ, ์ค ๋ฐ๊ฟ ๋ฐ ๊ฐ๊ฒฉ์ ์ ์ฉํ์ฌ ์ฌ๋์ด ์ฝ์ ์ ์๋๋ก ๋ค์ ํฌ๋งทํ ํ๋ ๋๊ตฌ์ ๋๋ค. ๋๋ถ๋ถ์ JSON ํฌ๋งทํฐ๋ ์ ํจ์ฑ ๊ฒ์ฌ, ๊ตฌ๋ฌธ ๊ฐ์กฐ, ์ค๋ฅ ๊ฐ์ง, ๊ทธ๋ฆฌ๊ณ ๋๋ก๋ ํค ์ ๋ ฌ, ์ถ์, ํธ๋ฆฌ ๋ทฐ ํ์๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ๋ ํฌํจํฉ๋๋ค. ์ ํฌ ๋ฌด๋ฃ ์จ๋ผ์ธ JSON ํฌ๋งทํฐ๋ ํฌ๋งทํ ๊ณผ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋์ ๋๊ตฌ๋ก ๊ฒฐํฉํ์ฌ, ์์ธํ ์ค๋ฅ ๋ณด๊ณ ์ ํจ๊ป ์ฆ๊ฐ์ ์ด๊ณ ๊น๋ํ ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ ์ JSON์ด ์ ํจํ์ง ์์๊ฐ์?
JSON์ JSON ์ฌ์์ ์๊ฒฉํ ๊ท์น์ ์๋ฐํ ๋ ์ ํจํ์ง ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: - ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ง์ง๋ง ํญ๋ชฉ ๋ค์ ํํ ์ผํ๊ฐ ์๋ ๊ฒฝ์ฐ - ๊ฐ์ฒด ํค๋ ๋ฌธ์์ด ๊ฐ ์ฃผ์์ ํฐ๋ฐ์ดํ๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ - ํฐ๋ฐ์ดํ ๋์ ์์๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ (์์๋ฐ์ดํ๋ JSON์์ ์ ํจํ์ง ์์) - ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋์ง ์์ ํน์ ๋ฌธ์, ์๋ฅผ ๋ค์ด ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋์ง ์์ ๋ฐฑ์ฌ๋์๋ ๋ฌธ์์ด ๋ด ๋ฐ์ดํ - undefined, NaN, Infinity์ ๊ฐ์ ์ ํจํ์ง ์์ ๊ฐ (JSON์ ํด๋นํ๋ ํํ์ด ์์) - ์ค๊ดํธ๋ ๋๊ดํธ๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ {/} ๋๋ [/]๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ์ด๋ฃจ์ง ์์ JSON ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ฌธ ์ค๋ฅ์ ์ ํํ ์์น์ ๋ด์ฉ์ ํ์ ํ์ธ์. ๋๋ถ๋ถ์ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์ ๋ํด ์ค ๋ฒํธ, ์ด ๋ฒํธ ๋ฐ ์ค๋ช ์ ์ธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
JSON๊ณผ JavaScript ๊ฐ์ฒด์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
JSON ๊ตฌ๋ฌธ์ JavaScript ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๊ตฌ๋ฌธ์์ ํ์๋์์ง๋ง, ๋์ ์๋ก ๋ค๋ฆ ๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: 1. ํค๋ ๋ฐ๋์ ํฐ๋ฐ์ดํ๋ก ๊ฐ์ธ์ผ ํฉ๋๋ค -- JSON์ {"key": "value"}๋ฅผ ์๊ตฌํ์ง๋ง, JavaScript๋ {key: "value"}(๋ฐ์ดํ ์์)์ {'key': 'value'}(์์๋ฐ์ดํ)๋ฅผ ํ์ฉํฉ๋๋ค. 2. ๋ฌธ์์ด ๊ฐ์ ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค -- JSON์ ๋ฌธ์์ด์ ํฐ๋ฐ์ดํ๋ง ํ์ฉํฉ๋๋ค. JavaScript๋ ์์๋ฐ์ดํ์ ํฐ๋ฐ์ดํ๋ฅผ ๋ชจ๋ ํ์ฉํฉ๋๋ค. 3. ํํ ์ผํ๊ฐ ํ์ฉ๋์ง ์์ต๋๋ค -- JSON์ ๋ง์ง๋ง ํญ๋ชฉ ๋ค์ ํํ ์ผํ๋ฅผ ๊ธ์งํฉ๋๋ค. JavaScript๋ ์ด๋ฅผ ํ์ฉํฉ๋๋ค. 4. ์ ํ๋ ๋ฐ์ดํฐ ์ ํ -- JSON์ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, null, ๊ฐ์ฒด, ๋ฐฐ์ด๋ง ์ง์ํฉ๋๋ค. JavaScript ๊ฐ์ฒด๋ ํจ์, undefined, Date, Map, Set ๋ฐ ๊ธฐํ ํน์ ์ ํ์ ํฌํจํ ์ ์์ต๋๋ค. 5. ์ฃผ์์ด ํ์ฉ๋์ง ์์ต๋๋ค -- JSON์ ์ฃผ์์ ์ง์ํ์ง ์์ต๋๋ค. ์์ค ์ฝ๋์ JavaScript ๊ฐ์ฒด์๋ ์ฃผ์์ ํฌํจํ ์ ์์ต๋๋ค. ์ฆ, JavaScript ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ JSON์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค -- JSON.stringify()๋ก ์ง๋ ฌํํ๊ฑฐ๋ ์๊ฒฉํ JSON ๊ท์น์ ๋ฐ๋ผ ์์ฑํด์ผ ํฉ๋๋ค.
JSON์ ์ฃผ์์ ์ฌ์ฉํ ์ ์๋์?
์๋์, ๊ณต์ JSON ์ฌ์(RFC 8259)์ ์ฃผ์์ ์ง์ํ์ง ์์ต๋๋ค. JSON์ ์ต์ํ์ ์ธ์ด ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ ๊ตํ ํ์์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ํ์๋ฅผ ๊ฐ๋จํ๊ณ ์ฌ๋ฌ ์ธ์ด์์ ์ผ๊ด๋๊ฒ ์ ์งํ๊ธฐ ์ํด ์ฃผ์์ด ์๋์ ์ผ๋ก ์ ์ธ๋์์ต๋๋ค. ์ฃผ์์ด ํ์ํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค: - JSONC (JSON with Comments) -- VS Code ๋ฐ ๊ธฐํ ๋๊ตฌ์์ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉ๋ฉ๋๋ค. JSONC๋ // ์ค ์ฃผ์๊ณผ / / ๋ธ๋ก ์ฃผ์์ ํ์ฉํฉ๋๋ค. - YAML ๋๋ TOML -- ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ์์ ์ง์ํ๋ ๋์ฒด ๊ตฌ์ฑ ํ์์ ๋๋ค. - ๊ท์น ๊ธฐ๋ฐ ๋ฉํ๋ฐ์ดํฐ -- JSON ๊ฐ์ฒด์ "_comment" ๋๋ "//"์ ๊ฐ์ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฉ๋ชจ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ ํ์ด๋ก๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค๋ ์ ์ ์ ์ํ์ธ์. - ํ์ฑ ์ ์ ์ฃผ์ ์ ๊ฑฐ -- ์๊ฒฉํ ํ์์ JSON์ ์ ๋ฌํ๊ธฐ ์ ์ ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ฃผ์์ ์ ๊ฑฐํฉ๋๋ค.
์จ๋ผ์ธ์์ JSON์ ์ด๋ป๊ฒ ์ ํจ์ฑ ๊ฒ์ฌํ๋์?
์จ๋ผ์ธ์์ JSON ์ ํจ์ฑ ๊ฒ์ฌ๋ ๊ฐ๋จํฉ๋๋ค: 1. JSON ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค 2. JSON ์ ํจ์ฑ ๊ฒ์ฌ ๋๊ตฌ์ ๋ถ์ฌ๋ฃ์ต๋๋ค 3. ์ ํจ์ฑ ๊ฒ์ฌ ๋๋ ํฌ๋งท ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค 4. ๋๊ตฌ๊ฐ ์ ํจํ JSON์ ๋ณด๊ณ ํ๊ฑฐ๋, ๋ฌธ์ ์ ์ ํํ ์์น์ ์ค๋ช ๊ณผ ํจ๊ป ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค ์ข์ JSON ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ๋ค์์ ๊ฐ์ถ์ด์ผ ํฉ๋๋ค: - ๊ณต์ JSON ์ฌ์(RFC 8259)์ ๋ฐ๋ผ ๊ตฌ๋ฌธ ์ ํจ์ฑ ๊ฒ์ฌ - ์ค๋ฅ์ ์ค ๋ฒํธ์ ์ด ๋ฒํธ ํ์ - ๋ฌด์์ด ์๋ชป๋์๋์ง ์ค๋ช ํ๋ ์ค๋ช ์ ์ธ ์ค๋ฅ ๋ฉ์์ง ์ ๊ณต - ์ ํ์ ์ผ๋ก ๋์์ JSON์ ํฌ๋งทํ ํ๊ณ ๋ณด๊ธฐ ์ข๊ฒ ์ ๋ฆฌ - ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ํ ์์ ์ฝ๋ฉ์ผ๋ก ๊ตฌ๋ฌธ ๊ฐ์กฐ ๋์ฉ๋ ๋๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ๋ง์ ์จ๋ผ์ธ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ๋ด์์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ํํ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ๊ธฐ๊ธฐ๋ฅผ ๋ ๋์ง ์์ต๋๋ค.
์ถ์๋(minified) JSON์ด๋ ๋ฌด์์ ์๋ฏธํ๋์?
์ถ์๋ JSON์ ๋ชจ๋ ๋ถํ์ํ ๊ณต๋ฐฑ์ด ์ ๊ฑฐ๋ JSON์ ๋๋ค -- ๊ณต๋ฐฑ, ํญ, ์ค ๋ฐ๊ฟ ๋ฐ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ฌผ์ ๋จ์ผ ์ค(๋๋ ๋งค์ฐ ์ ์ ์ค)์ ์์ถ๋ ํ ์คํธ์ ๋๋ค: ์ถ์๋ JSON์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉ๋ฉ๋๋ค: - ๋ ์์ ํ์ผ ํฌ๊ธฐ -- ํ์ด๋ก๋ ํฌ๊ธฐ๋ฅผ 30-50% ์ด์ ์ค์ผ ์ ์์ต๋๋ค - ๋ ๋น ๋ฅธ ๋คํธ์ํฌ ์ ์ก -- ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์ ๋ค๋ ๊ฒ์ ๋ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์๋ฏธํฉ๋๋ค - ๋์ญํญ ๋น์ฉ ์ ๊ฐ -- ํธ๋ํฝ์ด ๋ง์ API์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ค์ํฉ๋๋ค ๋จ์ ์ ์ถ์๋ JSON์ด ์ฌ์ค์ ์ฌ๋์ด ์ฝ์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ฒ๊น ์ด๋ ๊ฒ์ฌ๋ฅผ ์ํด ์ถ์๋ JSON์ ์ฝ์ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ค์ ํฌ๋งทํ ํ๋ ค๋ฉด JSON ํ๋ฆฌํฐ ํ๋ฆฐํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์.
๋ช ๋ น์ค์์ JSON์ ์ด๋ป๊ฒ ํ๋ฆฌํฐ ํ๋ฆฐํธํ๋์?
์ฌ๋ฌ ๋ช ๋ น์ค ๋๊ตฌ๋ก JSON์ ํ๋ฆฌํฐ ํ๋ฆฐํธํ ์ ์์ต๋๋ค: jq ์ฌ์ฉ (๊ฐ์ฅ ์ธ๊ธฐ ์์, ๋ณ๋ ์ค์น ํ์): Python ์ฌ์ฉ (๋๋ถ๋ถ์ ์์คํ ์ ๋ด์ฅ): Node.js ์ฌ์ฉ: curl ์ฌ์ฉ (API ์๋ต ํ๋ฆฌํฐ ํ๋ฆฐํธ): jq ๋๊ตฌ๋ ์์์ด ์ง์ ๋ ์ถ๋ ฅ, ์ฟผ๋ฆฌ ๊ธฐ๋ฅ ๋ฐ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ๊ถ์ฅ๋ฉ๋๋ค.
JSON Schema๋ ๋ฌด์์ธ๊ฐ์?
JSON Schema๋ JSON ๋ฌธ์์ ์ฃผ์์ ๋ฌ๊ณ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์๋ ์ดํ์ ๋๋ค. JSON ๋ฌธ์๊ฐ ์ถฉ์กฑํด์ผ ํ๋ ๊ตฌ์กฐ, ๋ฐ์ดํฐ ์ ํ ๋ฐ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ JSON ๋ฐ์ดํฐ์ ๋ํ ๊ณ์ฝ ๋๋ ๋ช ์ธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. JSON Schema์ ์ฃผ์ ๊ธฐ๋ฅ: - ์ ํ ์ ํจ์ฑ ๊ฒ์ฌ -- ๊ฐ์ด ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, ๋ฐฐ์ด, ๊ฐ์ฒด ๋๋ null์ด์ด์ผ ํ๋์ง ์ง์ - ํ์ ํ๋ -- ํน์ ์์ฑ์ ํ์๋ก ํ์ - ๊ฐ ์ ์ฝ ์กฐ๊ฑด -- ์ต์/์ต๋๊ฐ, ๋ฌธ์์ด ํจํด(regex), ํ์ฉ๋ ๊ฐ(enums) ์ค์ - ๋ฐฐ์ด ์ ํจ์ฑ ๊ฒ์ฌ -- ๋ฐฐ์ด ๊ธธ์ด, ํญ๋ชฉ ์ ํ ๋ฐ ๊ณ ์ ์ฑ ์ ์ด - ์ค์ฒฉ ์ ํจ์ฑ ๊ฒ์ฌ -- ์ค์ฒฉ๋ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด์ ๋ํ ์คํค๋ง ์ ์ - ์กฐ๊ฑด๋ถ ์ ํจ์ฑ ๊ฒ์ฌ -- ๋ค๋ฅธ ํ๋์ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ท์น ์ ์ฉ JSON Schema ์์: JSON Schema๋ ์ผ๋ฐ์ ์ผ๋ก API ์์ฒญ ๋ณธ๋ฌธ, ๊ตฌ์ฑ ํ์ผ ๋ฐ ์๋น์ค ๊ฐ ๋ฐ์ดํฐ ๊ตํ ๊ณ์ฝ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.