프롬프트
file: 활용-9-2-YAML과 호환되는 JSON.md
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.YAML과 JSON이 어떻게 호환되는지 알려줘.
AI가 만든 결과
YAML은 원래 “YAML Ain’t Markup Language”라는 이름으로 시작했지만, 1.2 버전부터 JSON의 상위 호환(superset)을 표방하고 있습니다. 즉, 유효한 JSON 문서는 모두 유효한 YAML 문서가 되도록 설계되었습니다. 이러한 호환성 때문에 YAML 파서는 JSON으로 작성된 데이터를 큰 변경 없이 바로 파싱할 수 있습니다.
다만, “YAML ↔ JSON 상호 간 호환성”을 논할 때 주의할 점들이 있습니다.
1. YAML 1.2와 JSON의 관계
YAML 1.2 표준에서 JSON 호환성
- YAML 1.2 스펙 문서에 따르면 YAML 1.2는 JSON의 공식적인 상위 호환으로 정의됩니다.
- 즉, JSON 형태(중괄호
{}
, 대괄호[]
, 쌍따옴표"
로 감싼 키와 문자열, 콤마,
, 콜론:
등)로 작성된 문서는 그대로 YAML 1.2 파서에서도 인식됩니다.
왜 ‘상위 호환(superset)’인가?
- YAML은 JSON에서 지원하는 구문뿐만 아니라, 들여쓰기 기반 문법, 앵커 & 별칭, 블록 스칼라 등 추가적인 기능을 포함하고 있습니다.
- 따라서 JSON 문서를 YAML 문법으로 해석할 수 있지만, 반대로 YAML에 존재하는 확장 기능(앵커, 주석, 블록 문자열 등)이 들어간 문서를 JSON 파서가 그대로 해석하기는 어렵습니다.
2. 호환성의 예시
예시 1) JSON 그대로 YAML로 활용하기
아래 JSON 예시:
{ "name": "Alice", "age": 30, "hobbies": ["reading", "music", "hiking"] }
위 문서는 YAML 1.2 문법상 문제없이 유효하므로, YAML 파일(.yml
) 안에 그대로 복사해 넣어도 YAML 파서가 정상적으로 처리할 수 있습니다.
예시 2) YAML 스타일을 JSON으로 변환하기
아래와 같은 YAML 문서:
person: name: "Alice" age: 30 hobbies: - reading - music - hiking
이는 JSON에서 지원하지 않는 들여쓰기 문법과 맵 표현을 사용하고 있기 때문에, 그대로 JSON 파서에 넣으면 에러가 납니다. JSON 형식에 맞게 바꾸려면 중괄호 {}
, 대괄호 []
, 쌍따옴표 "
등을 정확히 맞춰야 합니다.
{ "person": { "name": "Alice", "age": 30, "hobbies": [ "reading", "music", "hiking" ] } }
이처럼 YAML로 작성된 문서를 JSON으로 변환하려면, YAML 파싱 후 JSON 형태로 재직렬화(serialize) 과정을 거쳐야 합니다.
3. 주의할 점
주석(Comment)
- JSON은 주석을 지원하지 않지만, YAML은
#
을 사용하여 주석을 달 수 있습니다. JSON으로 변환 시에는 주석이 모두 사라지게 됩니다.
- JSON은 주석을 지원하지 않지만, YAML은
블록 스칼라(Block Scalar)
- YAML에서는 파이프(
|
)나 꺾쇠(>
)를 사용하여 여러 줄 문자열을 쉽게 표현할 수 있으나, JSON에는 이 기능이 없고 단일 라인 문자열만 허용됩니다(내부에\n
등 이스케이프 문자로 표현 가능).
- YAML에서는 파이프(
YAML 버전
- 반드시 YAML 1.2 파서를 사용해야 JSON 호환성이 잘 보장됩니다. YAML 1.1이나 그 이전 버전의 파서에서는 미묘한 차이로 인해 JSON 문서 파싱에서 문제가 발생할 수 있습니다.
4. 결론
- YAML 1.2는 JSON을 그대로 포함할 수 있을 만큼 상위 호환을 목표로 하고 있습니다.
- 따라서 유효한 JSON 문서는 모두 유효한 YAML 1.2 문서이며, YAML 파서는 JSON 데이터를 별다른 변환 없이 처리할 수 있습니다.
- 반대로 YAML은 JSON보다 훨씬 다양한 문법 요소(들여쓰기 구문, 주석, 앵커, 블록 스칼라 등)를 포함하므로, YAML → JSON 변환 시에는 이러한 확장 기능들을 JSON이 이해할 수 있는 형태로 변환해야 합니다.
즉, “JSON → YAML” 방향은 쉽지만, “YAML → JSON” 방향은 YAML이 갖는 확장 기능을 어떻게 처리하느냐에 따라 주의가 필요합니다. 이러한 점만 염두에 둔다면 YAML과 JSON 사이에서 데이터 교환을 유연하게 진행할 수 있습니다.