JSON인가 YAML인가
핵심 요약: JSON은 중괄호로, YAML은 들여쓰기로 구분합니다. 기계에는 JSON, 사람이 설정을 편집할 때는 YAML입니다. 주석, 앵커, 다중 문서 구조는 변환에서 살아남지 않습니다.

핵심부터 말하면, 기계 간 데이터에는 JSON, 사람이 편집하는 설정에는 YAML을 쓰세요. 주석, 여러 줄 텍스트, 앵커가 필요하면 YAML을, 모든 언어가 같은 페이로드를 모호함 없이 파싱해야 하면 JSON을 선호하세요.
나란히
{
"server": {
"host": "127.0.0.1",
"port": 8080
}
}
server:
host: 127.0.0.1
port: 8080
같은 구조입니다. YAML은 구두점을 없애고 주석을 둘 자리를 얻습니다.
다른 점
| JSON | YAML | |
|---|---|---|
| 구조 | 중괄호와 쉼표 | 들여쓰기 |
| 주석 | 없음 | 있음 |
| 문자열 | 큰따옴표, 이스케이프 필요 | 대개 맨 문자열 |
| 여러 줄 텍스트 | \n 이스케이프 또는 배열 |
` |
| 재사용 | 없음 | 앵커 &와 별칭 * |
| 여러 문서 | 배열로 감싸기 | --- 구분자 |
| 파싱 속도 | 빠름 | 느림, 들여쓰기 규칙 |
| 모호함 | 매우 낮음 | no가 불리언으로 파싱, 들여쓰기 한 칸 오차 |
마지막 행이 YAML의 진짜 비용입니다. YAML 1.1에서 country: NO는 불리언 false가 되고 version: 1.0은 부동소수점이 될 수 있습니다. JSON에는 암묵적 타입이 전혀 없습니다.
선택
JSON: 요청과 응답 본문, 서비스 간 메시지, 데이터베이스의 JSON 열, 모든 언어에서 동일하게 파싱되어야 하는 모든 것.
YAML: 기본값인 생태계(Kubernetes, Ansible, GitHub Actions, Docker Compose), 설명이 필요한 설정, 인증서나 스크립트, SQL처럼 긴 텍스트가 지배하는 파일.
변환이 잃는 것
YAML → JSON: 모든 주석, 앵커 재사용(중복으로 확장), 첫 문서를 제외한 나머지 문서, 날짜와 불리언의 원래 표기.
JSON → YAML: 문자열/숫자 구분이 약해져 "8080"과 8080 모두 안전하게 유지하려면 명시적 인용이 필요합니다.
이전과 일회성 검사를 위해 변환하세요. 같은 파일을 두 형식의 병렬 뷰로 유지하지 마세요.
FAQ
JSON과 YAML 중 어떻게 결정하나?
파일을 누가 읽고 관리하는지에서 시작하세요. 프로그램이 생성하고 언어 경계를 넘으며 예측 가능하게 파싱되어야 하면 JSON, 사람이 편집하고 필드 설명이나 긴 여러 줄 텍스트가 필요하면 YAML을 쓰세요. 서로 변환되지만 같은 설정을 두 형식으로 장기 유지하지 마세요.
YAML이 왜 더 많은 타입 모호함을 만드나?
YAML에는 암묵적 타입이 있어 NO, on, 1.0 같은 값이 불리언, 날짜, 숫자가 될 수 있습니다. JSON은 명시적 타입만 있어 문자열에 따옴표를 붙여야 하고, 그래서 언어 간 파싱이 더 예측 가능합니다.
YAML을 JSON으로 변환할 때 주석과 앵커가 살아남아야 하나?
아니요. YAML 주석, 앵커, 여러 문서는 JSON에서 표현되지 않고 앵커는 중복 내용으로 확장됩니다. 보존해야 하면 객체 왕복 대신 Document API가 있는 YAML 라이브러리를 쓰세요.