LUCATHREE.COM

โ† 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์—์„œ ํ™œ์šฉ
ย