SEO Keywords: YAML이란, YAML 문법, YAML vs JSON, YAML 사용법, Kubernetes YAML, Docker Compose YAML, 데이터 직렬화
들어가며
DevOps 엔지니어라면 하루에도 수십 번 마주치는 파일 형식이 있습니다. Kubernetes manifest, Docker Compose 설정, GitHub Actions 파이프라인 — 이 모든 것의 공통점은 바로 YAML로 작성된다는 점입니다. 2026년 현재 클라우드 네이티브 인프라가 표준이 된 환경에서 YAML은 사실상 인프라의 언어가 되었습니다. 이 글에서는 YAML의 핵심 개념부터 실전 활용 패턴까지 체계적으로 정리합니다.
1. YAML이란 무엇인가?
YAML은 "YAML Ain't Markup Language" 의 재귀적 약자입니다. 처음에는 "Yet Another Markup Language"로 시작했지만, 마크업보다는 데이터 표현에 초점을 맞춘다는 의미에서 이름이 바뀌었습니다.
2001년 Clark Evans가 처음 설계했으며, 사람이 읽고 쓰기 쉬운 데이터 직렬화 포맷을 목표로 합니다. JSON과 달리 중괄호나 따옴표 대신 들여쓰기(indentation) 로 구조를 표현하며, # 기호로 주석을 달 수 있습니다.
2. YAML 핵심 문법 정리
기본 키-값 (Scalar)
name: my-service
version: "1.0.0"
replicas: 3
enabled: true
ratio: 0.85
- 문자열은 따옴표 없이 작성 가능 (단, 특수문자 포함 시 따옴표 필요)
- 숫자, 불리언, null 등은 자동으로 타입 감지
리스트 (Sequence)
# 블록 스타일
ports:
- 8080
- 9090
# 인라인 스타일
tags: [backend, api, v2]
중첩 객체 (Mapping)
database:
host: example.com
port: 3306
credentials:
user: myuser
password: secret
멀티라인 문자열
# | : 줄바꿈 유지
description: |
첫 번째 줄
두 번째 줄
# > : 줄바꿈을 공백으로 처리
summary: >
긴 설명을 여러 줄에
걸쳐 작성할 때 사용
앵커와 별칭 (중복 제거)
# & 로 앵커 정의, * 로 재사용
defaults: &defaults
replicas: 2
memory: "256Mi"
production:
<<: *defaults
replicas: 5 # 오버라이드 가능
3. YAML vs JSON: 언제 무엇을 쓸까?
항목YAMLJSON
| 가독성 | ★★★★★ | ★★★ |
| 주석 지원 | ✅ # 사용 가능 | ❌ |
| 파싱 복잡도 | 높음 (엣지케이스 다양) | 낮음 |
| 용도 | 설정 파일, 인프라 정의 | API 응답, 데이터 교환 |
| 들여쓰기 오류 | 취약 (탭 vs 스페이스) | 해당 없음 |
| 타입 자동 변환 | 있음 (주의 필요) | 명시적 |
결론: 사람이 직접 작성하고 관리하는 설정 파일은 YAML, 시스템 간 데이터 교환은 JSON이 적합합니다.
4. 실전 예제: Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-api
namespace: production
labels:
app: my-api
version: v2
spec:
replicas: 3
selector:
matchLabels:
app: my-api
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: api
image: example.com/my-api:v2
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
env:
- name: DB_HOST
valueFrom:
secretKeyRef:
name: db-secret
key: host
5. 자주 발생하는 YAML 실수와 해결법
① 탭 문자 사용 금지
YAML은 들여쓰기에 스페이스만 허용합니다. 탭을 사용하면 파싱 오류가 발생합니다. 에디터에서 "탭을 스페이스로 변환" 설정을 활성화하세요.
② 특수문자가 포함된 값
콜론(:)이나 #이 포함된 값은 반드시 따옴표로 감쌉니다.
message: "연결 실패: 타임아웃" # 올바름
message: 연결 실패: 타임아웃 # 파싱 오류
③ 불리언 함정
yes, no, on, off도 YAML 1.1에서 불리언으로 파싱됩니다. 문자열로 쓰려면 따옴표를 사용하세요.
answer: "yes" # 문자열 "yes"
answer: yes # 불리언 true (YAML 1.1)
④ 들여쓰기 일관성
같은 레벨의 항목은 반드시 동일한 공백 수로 정렬되어야 합니다. 2칸 또는 4칸으로 통일하고 팀 내에서 표준을 정하세요.
6. YAML 검증 및 디버깅 도구
실무에서 YAML을 다룰 때 유용한 도구들입니다.
- yamllint: CLI 기반 YAML 문법 검사기
- kubeval / kubeconform: Kubernetes YAML 스키마 검증
- yq: jq와 유사한 YAML 쿼리/변환 CLI 도구
- VS Code YAML Extension: Red Hat이 만든 스키마 기반 자동완성
# yamllint 설치 및 검사
pip install yamllint
yamllint deployment.yaml
# yq로 특정 값 추출
yq '.spec.replicas' deployment.yaml
마무리
YAML은 단순한 설정 파일 형식을 넘어 2026년 클라우드 네이티브 인프라의 핵심 언어로 자리 잡았습니다. Kubernetes, Helm, ArgoCD, GitHub Actions 등 현대 DevOps 스택 전반에서 YAML이 사용되는 만큼, 문법적 정확성과 가독성 있는 작성 습관이 생산성과 직결됩니다. 앵커/별칭으로 중복을 제거하고, 린터를 CI 파이프라인에 포함시켜 오류를 사전에 방지하는 것이 핵심 실천 포인트입니다.
관련 키워드: YAML이란, YAML 문법 총정리, Kubernetes YAML 예제, YAML vs JSON 차이, DevOps 설정 파일, 데이터 직렬화, YAML 들여쓰기 오류, yq 사용법, yamllint, 2026 클라우드 네이티브