YAML 검사기·린터 — 오류와 숨은 함정 찾기

오류마다 정확한 줄과 열을 알려 주는 YAML 검사로, 파서가 조용히 받아들이는 실수(yes/no 불리언, 탭, 중복 키)까지 잡아내세요.

16줄
15번째 줄 5번째 열의 잘못된 YAML: duplicated mapping key: 한 매핑 안에 같은 키가 두 번 나옵니다.
13 image: postgres:16
14 restart: always
15 restart: unless-stopped
^
린트(5)
services:
  web:
    image: nginx:1.27
    ports:
      - '8080:80'
      - '22:22'
    environment:
      COUNTRY: 'NO'
      DEBUG: 'yes'
      APP_VERSION: 1.1
  db:
    image: postgres:16
    restart: unless-stopped

중복 키: 많은 파서가 조용히 그렇게 하듯, 마지막 값이 적용된 상태로 표시합니다. 정리된 보기는 파싱된 데이터로 다시 만들어지므로 주석과 앵커는 유지되지 않습니다. 문제는 원본 파일에서 고치세요.

모든 처리는 브라우저 안에서 이루어집니다. YAML은 업로드되지 않으므로 설정 파일 속 비밀 값도 기기에 그대로 남습니다. 모든 무료 도구 보기.

문제를 발견하셨거나 개선할 점이 있나요? 모든 메시지를 읽고 빠르게 고칩니다.

이 무료 YAML 검사기는 YAML 파일의 구문 오류를 확인하고, 주변 줄과 문제 위치 아래의 캐럿 표시와 함께 정확한 줄과 열을 보여 줍니다. Kubernetes 매니페스트, docker-compose.yml, GitHub Actions 워크플로, OpenAPI 사양을 붙여 넣으면 파싱되는지, 안 된다면 어디서 깨지는지 1초 만에 알 수 있습니다.

파서가 파일을 받아들인다고 해서 파일이 내가 생각한 의미라는 뜻은 아닙니다. 린터는 YAML 1.1 파서(PyYAML, SnakeYAML, Go yaml.v2)가 YAML 1.2와 다르게 읽는 값도 표시합니다. NO는 false가 되고, 0755는 493이, 22:22는 1342가, 1.10은 1.1이 됩니다. 모든 중복 키를 두 줄 번호와 함께, 들여쓰기의 탭, 공백 없이 쓴 "key:value"도 나열합니다. 구문과 이런 함정을 검사하며, Kubernetes API 같은 스키마에 대한 검증은 하지 않습니다.

사용 방법

  1. 편집기에 YAML을 붙여 넣으세요. 무엇이 표시되는지 보여 주려고 일부러 실수 몇 개를 넣은 docker-compose 예시가 미리 들어 있습니다.
  2. 상태 표시줄을 읽으세요. 초록색은 유효함을, 빨간색은 오류를 줄·열과 주변 줄과 함께 보여 줍니다.
  3. 린트 목록의 항목을 클릭하면 편집기의 해당 줄로 이동해 고칠 수 있습니다.
  4. 서식 적용 YAML과 JSON 보기를 오가며 파일이 실제로 어떻게 파싱되었는지 확인하세요. yes/no나 0755의 함정이 여기서 분명해집니다.
  5. 필요하면 서식 적용 결과를 복사하거나 다운로드하고, 주석이 유지되도록 원본 파일을 계속 고치세요.

자주 묻는 질문

YAML 노르웨이 문제란 무엇인가요?

YAML 1.1에서는 따옴표 없는 y, yes, n, no, on, off(흔한 대소문자 조합 모두)가 불리언입니다. 그래서 노르웨이를 뜻하는 NO가 들어간 국가 코드 목록은 문자열 "NO" 대신 false가 됩니다. YAML 1.2(2009)에서 이를 고쳐 true와 false만 불리언이 되었습니다. 하지만 PyYAML, Ruby의 Psych, Java의 SnakeYAML, Go의 yaml.v2 등 널리 쓰이는 많은 파서가 여전히 1.1을 따르므로, 안전한 해결책은 이런 값을 따옴표로 감싸는 것입니다: "NO", "yes", "on".

YAML에서 탭을 쓸 수 없는 이유는 무엇인가요?

YAML 사양은 탭의 너비가 정의되어 있지 않고 YAML은 들여쓰기로 구조를 표현하기 때문에 들여쓰기에 탭을 금지합니다. 탭은 값과 주석 안에서는 쓸 수 있고, 줄 앞 공백에서만 안 됩니다. 편집기에서 .yml과 .yaml 파일에 공백을 넣도록 설정하세요. 단계당 공백 두 칸이 가장 흔한 관례입니다.

YAML에서 중복 키가 허용되나요?

아니요. YAML 사양은 매핑의 키가 고유해야 한다고 정하지만, 파서마다 처리 방식이 다릅니다. 일부는 (이 검사기처럼) 오류를 내고, 다른 일부는 조용히 마지막 값을 씁니다. 그래서 중복은 위험합니다. 긴 매니페스트에서 첫 번째 항목을 고쳤는데 아무 효과가 없을 수 있습니다. 이 도구는 모든 중복을 키가 처음 정의된 줄과 함께 나열합니다.

YAML에서 "bad indentation of a mapping entry" 오류가 나는 이유는 무엇인가요?

해당 줄의 들여쓰기가 같은 수준의 다른 키와 다르거나, 값에 콜론과 공백이 들어 있어 따옴표가 필요한 경우입니다. 예를 들어 title: Note: read this는 파서가 두 번째 키로 보기 때문에 실패합니다. title: "Note: read this"로 쓰세요. 표시된 줄과 그 위 줄을 확인하세요. 오류가 이전 줄에서 시작하는 경우가 많습니다.

YAML은 JSON의 상위 집합인가요?

YAML 1.2는 유효한 JSON이 유효한 YAML이기도 하도록 설계되었으며, 실제로 여기서 모든 JSON 문서가 파싱됩니다. 반대는 성립하지 않습니다. YAML에는 주석, 앵커와 별칭, 여러 줄 문자열, 파일당 여러 문서가 추가됩니다. JSON 보기로 YAML 파일이 일반 JSON 데이터에 어떻게 대응하는지 확인하세요.

Kubernetes나 GitHub Actions 스키마도 검증하나요?

아니요. 실제 오류 대부분의 원인인 YAML 구문과 위의 함정은 검사하지만, Kubernetes Deployment나 GitHub 워크플로에서 어떤 키가 허용되는지는 알지 못합니다. 스키마 검증에는 kubectl apply --dry-run=server, kubeconform, 또는 해당 JSON Schema를 지정한 VS Code YAML 확장을 사용하세요.

YAML 1.1과 YAML 1.2: 의미가 바뀌는 값

이 검사기는 YAML 1.2 규칙(js-yaml)으로 파싱합니다. 파일을 YAML 1.1 파서가 읽는다면 따옴표 없는 다음 값들은 다른 의미가 되며, 린터가 각각 경고합니다.

• yes, no, on, off, y, n → 1.1에서는 불리언, 1.2에서는 문자열. GitHub Actions 워크플로는 on:으로 시작하는데, 1.1 파서는 이를 키 true로 읽습니다.

• 0755 → 1.1에서는 8진수 493, 1.2에서는 10진수 755. 파일 권한과 0으로 시작하는 우편번호 모두 영향을 받습니다.

• 22:22 → 1.1에서는 1342(60진수), 1.2에서는 문자열 "22:22". Docker Compose 문서가 포트 매핑을 따옴표로 감싸라고 권장하는 이유가 바로 이것입니다.

• 1.10 → 두 버전 모두 숫자 1.1. 버전 번호는 따옴표로 감싸세요.

• 2024-01-05 → 대부분의 파서에서 문자열이 아니라 타임스탬프.

모두를 피하는 규칙: 텍스트로 쓰려는 값이 다른 것처럼 보인다면 따옴표로 감싸세요.

흔한 YAML 오류와 해결 방법

• "bad indentation of a mapping entry": 들여쓰기가 일관되지 않거나, 따옴표 없는 값에 ": "가 들어 있음.

• "end of the stream or a document separator is expected": 대개 같은 수준의 줄보다 덜 들여 쓴 줄이 있거나, 닫는 따옴표 뒤에 텍스트가 있음.

• "can not read a block mapping entry; a multiline key may not be an implicit key": 바로 앞 줄에 콜론이 빠졌거나, 따옴표를 열고 닫지 않은 경우가 많음.

• "unexpected end of the stream within a double quoted scalar": 표시된 줄 위 어딘가에 닫히지 않은 "가 있음.

• @, `, *, &, !, |, >로 시작하는 값은 특별한 의미가 있거나 예약되어 있습니다. 따옴표로 감싸세요.

• 앞에 공백이 있는 #은 주석을 시작하므로 password: abc #123은 abc를 저장합니다. " #"이 들어간 값은 따옴표로 감싸세요.

관련 무료 도구

  • JSON 포매터 — JSON을 보기 좋게 정렬하고, 압축하고, 검증하세요. 파싱 오류는 줄과 열 위치까지 알려 줍니다. 브라우저에서 실행, 업로드 없음.
  • JSON → TypeScript — JSON 샘플을 붙여 넣으면 TypeScript 인터페이스, Zod 스키마, JSON Schema, 또는 Go, Python, Java, C#, Kotlin, Swift, Rust 타입을 만들어 줍니다.
  • SQL 포매터 — 지저분한 SQL을 PostgreSQL, MySQL, T-SQL, BigQuery 등에 맞춰 일관되게 들여쓴 읽기 쉬운 쿼리로 정리하세요. 브라우저에서 실행됩니다.
  • 정규식 테스터 — 실시간 매치 강조, 캡처 그룹, 치환 미리보기로 정규 표현식을 샘플 텍스트에 테스트하세요. 무료, 브라우저에서 실행.
  • 텍스트 비교 (Diff) — 텍스트, 코드, JSON 파일의 두 버전을 비교해 정확히 어떤 줄, 단어, 문자가 바뀌었는지 확인하세요.