JSON์ด๋ ๋ฌด์์ธ๊ฐ? ์ด๋ณด์๋ฅผ ์ํ ์๋ฒฝ ๊ฐ์ด๋
JSON์ด๋ ๋ฌด์์ธ๊ฐ?
JSON(JavaScript Object Notation)์ ์ฌ๋์ด ์ฝ๊ณ ์ฐ๊ธฐ ์ฝ๊ณ ๊ธฐ๊ณ๊ฐ ํ์ฑํ๊ณ ์์ฑํ๊ธฐ ์ฌ์ด ๊ฒฝ๋ ํ ์คํธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตํ ํ์์ ๋๋ค. ์๋ JavaScript ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๊ตฌ๋ฌธ์์ ํ์๋์์ง๋ง, ์ดํ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํ๋ ์ธ์ด ๋ ๋ฆฝ์ ์ธ ํ์ค์ด ๋์์ต๋๋ค.
์ค๋๋ JSON์ ์น์์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์ง๋ฐฐ์ ์ธ ํ์์ ๋๋ค. REST API, ๊ตฌ์ฑ ํ์ผ, NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ชจ๋ฐ์ผ ์ฑ ํต์ ๋ฐ ์๋ง์ ๋ฐ์ดํฐ ์ค์ฌ ์์คํ ์ ์ง์ํฉ๋๋ค. ๊ทธ ๋จ์ํจ๊ณผ ๋ณดํธ์ฑ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ๊ธฐ๋ณธ ์ ํ์ง๊ฐ ๋์์ต๋๋ค.
JSON ๊ตฌ๋ฌธ ๊ท์น
JSON์ ์๊ฒฉํ๊ณ ์ต์ํ์ ๊ตฌ๋ฌธ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค:
- ๋ฐ์ดํฐ๋ ํค/๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค
- ๋ชจ๋ ํค๋ ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ธ ๋ฌธ์์ด์ด์ด์ผ ํฉ๋๋ค (์์๋ฐ์ดํ๋ ํ์ฉ๋์ง ์์)
- ํค/๊ฐ ์์ ์ฝ๋ก (
:)์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค - ์์ ์ผํ(
,)๋ก ๊ตฌ๋ถ๋ฉ๋๋ค - ์ค๊ดํธ
{}๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์๋๋ค - ๋๊ดํธ
[]๋ ๋ฐฐ์ด์ ๊ฐ์๋๋ค - ํํ ์ผํ๋ ํ์ฉ๋์ง ์์ต๋๋ค
- ์๊ฒฉํ JSON์์๋ ์ฃผ์์ด ํ์ฉ๋์ง ์์ต๋๋ค
์ ํจํ JSON ์์
{
"name": "Jane Smith",
"age": 28,
"isEmployed": true,
"skills": ["JavaScript", "Python", "SQL"],
"address": {
"street": "123 Main Street",
"city": "San Francisco",
"zipCode": "94102"
},
"phoneNumbers": null
}
์ ํจํ์ง ์์ JSON ์์
ํํ ์ผํ (์ ํจํ์ง ์์):
{
"name": "Jane",
"age": 28,
}
์์๋ฐ์ดํ๋ก ๋ฌถ์ธ ํค (์ ํจํ์ง ์์):
{ 'name': 'Jane' }
ํค์ ๋ฐ์ดํ ๋๋ฝ (์ ํจํ์ง ์์):
{ name: "Jane" }
JSON ๋ฐ์ดํฐ ์ ํ
JSON์ ์ ํํ ์ฌ์ฏ ๊ฐ์ง ๋ฐ์ดํฐ ์ ํ์ ์ง์ํฉ๋๋ค:
| ์ ํ | ์ค๋ช
| ์์ |
|------|-------------|---------|
| ๋ฌธ์์ด | ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ธ ์ ๋์ฝ๋ ํ
์คํธ | "Hello, world!" |
| ์ซ์ | ์ ์ ๋๋ ๋ถ๋ ์์์ | 42, 3.14, -7, 1.5e10 |
| ๋ถ๋ฆฌ์ธ | ๋
ผ๋ฆฌ์ ์ฐธ ๋๋ ๊ฑฐ์ง | true, false |
| Null | ์๋์ ์ธ ๋น ๊ฐ | null |
| ๊ฐ์ฒด | ์์๊ฐ ์๋ ํค/๊ฐ ์ปฌ๋ ์
| {"key": "value"} |
| ๋ฐฐ์ด | ์์๊ฐ ์๋ ๊ฐ ๋ชฉ๋ก | [1, 2, 3] |
๋์ ๋๊ฒ ์๋ ๊ฒ: ๋ ์ง, ํ์์คํฌํ, ์ด์ง ๋ฐ์ดํฐ, undefined, ํจ์๋ ๋ค์ดํฐ๋ธ JSON ํํ์ด ์์ต๋๋ค. ๋ ์ง๋ ์ผ๋ฐ์ ์ผ๋ก ๊ด๋ก์ ISO 8601 ๋ฌธ์์ด๋ก ์ ์ฅ๋ฉ๋๋ค.
JSON๊ณผ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์์ ๋น๊ต
JSON์ ์ฌ๋ฌ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตํ ํ์๊ณผ ํจ๊ป ์กด์ฌํ๋ฉฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ต๋๋ค:
- JSON vs XML: JSON์ ๋ ๊ฐ๊ฒฐํ๊ณ ํ์ฑ ์๋๊ฐ ๋ ๋น ๋ฆ ๋๋ค. XML์ ์์ฑ, ๋ค์์คํ์ด์ค ๋ฐ ์คํค๋ง(XSD)๋ฅผ ์ง์ํ์ง๋ง ํจ์ฌ ๋ ์ฅํฉํฉ๋๋ค.
- JSON vs YAML: YAML์ ์ฃผ์์ ์ง์ํ์ฌ ๊ตฌ์ฑ ํ์ผ์์ ๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ์ง๋ง, ๋ค์ฌ์ฐ๊ธฐ์ ๋ฏผ๊ฐํ ๊ตฌ๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. JSON์ ๋ ์ด์์ฑ์ด ๋๊ณ ๋ ์๊ฒฉํ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- JSON vs CSV: CSV๋ ํ๋ฉด์ ์ด๊ณ ํ ํ์๋ง ๊ฐ๋ฅํฉ๋๋ค. JSON์ ์ค์ฒฉ ๊ณ์ธต๊ณผ ํผํฉ ๋ฐ์ดํฐ ์ ํ์ ์ง์ํฉ๋๋ค.
- JSON vs Protocol Buffers: Protobuf๋ ๊ธฐ๊ณ ๊ฐ ํต์ ์ ๋ ์๊ณ ๋น ๋ฅด์ง๋ง ์คํค๋ง ์ ์๊ฐ ํ์ํ๊ณ ์ฌ๋์ด ์ฝ์ ์ ์์ต๋๋ค.
JSON์ด ์น API๋ฅผ ์ง๋ฐฐํ๋ ์ด์
์ฌ๋ฌ ์์ธ์ด ์น API ์ค๊ณ์์ JSON์ ์ง๋ฐฐ๋ ฅ์ ์ค๋ช ํฉ๋๋ค:
- ์ธ์ด ๋ณดํธ์ฑ -- ๋ชจ๋ ์ฃผ์ ์ธ์ด์ ๋ค์ดํฐ๋ธ ๋๋ ์ ๊ด๋ฆฌ๋๋ JSON ํ์๊ฐ ์์ด ํตํฉ ๋ง์ฐฐ์ด ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ค์ดํฐ๋ธ ์ง์ -- JavaScript์
JSON.parse()์JSON.stringify()๋ JSON์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฐ์ค๋ฌ์ด ์ ํ์ผ๋ก ๋ง๋ญ๋๋ค. - ์ต์ ๋์ญํญ -- JSON์ ๊ฐ๋ฒผ์ด ๊ตฌ๋ฌธ์ XML๋ณด๋ค ์์ ํ์ด๋ก๋๋ฅผ ์์ฑํ์ฌ ์ง์ฐ ์๊ฐ๊ณผ ๋์ญํญ ๋น์ฉ์ ์ค์ ๋๋ค.
- ์ฌ๋์ด ์ฝ์ ์ ์์ -- ๊ฐ๋ฐ์๋ ํน๋ณํ ๋๊ตฌ ์์ด JSON ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌ, ๋๋ฒ๊น ๋ฐ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.
- ์ ์ฐํ ์คํค๋ง -- XML Schema๋ Protocol Buffers์ ๊ฐ์ ์๊ฒฉํ ํ์๊ณผ ๋ฌ๋ฆฌ, JSON์ ์ฌ์ปดํ์ผ ์์ด ์งํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ธ JSON ์ฌ์ฉ ์ฌ๋ก
- REST ๋ฐ GraphQL API -- ์์ฒญ ๋ฐ ์๋ต ํ์ด๋ก๋์ ํ์ค ํ์์ ๋๋ค.
- ๊ตฌ์ฑ ํ์ผ -- ESLint, Prettier, webpack, VS Code ๋ฑ์ ๋๊ตฌ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค -- MongoDB์ CouchDB๋ JSON๊ณผ ์ ์ฌํ ๋ฌธ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ง๋ ฌํ -- ์ ์ฅ, ์ ์ก ๋๋ ์บ์ฑ์ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐํ.
- ์ค์๊ฐ ํต์ -- WebSocket ์คํธ๋ฆผ ๋ฐ Webhooks์์์ JSON ๋ฉ์์ง.
- ๋ก๊ทธ ์ง๊ณ -- Winston, Logstash, Datadog๊ณผ ๊ฐ์ ๊ตฌ์กฐํ๋ ๋ก๊น ๋๊ตฌ๋ ๊ฒ์ ๋ฐ ํํฐ๋ง ๊ฐ๋ฅํ ๋ก๊ทธ ํญ๋ชฉ์ JSON์ ์ฌ์ฉํฉ๋๋ค.
JSON ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ํฌ๋งทํ
JSON ์์ ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํํ ์ผํ, ๋๋ฝ๋ ๋ฐ์ดํ ๋๋ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋์ง ์์ ๋ฌธ์์ ๊ฐ์ ๋จ์ผ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์ ์ฒด API ํตํฉ ๋๋ ๊ตฌ์ฑ ํ์ผ์ ๋ง๊ฐ๋จ๋ฆด ์ ์์ต๋๋ค. ํนํ ๋๊ท๋ชจ JSON ๋ฌธ์์ ๊ฒฝ์ฐ ์๋ ๊ฒ์ฌ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค.
JSON ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐฉ๋ฒ
์ ํจ์ฑ ๊ฒ์ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค:
- JSON ๋ฌธ์์ด ํ์ฑ -- JavaScript์
JSON.parse()๋๋ ์ ํํ ์ธ์ด์ ๋๋ฑํ ํ์ค ํ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ๊ตฌ๋ฌธ ์ค๋ฅ ํ์ธ -- ํ์๋ ๋ฌธ์ ์์น๋ฅผ ๋ํ๋ด๋ ๋ฉ์์ง์ ํจ๊ป ์ฒซ ๋ฒ์งธ ์๋ฐ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ๋ฐ๋ณต์ ์ผ๋ก ์ค๋ฅ ์์ -- ํ์๋ ์ฒซ ๋ฒ์งธ ์ค๋ฅ์์ ์ค์ง๋๋ฏ๋ก, ์ด๋ฅผ ์์ ํ๊ณ ๋ฌธ์๊ฐ ํต๊ณผํ ๋๊น์ง ๋ค์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.
๋๋ถ๋ถ์ ์จ๋ผ์ธ JSON ๋๊ตฌ๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ํฌ๋งทํ ์ ๊ฒฐํฉํฉ๋๋ค. JSON์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋๊ตฌ๊ฐ ์ฆ์ ๊ตฌ๋ฌธ์ ํ์ธํ๊ณ , ์ค ๋ฒํธ์ ์ด ๋ฒํธ๋ก ์ค๋ฅ๋ฅผ ๊ฐ์กฐ ํ์ํ๋ฉฐ, ๊น๋ํ๊ณ ๋ค์ฌ์ฐ๊ธฐ ๋ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค. ์ด๋ ์ฝ๋์์ ํ์ ์์ธ๋ก ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค.
JSON ์์ ํ
- ์ฌ์ฉํ๊ธฐ ์ ์ ํญ์ ์ ํจ์ฑ ๊ฒ์ฌ -- ์๋์ผ๋ก ์์ฑ๋ JSON์ด ์ ํจํ๋ค๊ณ ๊ฐ์ ํ์ง ๋ง์ธ์.
- ๋ฆฐํฐ ์ฌ์ฉ -- ESLint์ JSON ํ๋ฌ๊ทธ์ธ ๊ฐ์ ๋๊ตฌ๋ ํ๋ก๋์ ์ ๋๋ฌํ๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ์ก์๋ ๋๋ค.
- JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํธ -- ๋ฏธ๋ฌํ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ํผํ๊ธฐ ์ํด ๋ฌธ์์ด ์ฐ๊ฒฐ ๋์ ์ง๋ ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก JSON์ ์์ฑํ์ธ์.
- ์๊ฒฉํ Content-Type ํค๋ ์ค์ -- API์ ๊ฒฝ์ฐ
Content-Type: application/json์ ์ ์ฉํ์ฌ ์๋ชป๋ ํ์์ ์์ฒญ์ ์กฐ๊ธฐ์ ๊ฑฐ๋ถํ์ธ์.
๋ฌด๋ฃ ์จ๋ผ์ธ JSON ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ ๋ฐ ํฌ๋งทํฐ๋ฅผ ์ฌ์ฉํ์ฌ JSON ๊ตฌ๋ฌธ์ ์ฆ์ ํ์ธํ๊ณ , ์ค๋ฅ๋ฅผ ์ฐพ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ฝ๊ฒ ํฌ๋งทํ ํ์ธ์. ๊ธฐ์ด๋ฅผ ๋ฐฐ์ฐ๋ ์ด๋ณด์์ด๋ ํ๋ก๋์ API๋ฅผ ๋๋ฒ๊น ํ๋ ์๋ จ๋ ๊ฐ๋ฐ์์ด๋ , ์ ํฌ JSON ํฌ๋งทํฐ & ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ ๋๊ตฌ๋ JSON ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.