YAML
YAML
개요
YAML(YAML Ain't Markup Language)은 인간이 읽기 쉬운 데이터 직렬화 형식입니다. 주로 구성 파일(config files) 및 다중 언어 간 데이터 교환에 사용되며, XML이나 JSON과 비교해 간결하고 직관적인 문법을 특징으로 합니다. 2001년에 처음 제안된 이후 Docker, Kubernetes, CI/CD 도구 등 현대 소프트웨어 개발에서 널리 채택되고 있습니다.
특징
- 가독성 강화: 공백 기반 들여쓰기와 최소한의 구두점 사용으로 사람 눈에 친숙한 구조 제공
- 다중 언어 지원: Python, Java, JavaScript 등 주요 프로그래밍 언어에서 파서 지원
- 확장성: 복잡한 데이터 구조도 표현 가능하며, 태그 시스템을 통해 사용자 정의 타입 지원
- 플랫폼 독립성: 텍스트 기반 포맷으로 운영체제 및 환경에 구애받지 않음
문법 기초
들여쓰기(Indentation)
YAML은 공백(스페이스)의 수로 계층 구조를 표현합니다. 탭 문자 사용 금지라는 엄격한 규칙이 있습니다.
# 유효한 예시
person:
name: John
age: 30
# 무효한 예시 (탭 사용)
person:
name: Jane
age: 25 # ← 탭 문자로 인한 에러
주석
#
기호를 사용하여 설명을 추가할 수 있습니다.
# 데이터베이스 설정
database:
host: localhost # 개발 환경용
port: 5432
스칼라 값(Scalar Values)
기본적인 데이터 형태로 문자열, 숫자, 불리언 등을 포함합니다.
string_example: "Hello World"
number_example: 3.1415
boolean_example: true
null_value: ~ # 또는 null
컬렉션 타입
시퀀스(Sequences)
대시(-
)로 시작하는 리스트 구조:
fruits:
- Apple
- Banana
- Orange
매핑(Mappings)
키-값 쌍으로 구성된 사전 구조:
http_status:
200: OK
404: Not Found
고급 데이터 타입
멀티라인 문자열
>
연산자로 긴 텍스트 블록 표현:
description: >
YAML은 인간 중심의 데이터 직렬화 언어로,
복잡한 구성 정보를 효과적으로 표현할 수 있습니다.
앵커와 별칭(Anchors & Aliases)
중복 데이터를 참조할 수 있는 기능:
base_config: &base
environment: production
timeout: 30s
service1:
<<: *base
port: 8080
태그(Tag)
데이터 타입을 명시적으로 지정:
date: !!timestamp 2023-09-01T12:30:00Z
binary: !!binary |
SGVsbG8gd29ybGQh
주요 활용 사례
1. 구성 관리
- Kubernetes: 클러스터 설정 정의
- Docker Compose: 컨테이너 서비스 정의
- CI/CD 파이프라인: GitHub Actions, GitLab CI 등에서 워크플로우 설정
2. API 데이터 교환
RESTful API에서 JSON 대안으로 사용되며, 특히 OpenAPI(Swagger) 문서화에 널리 활용됩니다.
3. 설정 파일
- Spring Boot: application.yml
- Python: tox.ini, .travis.yml
- Rust: Cargo.toml (TOML과 비교되는 사례)
다른 포맷과의 비교
특성 | YAML | JSON | XML |
---|---|---|---|
가독성 | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
데이터 타입 | 내장형 풍부 | 기본 타입만 | 사용자 정의 필요 |
복잡성 | 중간 | 낮음 | 높음 |
주요 용도 | 구성 파일 | API 통신 | 문서 교환 |
도구 및 라이브러리
파서
- Python: PyYAML, ruamel.yaml
- JavaScript: js-yaml
- Java: SnakeYAML, Jackson YAML
- Go: gopkg.in/yaml.v2
검증 도구
스키마 검증
- JSON Schema 기반: YAML Schema
- OpenAPI: Swagger UI를 통한 검증
베스트 프랙티스
- 공백 2칸 권장: 들여쓰기 일관성 유지
- 주석 활용: 복잡한 설정에 설명 추가
- 스키마 검증: 복잡한 문서에서는 반드시 스키마 정의
- 보안 주의: 파싱 시 잠재적 취약점 방지 (Python의
yaml.unsafe_load
금지) - 버전 명시:
---
문서 시작 마커 사용,# yaml-language-server
주석 추가
참고 자료
참고: YAML은 공백에 매우 민감하므로 편집 시 자동 들여쓰기 기능을 활성화하는 것이 좋습니다. 대부분의 IDE(예: VS Code, IntelliJ)는 YAML 전용 플러그인을 제공합니다.
이 문서는 AI 모델(qwen-3-235b-a22b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.