YAML 포매터가 하는 일
YAML은 Docker Compose 파일, 쿠버네티스 매니페스트, GitHub Actions 워크플로, Ansible 플레이북, 수많은 앱 설정 파일에 쓰이는 형식입니다. 구조가 들여쓰기로 정해지기 때문에 공백 하나만 잘못 들어가도 파일의 의미가 바뀌거나 배포가 멈출 수 있습니다. 이 YAML 포매터는 YAML을 일관된 들여쓰기와 띄어쓰기로 다시 쓰고, 엄격한 파서로 문법을 검사합니다. 그래서 문제가 파이프라인이 아니라 여기서 먼저 드러납니다.
작업은 두 가지입니다.
- 포맷: 들여쓰기, 콜론과 목록 기호(-) 뒤의 공백,
[ ]와{ }안의 띄어쓰기를 표준에 맞게 정리합니다. - 검사: 파일을 파싱해 첫 번째 오류를 알려 주거나, 올바르면 짧은 요약을 보여 줍니다.
사용 방법
- 왼쪽 상자에 YAML을 붙여넣습니다. 붙여넣는 즉시 정렬됩니다.
.yaml,.yml파일은 파일 열기로, 예제는 예시로 불러올 수 있습니다. - 들여쓰기를 공백 2칸 또는 4칸으로 고르고 줄 너비를 정합니다.
- 프로젝트에서
"text"보다'text'를 선호한다면 작은따옴표를 켭니다. - 포맷 또는 검사를 누릅니다. Ctrl+Enter는 마지막 작업을 다시 실행합니다.
- 복사를 누르거나, 다운로드를 눌러
.yaml파일로 저장합니다.
정렬 전과 후
띄어쓰기가 들쭉날쭉하고 공백 4칸으로 들여쓴 Docker Compose 파일입니다.
version: "3.8"
services:
web:
image: "nginx:latest"
ports:
- "80:80"
environment:
- DEBUG=false
db:
image: postgres:16
공백 2칸으로 포맷한 결과입니다.
version: "3.8"
services:
web:
image: "nginx:latest"
ports:
- "80:80"
environment:
- DEBUG=false
db:
image: postgres:16
플로 컬렉션(flow collection)도 띄어쓰기가 고르게 맞춰집니다. tags: [ api, v2 ]와 limits: {cpu: 1, memory: 512}는 다음과 같이 바뀝니다.
tags: [api, v2]
limits: { cpu: 1, memory: 512 }
주석은 그대로 살아남습니다. 줄 끝 주석 앞의 불필요한 공백은 정리되지만 주석은 그 줄에 그대로 있습니다.
# Database settings
db:
host: localhost # local only
port: 5432
작은따옴표를 켜면 name: "web"이 name: 'web'으로 바뀝니다. "it's here"처럼 아포스트로피가 들어 있는 문자열은 이스케이프가 필요 없도록 큰따옴표를 유지합니다.
검사기가 잡아내는 오류
YAML 파서는 도구마다 엄격한 정도가 다릅니다. 이 검사기는 일부 도구가 그냥 넘기는 문제도 찾아냅니다. 다음은 도구가 실제로 보여 주는 메시지입니다. 위치는 한국어로, 오류 내용은 YAML 라이브러리가 내는 영어 그대로 표시됩니다.
| 문제 | 메시지 |
|---|---|
| 같은 키가 두 번 나옴 | 3행 1열: Map keys must be unique |
| 들여쓰기에 탭 사용 | 2행 1열: Tabs are not allowed as indentation |
| 공백 한 칸만큼 더 들여쓴 줄 | 2행 9열: Nested mappings are not allowed in compact mappings |
가장 중요한 것은 중복 키 검사입니다. name: web, port: 80, name: api가 들어 있는 파일에서 많은 로더는 경고 없이 마지막 name만 남깁니다. 입력에서 보기를 누르면 해당 줄로 이동합니다.
---로 구분된 두 문서가 들어 있는 올바른 파일에 검사를 실행하면 올바른 YAML입니다. 문서는 2개입니다.라고 알려 줍니다.
팁과 한계
- 포매터는 키 순서를 바꾸거나 값을 고치지 않습니다.
yes,on,010도 쓴 그대로 남습니다. - 긴 문자열은 다시 줄바꿈하지 않습니다. 접힌 블록(
>)과 리터럴 블록(|)의 내용도 유지됩니다. - 앵커와 별칭(
&name,*name)은 작성한 그대로 둡니다. - YAML에는 널리 쓰이는 압축 형식이 없으므로 압축(Minify) 버튼이 없습니다. 압축된 데이터가 필요하다면 JSON YAML 변환기에서 YAML을 JSON으로 바꾸세요.
YAML을 정렬하는 다른 방법
VS Code. Red Hat YAML 확장은 쿠버네티스 매니페스트 같은 파일에 포맷 기능과 스키마 검사를 추가합니다. 설치한 뒤 Format Document(문서 서식)를 실행하세요.
yq. Go로 만든 yq(Mike Farah 제작)는 YAML을 읽고 다시 씁니다. yq '.' file.yaml은 파일을 yq만의 일관된 스타일로 다시 출력하며, 같은 도구로 값을 조회하고 수정할 수도 있습니다.
Prettier. 프로젝트에서 이미 Prettier를 쓰고 있다면 .yaml과 .yml 파일을 이 페이지와 같은 규칙으로 정렬해 줍니다.
yamllint. 파일을 다시 쓰지 않고 스타일과 문법만 검사하는 Python 도구로, CI에서 유용합니다.
관련 도구
JSON을 YAML로, 또는 그 반대로 바꾸려면 JSON YAML 변환기를 쓰세요. JSON 파일에는 JSON 포매터를, Maven이나 안드로이드 파일 같은 XML 설정에는 XML 포매터를 쓰세요.