본문 바로가기
C.W.K.
Stream
Lesson 01 of 08 · published

YAML 이 뭐고, 이미 어디 쓰고 있나

~10 min · yaml, history, config

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

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 Composedocker-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 처럼 다뤄. 들여쓴 것에도 뜻이 있고, 안 들여쓴 것에도 뜻이 있어.

Code

Hello, YAML·yaml
# 앞서 작성한 JSON 의 YAML 버전
name: Pippa
age: 5
loves:
  - markdown
  - json
  - yaml
  - toml
home:
  city: Seoul
  timezone: Asia/Seoul
is_assistant: true
middle_name: null
세 언어로 YAML parse·bash
# Python (PyYAML — pip install pyyaml)
import yaml
data = yaml.safe_load(open('config.yaml'))

# JavaScript (js-yaml — npm install js-yaml)
import yaml from 'js-yaml';
const data = yaml.load(fs.readFileSync('config.yaml', 'utf8'));

# Bash (yq — YAML 의 jq 등가)
yq . config.yaml

External links

Exercise

JSON Fundamentals 첫 lesson 의 JSON 문서를 변환기 없이 손으로 YAML 로 옮겨봐. yq . file.yaml 로 검증해. Python 이 편하면 yaml.safe_load 로 같은 파일을 읽어봐도 되고. 그리고 YAML 쪽이 얼마나 줄었는지 봐. 그 차이가 JSON 이 구두점으로 내고 있던 가독성 세금이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.