โ Back to list
๐ง TIL
[๋ฐฑ์๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฌ] JSON๊ณผ ๊ทธ ์ธ ๋ฐ์ดํฐ ํฌ๋งท
์์ฑ์ผ:
TILTerms
๋ฐ์ดํฐ ํฌ๋งท
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฑฐ๋ ํ๊ฒฝ์ค์ ๋ฑ์ ๋ํ๋ด๊ธฐ ์ํด ํน์ ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ฃผ ์ ํ๊ฒ ๋๋ค. ์ซ์๋ ๋ฌธ์์ด, ๋ฐ์ดํธ ๊ฐ์ ์์ ๋ฐ์ดํฐ ํํ๋ค๋ ์กด์ฌํ์ง๋ง ์ฌ๋ฌ ์ ๋ณด๋ฅผ ํจ์ถ์ ์ผ๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํด์ผ ํ๋ ๊ฒฝ์ฐ๋ค์ด ์๋๋ฐ ์ด๋ด ๋ JSON, XML, YAML ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํฌ๋งท์ ์ฌ์ฉํ๊ฒ ๋๋ค.
JSON (JavaScript Object Notation)
โ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด ๋ฌธ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ์ดํฐ ๊ตํ ํฌ๋งท์ผ๋ก ํ์ด์ฌ ๋์
๋๋ฆฌ์ฒ๋ผ ํค-๊ฐ ํ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ํํํ๋ค. ํ์ฌ ์น, ๋ชจ๋ฐ์ผ, ์๋ฒ API์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ํ์ค ํ์์ด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์์ ํ๊ณ ์๋ค.
์์
{ "name": "apple", "count": 30, "isFruit": true, "varieties": [ {"name": "Fuji", "taste": "Sweet, crunchy, and juicy"}, {"name": "McIntosh", "taste": "Tender, mildly tart, and slightly spicy"} ] }
์ฅ์
- ๊ฐ๋ณ๊ณ ์ง๊ด์ ์ด๋ค.
- ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํ๋ค.
- REST API, GraphQL ๋ฑ ํ๋ ์น ํต์ ์ ๊ธฐ๋ณธ ํฌ๋งท์ด๋ค.
๋จ์
- ์ฃผ์์ ์ธ ์ ์๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ปค์ง๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์๋ค.
XML (eXtensible Markup Language)
โ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ํํํ๋ ๋งํฌ์
์ธ์ด๋ก HTML์ฒ๋ผ ํ๊ทธ(<>)๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ธ๋ ๊ฒ์ด ํน์ง์ผ๋ก SOAP, RSS, SVG ๋ฑ ๋ค์ํ ํ์ค์์ ์ฌ์ ํ ์ฌ์ฉ๋๋ค.
์์
<produce> <name>apple</name> <count>30</count> <isFruit>true</isFruit> <varieties> <variety> <name>Fuji</name> <taste>Sweet, crunchy, and juicy</taste> </variety> <variety> <name>McIntosh</name> <taste>Tender, mildly tart, and slightly spicy</taste> </variety> </varieties> </produce>
์ฅ์
- ๋ฌธ์์ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋๋ ทํ๊ณ ํํ๋ ฅ์ด ํ๋ถํ๋ค.
- ๋ฐ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํํ ํ ์ ์์ด ์คํค๋ง๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ ์ํ ์ ์๋ค.
- namespace ์ง์์ผ๋ก ํ๊ทธ์ ์ค๋ณต์ ๋ฐฉ์งํ ์ ์๋ค.
๋จ์
- ๋ฌธ๋ฒ์ด ์ฅํฉํ๊ณ , ์ฌ๋์ด ์ฝ๊ธฐ ๋ถํธํ๋ค.
- JSON ๋๋น ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฌ๋ค.
YAML (YAML Ainโt Markup Language)
โ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๋๋ก ์ค๊ณ๋ ์ค์ ํ์ผ ํฌ๋งท์ผ๋ก ํ์ด์ฌ์ ๋ค์ฌ์ฐ๊ธฐ ์คํ์ผ๊ณผ ๋น์ทํ๊ฒ, ๊ตฌ์กฐ๋ฅผ ๋ค์ฌ์ฐ๊ธฐ๋ก ํํํ๋ ๊ฒ์ด ํน์ง์ด๋ค. ์ฃผ๋ก ์ค์ ํ์ผ์ด๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ํ์๋ก ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ฉฐ Kubernetes, Docker Compose, GitHub Actions ๋ฑ์์ ํ์ค์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์์
name: apple count: 30 isFruit: true varieties: - name: Fuji taste: "Sweet, crunchy, and juicy" - name: McIntosh taste: "Tender, mildly tart, and slightly spicy"
์ฅ์
- ๋ฌธ๋ฒ์ด ๊ฐ๊ฒฐํ์ฌ ์ฌ๋์ด ์ฝ๊ณ ์ฐ๊ธฐ ํธํ๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์๋์ ์ผ๋ก ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๋ค.
- ์ฃผ์์ ์ง์ํ๋ค.
๋จ์
- ๋ค์ฌ์ฐ๊ธฐ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ํ์ฑ์ด ์คํจํ ์ ์๋ค.
- ๋๋ฌด ์์ ๋ก์ด ๋ฌธ๋ฒ ๋๋ฌธ์ ๊ตฌ์กฐ์ ์ ์ฝ์ด ์ฝํ๋ค.
- JSON๋ณด๋ค ํ์ฑ ์๋๊ฐ ์ฝ๊ฐ ๋๋ฆฌ๋ค.
๋ฌด์์ ์ ํํ ๊ฒ์ธ๊ฐ?
๊ฐ ๋ฐ์ดํฐ ํ์์ ์ฅ๋จ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ ๋ชฉ์ ๊ณผ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ์ ํํ์ฌ ์ธ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ ์ก ์ค์ฌ์ผ ๊ฒฝ์ฐ โ JSON
- ์ฌ๋์ด ์์ฃผ ํธ์งํด์ผ ํ ๊ฒฝ์ฐ โ YAML
- ์๊ฒฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ โ XML
๊ทธ ์ธ ๊ธฐํ ํฌ๋งท๋ค
- TOML(Tomโs Obvious, Minimal Language): ์ค์ ํ์ผ์ฉ์ผ๋ก ์ ์๋ ํฌ๋งท
- INI: ์๋์ฐ ์ค์ ํ์ผ์์ ์ ๋๋ ํฌ๋งท
- MessagePack: JSON๊ณผ ํธํ๋์ง๋ง ๋ ํจ์จ์ ์ด๊ณ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ์ด์ง ํฌ๋งท
- Protobuf(Protocol Buffers): ๊ตฌ๊ธ์์ ๊ฐ๋ฐํ gRPC ์ฉ ์ด์ง ๋ฐ์ดํฐ ํฌ๋งท
- CSV(Comma-Separated Values): ํ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํ ํ ์คํธ ํฌ๋งท
- BSON(Binary JSON): JSON์ ์ด์ง ์ธ์ฝ๋ฉ ์ง๋ ฌํํ ํฌ๋งท์ผ๋ก ์ฃผ๋ก ๋ชฝ๊ณ db์์ ํ์ฉ
ย