YAML 파서
YAML(YAML Ain't Markup Language)은 설정 파일에 널리 사용되는 사람이 읽기 쉬운 데이터 직렬화 형식입니다. 이 도구는 앵커, 별칭, 멀티 문서 스트림을 포함한 YAML 1.2 사양을 완전히 지원하며 결과를 대화형 트리 뷰로 표시합니다.
사양
주요 사용 사례
- Kubernetes 매니페스트 파싱 및 검증(Deployment, Service, ConfigMap)
- Docker Compose 및 docker-compose.yml 파일 읽기
- GitHub Actions, GitLab CI 또는 CircleCI 워크플로우 디버그
- Ansible 플레이북을 프로그래밍 처리를 위해 JSON으로 변환
- Helm chart values 파일 검증
기능
- YAML 1.2 사양 완전 지원
- 재사용 가능한 콘텐츠를 위한 앵커(&) 및 별칭(*) 처리
- 멀티 문서 스트림 파싱(--- 구분자)
- JSON, TOML 또는 XML로 변환
- 줄별 오류 메시지가 포함된 구문 검증
- 중첩 구조를 위한 대화형 트리 뷰
예제
Kubernetes Deployment
사용해 보기 →복제된 nginx Pod를 정의하는 Kubernetes Deployment 매니페스트.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginxDocker Compose
사용해 보기 →웹 및 데이터베이스 서비스를 정의하는 Docker Compose 파일.
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret팁
- YAML은 들여쓰기에 민감합니다. 탭이 아닌 공백을 사용하세요.
- 특수 문자가 포함되지 않는 한 문자열에 따옴표가 필요하지 않습니다.
- 앵커(&name)와 별칭(*name)을 사용하여 콘텐츠 반복을 피하세요.
- 여러 줄 문자열은 |(리터럴) 또는 >(접힘) 블록 스칼라를 사용할 수 있습니다.
이해하기 YAML 파서
YAML(YAML Ain't Markup Language)은 DevOps, 클라우드 인프라, 애플리케이션 설정에서 널리 사용되는 사람이 읽기 쉬운 데이터 직렬화 형식입니다. 들여쓰기 기반 구문은 대괄호와 중괄호의 시각적 잡음을 제거하여 Infrastructure as Code 도구, CI/CD 파이프라인, 컨테이너 오케스트레이션의 선호 형식이 되었습니다.
YAML의 핵심 강점은 가독성입니다. Kubernetes Deployment 매니페스트, GitHub Actions 워크플로우, Docker Compose 파일은 YAML로 작성하면 한눈에 이해할 수 있습니다. 이 형식은 스칼라(문자열, 숫자, 불리언, null, 날짜), 시퀀스(배열), 매핑(키-값 쌍)을 지원합니다. 문자열은 보통 따옴표가 필요 없고, 여러 줄 콘텐츠에는 리터럴 블록(|) 또는 접힘 블록(>)을 사용할 수 있으며, 앵커(&)와 별칭(*)을 통해 값을 한 번 정의하고 여러 번 참조하여 대규모 설정 파일의 반복을 줄일 수 있습니다.
YAML 1.2는 현재 사양으로, JSON의 엄격한 상위 집합입니다. 모든 유효한 JSON 문서는 유효한 YAML이기도 합니다. 이는 같은 파일 내에서 YAML과 JSON 구문을 혼합할 수 있음을 의미합니다. --- 구분자를 통한 멀티 문서 지원은 단일 파일에 여러 독립 문서를 포함할 수 있게 해주며, Kubernetes 매니페스트와 Helm 템플릿에서 흔히 사용됩니다.
YAML의 주요 함정은 공백 민감성입니다. 탭은 들여쓰기에 사용할 수 없으며(공백만 허용), 잘못 정렬된 키는 문서 구조를 조용히 변경할 수 있습니다. "노르웨이 문제" — 따옴표 없는 "no", "yes", "on", "off" 같은 값이 불리언으로 해석되는 현상 — 도 악명 높은 버그 원인입니다. YAML 1.2는 이러한 문제 중 일부를 해결했지만, 많은 파서가 기본적으로 여전히 YAML 1.1 규칙을 사용합니다.
YAML 1.1은 yes/no, on/off, true/false와 대문자 변형을 포함한 광범위한 불리언 리터럴 집합을 정의합니다. NO 같은 국가 코드는 불리언 false로 파싱되고, 문자열 "on"은 true가 됩니다 — 악명 높은 "노르웨이 문제"입니다. YAML 1.2는 불리언을 true와 false로만 제한하지만, PyYAML을 포함한 많은 인기 파서는 기본적으로 YAML 1.1 규칙을 사용합니다. 안전한 해결책은 잘못 해석될 수 있는 문자열에 항상 따옴표를 사용하는 것입니다. 탭 문자도 들여쓰기에 엄격히 금지되어 있으며, 공백만 허용됩니다. 들여쓰기에 탭이 있으면 파싱 오류가 발생합니다. 레벨당 2칸 공백이 가장 일반적인 관례입니다.
YAML은 여러 줄 문자열을 위한 두 가지 블록 스칼라 스타일을 제공합니다. 리터럴 블록 스칼라(|)는 줄바꿈을 작성된 그대로 유지하여 내장 스크립트나 SQL 쿼리에 이상적입니다. 접힘 블록 스칼라(>)는 연속된 줄을 공백으로 결합하여 긴 설명이나 단락에 적합합니다. 두 스타일 모두 수정자를 지원합니다: |-와 >-는 후행 줄바꿈을 제거하고, |+와 >+는 모든 후행 줄바꿈을 유지합니다.
앵커와 별칭은 YAML의 콘텐츠 재사용 메커니즘입니다. 앵커(&name)는 나중에 참조할 수 있도록 노드를 표시하고, 별칭(*name)은 문서의 다른 곳에 해당 노드를 삽입합니다. 병합 키(<<: *defaults)와 결합하면 이 패턴을 통해 공유 설정을 한 번 정의하고 여러 매핑에 병합할 수 있습니다. 이는 많은 작업이 공통 환경 변수, 캐싱 규칙 또는 배포 단계를 공유하는 CI/CD 설정에서 특히 유용합니다.