YAML 이 스칼라 자동 타이핑; override 가능
bare 값 port: 8000 은 정수로 읽힘. port: "8000" 은 string 으로 읽힘. 파서가 bare 형태로 타입 추측. 이 편의가 YAML 의 가장 유명한 footgun 이기도.
다섯 스칼라 스타일
- Bare (plain) —
name: Pippa. 파서가 타입 추측. - 작은따옴표 —
name: 'Pippa'. 항상 string. 백슬래시 literal. - 큰따옴표 —
name: "Pippa". 항상 string. JSON 스타일 escape (\n,\t,\u00e9) 지원. - Literal block (
|) — 멀티라인, 줄바꿈 보존. - Folded block (
>) — 멀티라인, 줄을 스페이스로 합침.
Boolean, Norway 문제
YAML 1.1 (많은 파서 기본, 1.22 이전 Kubernetes 포함) 이 22 unquoted string 을 boolean 으로 다룸: y, Y, yes, Yes, YES, n, N, no, No, NO, true, True, TRUE, false, False, FALSE, on, On, ON, off, Off, OFF. 그래서 country: NO 가 country: False 로 읽힘. 수정: 키워드 같은 string 값 항상 quote. country: "NO" 가 string.
Null
네 가지 bare 형태 다 null 로 파싱: null, Null, NULL, ~. 빈 값 (콜론 뒤에 아무것도 없는 키) 도 null. literal string 'null' 원하면 quote: 'null'.
Norway 문제 (실제 사례): config 파일이 두 자 ISO 코드로 국가 나열.
countries: [GB, IE, NO, DE]. YAML 1.1 파서가 NO 를 False 로 변환. Norway 가 리스트에서 사라짐, 예약 시스템이 노르웨이 주소로 메일 조용히 안 보냄, 버그 찾는 데 몇 주. 키워드로 잘못 읽힐 수 있는 것 다 quote.