YAML 설정 (.yaml)
YAML 표준YAML Ain’t Markup Language(YAML)는 현대 DevOps, 클라우드 인프라(Kubernetes, Docker Compose) 및 CI/CD 자동화에서 대표적으로 사용하는 데이터 직렬화 형식입니다. 공백 들여쓰기를 활용해 사람이 읽기 쉽게 만들었습니다.
YAML을(를) JSON(으)로 변환
무료 브라우저 내 YAML에서 JSON로 변환하는 도구입니다. 기기에서 파일을 즉시 변환할 수 있습니다.
검사 및 메타데이터
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 YAML 파일을 식별합니다:
바이트 단위 헤더 시그니처 (매직 바이트)
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 YAML 파일을 식별합니다:
16진수 시그니처 (오프셋 0):
2D 2D 2D 0AASCII 표현: ---\n
표준화: YAML 1.2.2 Specification
기술 사양
| 컨테이너 아키텍처 | 들여쓰기 기반의 가독성 높은 데이터 직렬화 형식으로 JSON의 상위 집합이며 앵커와 별칭을 지원 |
| 압축 | 압축하지 않은 텍스트 스트림 |
| 바이트 엔디안 | UTF-8/유니코드 텍스트 스트림 |
| 색 공간 | 해당 없음(데이터 직렬화) |
| 채널 및 구조 | 매핑(키-값 사전), 시퀀스(목록), 스칼라 유형(문자열, 숫자, 부울 값) 및 앵커(&ref/*ref) |
| 최대 크기 | 문서 크기 제한 없음(---로 구분한 여러 문서의 스트림 지원) |
| 투명도 | 없음 |
| 스트리밍 및 프로그레시브 | 여러 문서를 문서별로 순차 처리하는 스트림 지원 |
기술 비교 매트릭스: YAML 대 경쟁사
| 기술적 속성 | YAML (현재) | JSON | TOML | XML |
|---|---|---|---|---|
| 구문 스타일 | 들여쓰기 공백 계층 구조 | 엄격한 대괄호와 따옴표 | 테이블과 key=value 쌍 | 장황한 여닫기 태그 |
| 주석 지원 | 네이티브 (# 주석) | 주석 허용 안 함 | 네이티브 (# 주석) | <!-- 주석 --> |
| DevOps 채택 | 소프트웨어에 따라 지원 여부가 다릅니다. | 소프트웨어에 따라 지원 여부가 다릅니다. | Rust/Python 패키지 구성 | 엔터프라이즈 레거시 설정 |
| 데이터 재사용 | 네이티브 앵커(&) 및 별칭(*) | 없음 (수동 중복) | 없음 (수동 중복) | XML 엔티티 |
일반적인 손상 모드 및 헥스 복구 가이드
구문 분석기 오류: 'mapping values are not allowed here' 또는 들여쓰기 오류.
근본 원인: 탭과 공백을 혼용했거나 들여쓰기 수준이 잘못 정렬되었습니다.
복구: 탭을 공백으로 바꾸고 File2File.app YAML Formatter로 구문을 검증하십시오.
보안 분석 및 파서 공격 벡터
PyYAML의 yaml.load()처럼 사용자 정의 형식 태그를 지원하는 YAML 파서는 과거 임의 객체 인스턴스화를 통한 원격 코드 실행을 허용한 적이 있습니다.
알려진 공격 벡터
- 안전하지 않은 객체 역직렬화 태그(예: !!python/object/apply)를 통한 임의 코드 실행
- YAML 앵커와 별칭을 이용한 엔티티 확장 폭탄(“Billion Laughs” 공격과 유사)
- 암시적 부울 및 타임스탬프 파싱으로 인한 형식 혼동 취약점
방어적 모범 사례: 항상 안전한 YAML 파서(Python의 경우 'yaml.safe_load()')를 사용하고 앵커 확장 깊이 제한을 강제 적용하십시오.
역사적 배경 및 주요 이력
주요 장점
- YAML은 인프라 도구에서 널리 쓰이지만 지원 범위와 동작은 구현에 따라 다릅니다.
- 깔끔하고 읽기 쉬운 구문으로 직관적인 들여쓰기를 사용해 중괄호, 대괄호, 따옴표를 줄입니다.
- 앵커와 별칭(&anchor/*anchor)을 지원해 설정 블록을 중복 없이 재사용할 수 있습니다.
기술적 제한 사항 및 단점
- 공백에 민감합니다. 탭을 잘못 넣거나 공백 하나가 추가되면 문서 계층 구조가 손상되거나 파싱 오류가 발생할 수 있습니다.
- 악명 높은 형식 강제 오류: 따옴표 없이 쓴 no, on, yes 또는 국가 코드 NO(노르웨이)가 부울 값으로 조용히 변환될 수 있습니다.
- 바이너리 형식이나 엄격한 JSON보다 파싱 속도가 현저히 느립니다.
흥미로운 기술적 상식
- YAML은 처음에 “Yet Another Markup Language”의 약자였으나, 데이터 직렬화를 강조하기 위해 순환 약어인 “YAML Ain’t Markup Language”로 유머러스하게 바뀌었습니다.
- '노르웨이 문제'는 YAML 파일의 국가 코드 'NO'가 부울 값 'false'로 구문 분석되던 유명한 프로그래밍 버그입니다.
- 세상의 모든 유효한 JSON 파일은 동시에 100% 유효한 YAML 파일이기도 합니다.
자주 묻는 기술 질문
YAML은 어디에 사용됩니까?
YAML은 클라우드 컴퓨팅, Kubernetes 클러스터 배포, Docker Compose 파일, GitHub Actions 워크플로 및 소프트웨어 설정의 기본 구성 언어입니다.
YAML 파일에서 탭을 사용할 수 있습니까?
아니요. 공식 YAML 사양에서는 들여쓰기에 탭 문자 사용을 엄격히 금지합니다. 항상 공백을 사용해야 합니다(레벨당 일반적으로 공백 2개).
YAML을 JSON으로 어떻게 변환할 수 있습니까?
웹 브라우저에서 File2File.app을 사용해 YAML 파일을 한 번의 클릭으로 깔끔하고 검증된 JSON으로 변환할 수 있으며, 파일은 비공개로 유지됩니다.