YAML Ain't Markup Language
재귀 약자는 농담이지만 설계 목표는 진심이야. YAML 은 사람이 읽기 쉬운 데이터 직렬화 언어를 노리고 만들었어. JSON 이랑 같은 일 (데이터 교환, config) 을 하되 구두점은 줄이고 공백을 늘린 거지. 지금 spec 은 YAML 1.2.2 (2021) 인데, 아직 YAML 1.1 파서를 싣고 나오는 도구도 많아.
YAML 은 JSON superset
유효한 JSON 문서는 전부 유효한 YAML 1.2 이기도 해. 거꾸로는 안 되고. YAML 쪽에 날짜, 여러 줄 문자열, anchor, 주석, 그리고 훨씬 느슨한 따옴표 규칙이 더 붙어 있거든. 그래서 YAML 파서는 JSON 을 그대로 통과시켜 주지만, JSON 파서는 YAML 을 거의 못 읽어.
이미 YAML 쓰고 있는 곳
- Kubernetes manifest — 모든
Deployment,Service,ConfigMap가 YAML. - Docker Compose —
docker-compose.yaml하나가 여러 컨테이너짜리 앱을 통째로 정의해. - CI/CD — GitHub Actions, GitLab CI, CircleCI, Travis 다 YAML 사용.
- Ansible — playbook, inventory, role 다 YAML.
- 정적 사이트 front matter — Jekyll, Hugo, Astro, Next MDX (Markdown 트랙에서 다룸).
- 애플리케이션 config — Spring Boot 의
application.yaml, FastAPI/Pydantic settings, OpenAPI spec.
원칙: YAML 이 내세우는 건 사람이 읽기 쉽다는 점이고, 그 대가로 치르는 건 공백 민감도야. 이 포맷은 조심해서 고치는 사람한테는 상을 주고, 손이 기억하는 대로 갈기는 사람한테는 벌을 줘. YAML 을 Python 처럼 다뤄. 들여쓴 것에도 뜻이 있고, 안 들여쓴 것에도 뜻이 있어.