설정 파일을 만들 때, API 응답 포맷을 정할 때, "뭘로 하지?" 고민해본 적 있으시죠? JSON, YAML, XML—셋 다 데이터를 표현하는 포맷인데, 각각 언제 쓰는 게 좋을까요?
한눈에 비교
같은 데이터를 세 가지 포맷으로 표현해보겠습니다.
JSON
{
"name": "홍길동",
"age": 30,
"skills": ["JavaScript", "Python"],
"address": {
"city": "서울",
"zip": "12345"
}
}
YAML
name: 홍길동 age: 30 skills: - JavaScript - Python address: city: 서울 zip: "12345"
XML
<person>
<name>홍길동</name>
<age>30</age>
<skills>
<skill>JavaScript</skill>
<skill>Python</skill>
</skills>
<address>
<city>서울</city>
<zip>12345</zip>
</address>
</person>
벌써 느낌이 오시죠? YAML이 가장 간결하고, XML이 가장 장황합니다.
JSON: 웹의 표준
장점:
- JavaScript에서 바로 사용 가능 (이름부터 JavaScript Object Notation)
- 거의 모든 언어에서 지원
- 파싱 속도 빠름
- 웹 API의 사실상 표준
단점:
- 주석 불가 (설정 파일로는 불편)
- 따옴표, 콤마 등 엄격한 문법
- 사람이 직접 수정하기엔 번거로움
언제 쓸까: API 응답, 웹 데이터 교환, 프로그래밍에서 데이터 저장
YAML: 사람 친화적
장점:
- 가독성 최고 (들여쓰기로 구조 표현)
- 주석 가능 (#으로)
- 따옴표 대부분 생략 가능
- 멀티라인 문자열 지원
단점:
- 들여쓰기 실수하면 에러 (탭/스페이스 혼용 주의)
- 파싱 속도 JSON보다 느림
- 복잡한 기능(앵커, 별칭)은 혼란스러울 수 있음
언제 쓸까: 설정 파일 (Docker Compose, Kubernetes, GitHub Actions), 사람이 자주 편집하는 파일
XML: 여전히 살아있다
장점:
- 스키마 검증 (XSD로 엄격한 타입 체크)
- 속성(attribute) 지원
- 네임스페이스로 충돌 방지
- XSLT로 변환 가능
단점:
- 장황함 (태그가 데이터보다 많을 때도...)
- 파싱 복잡하고 느림
- 요즘 웹에서는 거의 안 씀
언제 쓸까: 레거시 시스템, SOAP API, 엄격한 스키마가 필요할 때, 오피스 문서 포맷 (docx는 내부적으로 XML)
한 장 요약
| JSON | YAML | XML | |
|---|---|---|---|
| 가독성 | 중간 | 좋음 | 나쁨 |
| 주석 | ❌ | ✅ | ✅ |
| 파싱 속도 | 빠름 | 중간 | 느림 |
| 스키마 검증 | JSON Schema | 제한적 | XSD (강력) |
| 주 용도 | API, 웹 | 설정 파일 | 레거시, 문서 |
실전 선택 가이드
- REST API 만든다 → JSON
- CI/CD 설정 파일 → YAML (GitHub Actions, GitLab CI)
- 컨테이너 오케스트레이션 → YAML (Docker Compose, Kubernetes)
- 사내 레거시 시스템 연동 → 아마 XML
- 브라우저 로컬 스토리지 → JSON
결론: 새 프로젝트라면 대부분 JSON이나 YAML입니다. XML은 특별한 이유가 있을 때만.