제1.3장: JSON 형식
학습 시간: 35분
1. JSON: 우주 통신 언어
우주 탐사선과 관제 센터가 서로 다른 언어로 말한다고 상상해 보세요. JSON (JavaScript Object Notation)은 사람과 기계 모두가 이해할 수 있는 범용 데이터 언어입니다. 마치 우주 비행사들의 국제어와 같습니다!
주요 특징:
- 🪶 경량성: 약한 신호에서도 빠른 전송
- 👀 가독성: 육안으로 구조 파악 용이
- 🔄 범용성: 모든 프로그래밍 언어에서 지원
💡 우주 비유:
JSON은 별 데이터가 담긴 디지털 전보와 같습니다. 모스 부호 대신
{키: 값}
형태의 명확한 구조를 사용합니다.
2. JSON 메시지의 해부
JSON은 두 가지 유형의 구조로 구성됩니다:
A. 객체 (우주선)
B. 배열 (성단)
[
{"name": "Sirius", "magnitude": -1.46},
{"name": "Canopus", "magnitude": -0.74},
{"name": "Arcturus", "magnitude": -0.05}
]
⚡ 구문 규칙:
- 키는 따옴표
" "
안에 - 값: 문자열, 숫자, 불리언 (
true
/false
),null
- 데이터는 쉼표로 구분
- 객체는 중괄호
{}
, 배열은 대괄호[]
사용
3. JSON vs XML: 형식의 대결
매개변수 | JSON (현대 위성) | XML (오래된 망원경) |
---|---|---|
가독성 | 높음 (필드에 직접 접근) | 낮음 (태그 <planet>...</planet> ) |
크기 | 간결함 | 번거로움 (크기 +30%) |
처리 속도 | 빠름 | 느림 |
예시 | {"planet": "Mars"} |
<planet>Mars</planet> |
🔭 JSON이 우주에서 승리한 이유?
NASA, SpaceX, ESA의 API는 JSON을 사용합니다 — 데이터 전송에 이상적이기 때문입니다!
4. 코드에서 JSON 사용하기
Python 예시 (달 데이터 가져오기):
import requests
import json
# 실제 API 사용 예시: 태양계 데이터를 가져오기 위해
# The Solar System OpenData API에서
try:
response = requests.get("https://api.le-systeme-solaire.net/rest/bodies/terre")
response.raise_for_status() # HTTP 오류 (4xx, 5xx) 확인
planet_data = response.json()
print(f"이름: {planet_data['englishName']}")
print(f"위성: {[moon['moon'] for moon in planet_data['moons']]}")
# Python 딕셔너리를 JSON 문자열로 변환하여 저장
planet_json_str = json.dumps(planet_data, indent=2, ensure_ascii=False) # ensure_ascii=False는 키릴 문자 지원을 위함
print("\n--- 형식화된 JSON ---")
print(planet_json_str)
except requests.exceptions.RequestException as e:
print(f"요청 오류: {e}")
JavaScript 예시 (망원경 데이터 처리):
const Data = `{
"id": "terre",
"name": "La Terre",
"englishName": "Earth",
"isPlanet": true,
"moons": [
{
"moon": "La Lune",
"rel": "https://api.le-systeme-solaire.net/rest/bodies/lune"
}
],
"semimajorAxis": 149598023,
"perihelion": 147095000,
"aphelion": 152100000,
"eccentricity": 0.0167,
"inclination": 0,
"mass": {
"massValue": 5.97237,
"massExponent": 24
},
"vol": {
"volValue": 1.08321,
"volExponent": 12
},
"density": 5.5136,
"gravity": 9.8,
"escape": 11190,
"meanRadius": 6371.0084,
"equaRadius": 6378.1366,
"polarRadius": 6356.8,
"flattening": 0.00335,
"dimension": "",
"sideralOrbit": 365.256,
"sideralRotation": 23.9345,
"aroundPlanet": null,
"discoveredBy": "",
"discoveryDate": "",
"alternativeName": "",
"axialTilt": 23.4393,
"avgTemp": 288,
"mainAnomaly": 358.617,
"argPeriapsis": 85.901,
"longAscNode": 18.272,
"bodyType": "Planet"
}`;
const dataObj = JSON.parse(Data);
console.log(dataObj.target);
5. JSON 유효성 검사: "신호" 확인
데이터를 사용하기 전에 JSON이 다음을 만족하는지 확인하세요:
-
올바른 구조를 가졌는지 (괄호를 확인하세요!)
-
예상 필드를 포함하는지
-
구문 오류가 없는지
도구: - JSONLint (JSON을 위한 우주 쓰레기 탐지기처럼) - 내장 언어 파서 (잘못된 형식일 경우 오류 발생)
⚠️ 오류 예시:
{"planet": "Mars"
→ 닫는 괄호가 없습니다!해결책: Python에서는
json.loads()
를, JS에서는JSON.parse()
를 항상 사용하여 검증하세요.
복습 퀴즈
🚀 장 요약:
JSON은 API 세계의 "우주 에스페란토"입니다. 그 구조를 알면 다음을 수행할 수 있습니다:
-
📡 망원경과 탐사선에서 데이터 수신
-
🔧 시스템 간 정보 변환
-
🛰️ 과학 데이터 파일 저장
도킹을 준비하세요! 다음 장에서는 서버의 "우주 정거장" 관리 시스템인 REST API 아키텍처를 학습할 것입니다.
📌 실습: NASA Open APIs에 접속하여 소행성 API (Asteroids NeoWs)를 찾아 응답의 JSON 구조를 살펴보세요!