๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด API ์๋ต์ด๋ ์ค์ ํ์ผ์์ ํ ์ค๋ก ๋ญ์ณ์๋ JSON์ ๋ง์ฃผ์น ๋๊ฐ ๋ง์ต๋๋ค. ๋์ผ๋ก ์ฝ๊ธฐ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ ์์ค์ด์ฃ . ๋ฐ๋๋ก ์๋ฒ์ ์ ์กํ ๋๋ ๋ถํ์ํ ๊ณต๋ฐฑ์ ์์ ์ ์ฉ๋์ ์ค์ฌ์ผ ํ ๋๋ ์์ต๋๋ค.
์ค๋์ JSON์ด ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ์ฝ๊ณ ๋ค๋ฃจ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฅด๊ฒ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฝ๋๋ค.
JSON์ด๋?
JSON(JavaScript Object Notation)์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๊ธฐ ์ํ ๊ฒฝ๋ ๋ฐ์ดํฐ ํ์์ ๋๋ค. 1999๋ ๋๊ธ๋ฌ์ค ํฌ๋กํฌ๋๊ฐ ์ ์ํ์ผ๋ฉฐ, ํ์ฌ ์น API์ ํ์ค ๋ฐ์ดํฐ ํ์์ผ๋ก ์๋ฆฌ์ก์์ต๋๋ค.
์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ ๊ธฐ๊ณ๊ฐ ํ์ฑํ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๋ก ๋์ด ์์ต๋๋ค.
JSON์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
JSON์ 6๊ฐ์ง ๋ฐ์ดํฐ ํ์ ์ ์ง์ํฉ๋๋ค.
| ํ์ | ์์ | ์ค๋ช |
|---|---|---|
| ๋ฌธ์์ด(String) | "hello" | ํฐ๋ฐ์ดํ๋ก ๊ฐ์ |
| ์ซ์(Number) | 42, 3.14 | ์ ์ยท์์ ๋ชจ๋ |
| ๋ถ๋ฆฌ์ธ(Boolean) | true, false | ์ฐธยท๊ฑฐ์ง |
| null | null | ๊ฐ ์์ |
| ๋ฐฐ์ด(Array) | [1, 2, 3] | ์์ ์๋ ๋ชฉ๋ก |
| ๊ฐ์ฒด(Object) | {"key": "value"} | ํค-๊ฐ ์ |
๊ธฐ๋ณธ JSON ์์:
{
"name": "ํ๊ธธ๋",
"age": 30,
"isStudent": false,
"hobbies": ["๋
์", "์ฝ๋ฉ", "์ฌํ"],
"address": {
"city": "์์ธ",
"district": "๊ฐ๋จ๊ตฌ"
}
}
JSON ์์ฑ ๊ท์น
JSON์ ์ง์ ์์ฑํ๊ฑฐ๋ ์์ ํ ๋ ์์์ผ ํ ๊ท์น๋ค์ด ์์ต๋๋ค.
1. ํค๋ ๋ฐ๋์ ํฐ๋ฐ์ดํ:
// ์ฌ๋ฐ๋ฆ
{"name": "ํ๊ธธ๋"}
// ํ๋ฆผ (์์๋ฐ์ดํ ๋ถ๊ฐ)
{'name': 'ํ๊ธธ๋'}
2. ๋ง์ง๋ง ํญ๋ชฉ์ ์ผํ ๋ถ๊ฐ (Trailing Comma):
// ์ฌ๋ฐ๋ฆ
{
"a": 1,
"b": 2
}
// ํ๋ฆผ (๋ง์ง๋ง ์ผํ)
{
"a": 1,
"b": 2,
}
3. ์ฃผ์ ๋ถ๊ฐ:
// ํ๋ฆผ โ JSON์๋ ์ฃผ์์ด ์์
{
// ์ด๋ฆ
"name": "ํ๊ธธ๋"
}
4. undefined ๋ถ๊ฐ:
// ํ๋ฆผ โ undefined๋ JSON ํ์
์ด ์๋
{"value": undefined}
์ด๋ฐ ๊ท์น๋ค์ ํ๋๋ผ๋ ์ด๊ธฐ๋ฉด JSON ํ์ฑ ์๋ฌ๊ฐ ๋ฉ๋๋ค. ํฌ๋งทํฐ๋ ์ด๋ฐ ์ค๋ฅ๋ฅผ ๋ฐ๋ก ์ก์์ค๋๋ค.
JSON ํฌ๋งทํ ์ด ํ์ํ ์ํฉ
API ์๋ต ๋๋ฒ๊น : REST API๋ฅผ ํ ์คํธํ ๋ ์๋ต์ด ํ ์ค๋ก ๋ญ์ณ์์ผ๋ฉด ์ฝ๊ธฐ ์ด๋ ต์ต๋๋ค. ํฌ๋งทํ ํ๋ฉด ๊ตฌ์กฐ๊ฐ ๋ช ํํ๊ฒ ๋ณด์ ๋๋ค.
// ํฌ๋งทํ
์
{"user":{"id":1,"name":"ํ๊ธธ๋","email":"hong@example.com","roles":["admin","user"]}}
// ํฌ๋งทํ
ํ
{
"user": {
"id": 1,
"name": "ํ๊ธธ๋",
"email": "hong@example.com",
"roles": ["admin", "user"]
}
}
์ค์ ํ์ผ ์ ๋ฆฌ: package.json, tsconfig.json ๋ฑ ๊ฐ๋ฐ ์ค์ ํ์ผ์ ํธ์งํ๋ค ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋ง๊ฐ์ง ๊ฒฝ์ฐ ํฌ๋งทํ ์ผ๋ก ์ ๋ฆฌํฉ๋๋ค.
์ ํจ์ฑ ๊ฒ์ฌ: JSON ํ์ฑ ์๋ฌ๊ฐ ๋ฌ์ ๋ ์ด๋์ ์ค๋ฅ๊ฐ ๋ฌ๋์ง ์ฐพ์ ๋ ํฌ๋งทํฐ๊ฐ ์ค๋ฅ ์์น๋ฅผ ์๋ ค์ค๋๋ค.
์ ์ก์ฉ ์์ถ: ๋คํธ์ํฌ๋ก ์ ์กํ ๋๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ ์์ถ(Minify) ํํ๋ก ์ฉ๋์ ์ค์ ๋๋ค.
JSON vs ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ๋น๊ต
| ํ์ | ํน์ง | ์ฃผ์ ์ฌ์ฉ์ฒ |
|---|---|---|
| JSON | ๊ฒฝ๋, ๋ฒ์ฉ, ์ฝ๊ธฐ ์ฌ์ | Web API, ์ค์ ํ์ผ |
| XML | ํ๊ทธ ๊ธฐ๋ฐ, ๋ฌด๊ฑฐ์ | ๊ธฐ์ ์์คํ , RSS |
| YAML | ๋ค์ฌ์ฐ๊ธฐ ๊ธฐ๋ฐ, ๊ฐ๊ฒฐ | CI/CD, Docker, K8s |
| CSV | ํ ํํ, ๋จ์ | ์คํ๋ ๋์ํธ, ๋ฐ์ดํฐ |
| TOML | ์ฝ๊ธฐ ์ฌ์ด ์ค์ | Rust, ํจํค์ง ์ค์ |
์น ๊ฐ๋ฐ์์๋ JSON์ด ์ฌ์ค์ ํ์ค์ ๋๋ค. REST API์ GraphQL ๋ชจ๋ JSON์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ โ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก
ToolZip JSON ํฌ๋งทํฐ ๋ฐ๋ก๊ฐ๊ธฐ โ
- โ JSON ์ ํจ์ฑ ๊ฒ์ฌ (์ค๋ฅ ์์น ํ์)
- ๐จ ๊ตฌ๋ฌธ ๊ฐ์กฐ(Syntax Highlighting)
- ๐ ๋ค์ฌ์ฐ๊ธฐ ํฌ๊ธฐ ์กฐ์ (2์นธยท4์นธ)
- ๐ฆ Minify(์์ถ) ๊ธฐ๋ฅ
- ๐ ์๋ฒ ์ ์ก ์์
- ๐ฐ ์์ ๋ฌด๋ฃ
์ฌ์ฉ ๋ฐฉ๋ฒ
- toolzip.app/tools/json-formatter ์ ์
- JSON ํ ์คํธ ๋ถ์ฌ๋ฃ๊ธฐ
- ํฌ๋งท ๋๋ ์์ถ ์ ํ
- ๊ฒฐ๊ณผ ๋ณต์ฌ
JSON ๊ด๋ จ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q. JSON๊ณผ JavaScript ๊ฐ์ฒด์ ์ฐจ์ด๋?
JavaScript ๊ฐ์ฒด๋ ํค์ ๋ฐ์ดํ ์์ด๋ ๋๊ณ ํจ์๋ ๊ฐ์ด ๋ ์ ์์ต๋๋ค. JSON์ ์์ ๋ฐ์ดํฐ ํ์์ด๋ผ ํจ์๊ฐ ์๊ณ ํค๋ ๋ฐ๋์ ํฐ๋ฐ์ดํ์ ๋๋ค.
// JavaScript ๊ฐ์ฒด (๋ฐ์ดํ ์์ด๋ ๋จ)
const obj = { name: "ํ๊ธธ๋", greet: () => "์๋
" }
// JSON (๋ฐ๋์ ํฐ๋ฐ์ดํ, ํจ์ ๋ถ๊ฐ)
{"name": "ํ๊ธธ๋"}
Q. JSON ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ค๋ฉด?
Minify(์์ถ)๋ก ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ์ ์ ๊ฑฐํ๋ฉด ํฌ๊ธฐ๊ฐ 20~30% ์ค์ด๋ญ๋๋ค. ์๋ฒ ์๋ต ์๊ฐ ๋จ์ถ์ ๋์์ด ๋ฉ๋๋ค.
Q. JSON์ ํ๊ตญ์ด๋ฅผ ์ธ ์ ์๋์?
๊ฐ๋ฅํฉ๋๋ค. JSON์ UTF-8 ์ธ์ฝ๋ฉ์ ์ง์ํ๋ฏ๋ก ํ๊ตญ์ด, ์ค๊ตญ์ด, ์ผ๋ณธ์ด ๋ฑ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Q. JSON์ ์์ ๋ก ๋ณํํ ์ ์๋์?
JSON โ CSV ๋ณํ ํ ์์ ์์ ์ด๊ฑฐ๋, ์ง์ JSON โ Excel ๋ณํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ฆฌ
- โ JSON ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ค๋ฅ ์์น ํ์
- โ ๊ตฌ๋ฌธ ๊ฐ์กฐ๋ก ๊ฐ๋ ์ฑ ํฅ์
- โ ๋ค์ฌ์ฐ๊ธฐ ํฌ๊ธฐ ์ ํ
- โ Minify(์์ถ) ๊ธฐ๋ฅ
- โ ์๋ฒ ์ ์ก ์์, ์์ ๋ฌด๋ฃ
ToolZip JSON ํฌ๋งทํฐ ๋ฐ๋ก๊ฐ๊ธฐ โ
๊ด๋ จ ๋๊ตฌ: Base64 ๋ณํ๊ธฐ ยท URL ์ธ์ฝ๋ ยท JWT ๋์ฝ๋ ยท ํด์ ์์ฑ๊ธฐ