YAML 포맷터

YAML을 일관된 들여쓰기 너비로 정리하거나 JSON으로 변환합니다. 탭 문자 혼입과 들여쓰기 불일치도 감지합니다.

YAML 포맷터란

YAML 포맷터는 들여쓰기가 제각각인 YAML을 공백 2칸 또는 4칸으로 통일해서 다시 정리하는 동시에 구문에 문제가 없는지 검증할 수 있는 도구입니다. 설정 파일은 복사・붙여넣기와 수작업 편집을 반복하다 보면 들여쓰기가 쉽게 흐트러지기 쉽고, CI/CD 파이프라인이나 구성 관리 도구가 오류를 내고 나서야 뒤늦게 문제를 알아차리는 경우가 많습니다. 이 도구는 브라우저 안에서 모든 처리가 끝나므로, 민감한 설정 파일의 내용을 외부 서버로 전송하지 않고도 확인할 수 있습니다.

이 도구는 자체 개발한 경량 파서로 동작하며, Docker Compose・GitHub Actions・Kubernetes 매니페스트 등에서 자주 쓰이는 "일반적인 부분집합"(매핑・목록・인라인 플로우・기본 스칼라 타입)을 대상으로 합니다. 앵커(&)・별칭(*)・다중 문서・블록 스칼라(|・>) 같은 고급 기능은 지원하지 않으므로, 이런 기능이 포함된 본격적인 YAML을 다뤄야 한다면 전용 파서를 함께 사용해 주세요.

YAML 포맷터 사용법

  1. YAML 입력하기 왼쪽 입력란에 정리하고 싶은 YAML을 붙여넣습니다. 손에 있는 예시가 없다면 "샘플" 버튼을 눌러 테스트용 YAML을 삽입할 수 있습니다.
  2. 모드 선택하기 구문 검사와 들여쓰기 통일을 원하면 "정리・검증"을, YAML 내용을 JSON 형식으로 변환하고 싶다면 "JSON으로 변환"을 선택합니다.
  3. 들여쓰기 폭 선택하기 "정리・검증" 모드에서만 출력 들여쓰기를 공백 2칸 또는 4칸 중에서 선택할 수 있습니다. 기존 프로젝트의 규칙에 맞춰 주세요.
  4. 출력 결과 확인하기 유효한 YAML이라면 오른쪽에 정리된 결과(또는 JSON)가 표시됩니다. 유효하지 않다면 오류 내용과 줄 번호가 표시되므로 해당 줄을 수정해 주세요.
  5. 결과 복사하기 "복사" 버튼으로 출력 결과를 클립보드에 복사해서 설정 파일에 그대로 붙여넣을 수 있습니다.

더 잘 활용하기 위한 팁

  • 이 도구는 자체 개발한 경량 파서를 사용하며, 키: 값 쌍, 중첩, 목록, 그리고 인라인 [a, b, c] / {a: 1} 형식을 지원합니다.
  • 들여쓰기가 3칸이나 5칸처럼 일정하지 않은 YAML을 붙여넣어도, 해석에 성공하면 공백 2칸 또는 4칸으로 통일해서 다시 출력할 수 있습니다.
  • "JSON으로 변환" 모드에서는 YAML 내용을 그대로 JSON으로 변환한 미리보기를 확인할 수 있습니다. CI 설정이나 API 응답과 비교할 때 유용합니다.
  • 오류가 발생하면 줄 번호가 표시되므로, 해당 줄의 들여쓰기나 콜론 뒤 공백 누락 여부를 확인해 보세요.
  • YAML에서는 탭 문자로 들여쓰기하는 것이 금지되어 있습니다. 편집기 설정에서 "탭을 공백으로 변환"을 활성화해 두면 이 문제를 미리 방지할 수 있습니다.

이런 상황에서 활용해 보세요

CI 설정 파일 사전 점검

GitHub Actions나 GitLab CI의 .yml 파일을 커밋하기 전에 이 도구로 들여쓰기 흐트러짐이나 탭 혼입이 없는지 확인하면, 파이프라인이 구문 오류로 멈추는 일을 미리 막을 수 있습니다.

Kubernetes 매니페스트 정리

여러 사람이 함께 편집한 Deployment나 Service 매니페스트는 들여쓰기 폭이 제각각이 되기 쉽습니다. 팀 규칙(예: 공백 2칸)으로 통일한 뒤 리뷰에 올릴 수 있습니다.

Docker Compose 파일 검증

docker-compose.yml의 들여쓰기 실수는 컨테이너가 실행될 때까지 눈치채기 어려운 경우가 많으므로, 미리 이 도구로 구문과 들여쓰기 일관성을 확인해 두면 안심할 수 있습니다.

YAML과 JSON 비교하기

API 응답이나 설정 값을 YAML과 JSON 두 형식 모두로 다뤄야 할 때, "JSON으로 변환" 모드로 변환 결과를 확인하고 다른 JSON 기반 도구나 스키마 검증과 함께 사용할 수 있습니다.

용어집

YAML
"YAML Ain't Markup Language"의 재귀적 약어로, 들여쓰기로 계층 구조를 표현하는 데이터 직렬화 형식입니다. 설정 파일로 널리 사용됩니다.
들여쓰기
줄 앞머리에 두는 공백 문자로, YAML에서는 부모・자식 관계(계층 구조)를 나타냅니다. YAML 사양상 들여쓰기에 탭 문자를 사용할 수 없습니다.
매핑
"키: 값" 형식으로 데이터를 표현하는 구조로, 다른 언어의 연관 배열이나 객체에 해당합니다.
목록(시퀀스)
여러 값을 순서대로 나열하는 구조로, 각 항목은 "- "(하이픈과 공백)로 시작합니다.
플로우 스타일
매핑이나 목록을 {a: 1}이나 [a, b, c]처럼 한 줄에 인라인으로 적는 방식입니다. 들여쓰기에 의존하지 않고 간결하게 표현할 수 있습니다.
앵커와 별칭
&name으로 정의한 내용을 *name으로 재사용하는 구조로, 같은 값을 중복해서 적지 않아도 됩니다. 이 도구에서는 지원하지 않습니다.
블록 스칼라
|(줄바꿈 유지)나 >(줄바꿈을 공백으로 접음)로 여러 줄의 문자열을 적는 방식입니다. 이 도구에서는 지원하지 않습니다.
Norway Problem
따옴표 없이 쓴 no・yes 등이 문자열이 아니라 불리언 값으로 해석되어버리는, YAML에서 널리 알려진 함정입니다.

자주 묻는 질문

사람이 직접 편집・검토하는 설정 파일(CI 설정・Kubernetes 매니페스트 등)에는 주석을 쓸 수 있고 가독성이 높은 YAML이 적합합니다. 반면 프로그램 간에 주고받는 API 응답 등에는 모호함이 적고 빠르게 파싱할 수 있는 JSON이 적합합니다.

YAML 사양상 들여쓰기에 탭 문자를 사용하는 것은 금지되어 있습니다. 대부분의 파서는 이를 구문 오류로 처리하고 작업을 중단합니다. 편집기 설정에서 탭 입력을 자동으로 공백으로 변환하도록 해두면 안전합니다.

지원하지 않습니다. 이 도구는 Docker Compose・GitHub Actions 등에서 흔히 사용되는 "일반적인 부분집합"(매핑・목록・인라인 플로우・기본 스칼라 타입)을 대상으로 하며, 앵커・별칭・다중 문서・블록 스칼라(|・>) 같은 고급 기능은 지원하지 않습니다.

따옴표 없이 no・yes・on・off를 쓰면, 많은 YAML 구현체가 이를 노르웨이의 국가 코드 같은 문자열이 아니라 불리언 값으로 해석해버리는 유명한 함정입니다. 문자열로 취급하고 싶다면 "no"처럼 따옴표로 감싸야 합니다.
툴군

여담이지만 ― YAML이 설정 파일의 주류가 된 이유

YAML(YAML Ain't Markup Language)은 2001년에 등장한 데이터 직렬화 형식입니다. 닫는 태그가 필요 없고 XML보다 훨씬 단순해 보인다는 이유로, 2010년대 이후 Docker Compose・GitHub Actions・Kubernetes 매니페스트 등 인프라 관련 설정 파일 형식으로 널리 채택되었습니다.

한편 YAML의 "들여쓰기로 구조를 표현한다"는 설계는 사람이 읽기에는 편리하지만, 복사・붙여넣기 시 들여쓰기가 쉽게 흐트러진다는 약점도 지니고 있습니다. 특히 탭과 공백이 혼용되면 많은 파서가 오류를 내지 않은 채 잘못된 구조로 해석해버리는 경우가 있어, 의도치 않은 설정 실수의 원인이 되기 쉽다는 점을 주의해야 합니다.

또한 "노르웨이 문제(Norway Problem)"라는 유명한 함정도 있습니다. 국가 코드 no를 따옴표 없이 쓰면, 많은 YAML 구현체가 이를 불리언 값 false로 해석해버리는 문제입니다. YAML 1.1과 1.2에서 불리언으로 취급되는 문자열의 범위가 다르다는 점도 구현체 간 호환성 문제의 원인 중 하나입니다.