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은 주석을 지원하지 않습니다. 제거하세요.