JSON ↔ YAML 변환 완전 가이드

JSON과 YAML은 개발자가 가장 많이 쓰는 데이터 직렬화 형식입니다. JSON은 자바스크립트 생태계의 표준이고, YAML은 가독성이 높아 설정 파일(Docker Compose, Kubernetes, GitHub Actions 등)에 널리 쓰입니다. 두 형식을 자유롭게 오가는 방법과 주의사항을 정리합니다.

1. JSON vs YAML: 핵심 차이점

구문(Syntax)

JSON은 중괄호와 대괄호로 구조를 표현하며, 모든 키와 문자열 값에 큰따옴표가 필수입니다. 반면 YAML은 들여쓰기(indentation)로 계층을 표현하고, 따옴표 없이도 대부분의 값을 쓸 수 있습니다.

주석(Comments)

JSON은 주석을 공식 지원하지 않습니다. YAML은 # 이후 텍스트가 주석으로 처리됩니다. 이 도구는 YAML→JSON 변환 시 주석을 JSON에 포함하지 않고, 별도 패널에 추출하여 표시합니다.

데이터 타입

숫자, 불리언, null은 두 형식 모두 기본 타입으로 지원합니다. YAML에서 yes/no/on/off는 불리언으로 해석될 수 있어 주의가 필요합니다. 날짜 형식은 YAML에서 자동 변환될 수 있으므로 문자열로 처리하려면 따옴표로 감싸세요.

2. JSON → YAML 변환 상세

키 순서 유지

이 도구는 sortKeys: false 옵션을 사용하여 JSON 원본의 키 순서를 그대로 YAML에 보존합니다. 많은 온라인 변환기가 키를 알파벳 순으로 정렬하는데, 설정 파일에서 순서가 의미를 가질 경우 이는 문제가 됩니다.

들여쓰기 옵션

YAML 들여쓰기는 2칸(기본) 또는 4칸을 선택할 수 있습니다. 프로젝트 EditorConfig 설정에 맞춰 선택하세요. 대부분의 Kubernetes·Docker 설정은 2칸을 사용합니다.

문자열 인용 스타일

  • 자동: js-yaml이 값에 따라 적절한 형식을 선택합니다.
  • 단따옴표: 모든 문자열에 단따옴표를 적용합니다.
  • 쌍따옴표: 모든 문자열에 쌍따옴표를 적용합니다.

3. YAML → JSON 변환 상세

주석 추출 및 보존

YAML 주석(# 이후 텍스트)은 JSON으로 변환하면 사라집니다. 이 도구는 변환 전 주석을 미리 추출하여 결과 패널 아래에 목록으로 표시합니다. 나중에 YAML 파일로 돌아갈 때 참고할 수 있습니다.

앵커·별칭(Anchors and Aliases)

YAML의 앵커(&anchor)와 별칭(*alias)은 반복 데이터를 참조하는 기능입니다. 이 도구는 js-yaml의 기본 동작에 따라 별칭을 역참조하여 인라인으로 풀어서 JSON에 삽입합니다.

4. 한글 처리

이 도구는 UTF-8 인코딩을 사용하므로 한글 키·값 모두 정상 변환됩니다. JSON 파일의 한글 값은 JSON.stringify 기본 동작으로 이스케이프되지 않고 그대로 유지됩니다. YAML 한글 키는 따옴표 없이도 대부분 정상 처리됩니다.

5. 특수문자 주의사항

  • 콜론 + 공백: YAML에서 키-값 구분자로 사용됩니다. 값에 포함될 경우 따옴표로 감싸야 합니다.
  • 샵(#): YAML에서 주석 시작으로 해석됩니다. 값에 포함될 경우 따옴표 필수입니다.
  • 앰퍼샌드, 아스테리스크, 느낌표, 파이프, 꺾쇠: YAML 특수 의미를 가질 수 있어 안전을 위해 따옴표를 권장합니다.
  • JSON에서 백슬래시 이스케이프는 YAML 변환 시 그대로 보존됩니다.

6. 실무 활용 사례

GitHub Actions 설정 변환

GitHub Actions 워크플로우 파일은 YAML 형식입니다. API 응답으로 받은 JSON 구성을 YAML 형식으로 변환할 때 이 도구를 사용하면 키 순서를 유지하면서 가독성 높은 YAML을 얻을 수 있습니다.

Kubernetes 매니페스트 디버깅

kubectl 명령으로 얻은 JSON 리소스 정의를 YAML로 변환하거나, YAML 매니페스트를 JSON으로 변환하여 jq로 필드를 추출할 때 활용할 수 있습니다.

package.json과 YAML 상호 변환

일부 도구는 패키지 설정을 YAML로도 받습니다. npm/yarn의 package.json을 YAML로 변환하거나 반대 방향으로 변환할 때 키 순서 보존이 중요합니다.

7. 오류 해결 가이드

YAML 파싱 오류

  • 들여쓰기가 탭과 스페이스가 혼용된 경우: 모두 스페이스로 통일하세요.
  • 콜론 뒤에 공백 없이 값이 오는 경우: key: value 형식을 지켜야 합니다.
  • 특수문자가 따옴표로 감싸지지 않은 경우: 값을 따옴표로 감싸세요.

JSON 파싱 오류

  • 끝에 쉼표가 남아있는 경우: 마지막 요소 뒤의 쉼표를 제거하세요.
  • 작은따옴표를 사용한 경우: JSON은 큰따옴표만 허용합니다.
  • 주석이 포함된 경우: JSON은 주석을 지원하지 않습니다. 제거하세요.

도구로 바로 이동하거나 FAQ를 확인하세요.