"YAML은 사람이 읽기 편한데, 왜 데이터 교환의 왕좌는 JSON이 차지했을까?"
"YAML은 어디서 강하고, JSON은 왜 이길 수밖에 없었을까?"


🔥 1. 데이터 포맷 전쟁의 서막

옛날 옛적, 프로그래머들은 데이터를 저장하고 주고받을 방법이 필요했어.
초창기엔 XML이 왕좌를 차지하고 있었지.

<person>
    <name>Alice</name>
    <age>25</age>
    <skills>
        <skill>Python</skill>
        <skill>Django</skill>
    </skills>
</person>

하지만 XML은 너무 장황하고 무겁고, 읽기가 힘들었어.
그래서 등장한 게 바로 JSONYAML이었지.


🤖 2. JSON: 데이터 교환의 왕좌를 차지하다

2001년, 더글러스 크락포드(Douglas Crockford)는 JavaScript의 객체 표현 방식에서 착안한 JSON을 내놓았어.
"간단하고, 가볍고, 기계가 이해하기 쉬운 데이터 교환 포맷!"

JSON의 목표는 명확했어:
사람이 읽을 수도 있지만, 컴퓨터가 더 잘 읽을 수 있는 구조
브라우저와 서버 간 데이터 전송에 최적화
객체 지향 언어(JavaScript, Python 등)와 자연스럽게 연동 가능

JSON 예제:

{
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "Django"]
}
  • {}[]만으로 데이터 구조를 표현할 수 있었고,
  • 웹에서 JavaScript가 JSON을 바로 처리할 수 있었기 때문에 순식간에 대중화되었어.
  • 특히, REST API에서 데이터 포맷의 표준이 되면서 JSON은 왕좌를 차지하게 되었지.

🧐 3. YAML: 사람이 이해하기 쉬운 데이터 포맷

하지만 JSON보다 사람이 보기 쉬운 포맷을 원하는 사람들도 있었어.
"데이터 구조를 표현할 때, 불필요한 중괄호, 따옴표 없이 쓰면 더 좋지 않을까?"

그래서 2001년, YAML(Ain’t Markup Language)이 등장했어.

name: Alice
age: 25
skills:
  - Python
  - Django

YAML의 특징:
사람이 읽기 쉽다 (중괄호, 따옴표 없이 깔끔!)
주석을 지원한다 (#을 사용 가능)
설정 파일에서 사용하기 편하다

이 때문에 YAML은 설정 파일(Configuration File)의 강자로 자리 잡았어.
Kubernetes, Docker, Ansible, CI/CD, GitHub Actions 같은 곳에서 YAML을 기본 포맷으로 사용하지!

하지만 데이터 교환 시장에서 YAML은 JSON을 이기지 못했어.
왜일까? 🤔


🤯 4. YAML은 왜 JSON을 이기지 못했을까?

YAML이 사람이 읽기 좋다면, JSON보다 더 대중화될 수도 있었을 텐데…
하지만 현실은 그렇지 않았어.

✅ JSON이 승리한 이유:
1. 문법이 너무 자유롭다?
- JSON은 {}[]로 구조가 명확하지만,
- YAML은 들여쓰기로 구조를 표현해서 실수할 가능성이 많아.
- 스페이스 하나만 잘못 써도 오류 발생! (특히 YAML의 Tab vs Space 문제 🤯)

  1. 파싱 속도가 느리다
  2. JSON은 빠르게 파싱 가능하지만,
  3. YAML은 문법이 유연한 만큼 해석해야 할 게 많아서 속도가 느림.
  4. 대량의 데이터를 처리할 때 JSON보다 비효율적.

  5. YAML은 보안 이슈가 있다

  6. YAML은 실행 가능한 코드(!python/object)를 포함할 수 있어서,
  7. 보안 위험(RCE, 원격 코드 실행)이 있음.
  8. JSON은 순수 데이터이기 때문에 안전!

  9. 브라우저에서 기본 지원되지 않는다

  10. JSON은 JavaScript의 기본 객체 구조이지만,
  11. YAML은 별도 라이브러리를 사용해야 함.

결국, 웹과 데이터 교환의 표준으로 JSON이 선택된 것이야.


🚀 5. 하지만 YAML은 설정 파일의 왕좌를 차지했다!

그렇다고 YAML이 사라진 건 아니야. JSON이 데이터 교환의 표준이 되었다면, YAML은 설정 파일의 표준이 되었지.

🔥 YAML이 강력한 이유:

  • 주석 지원 가능 (#) → 설정 파일 작성할 때 편함
  • 사람이 보기 쉽고 수정하기 간편
  • Kubernetes, Docker, Ansible 등 DevOps에서 핵심 포맷으로 사용

실제 사용 사례:

  • docker-compose.yml
  • kubernetes.yml
  • github-actions.yml
  • ansible-playbook.yml

하지만 YAML을 데이터 교환에 쓰려면 주의할 점이 많아. 특히 Django Rest Framework(DRF)에서도 직렬화 방식을 YAMLRenderer로 설정할 수 있지만, 기본값은 여전히 JSONRenderer야.

from rest_framework.renderers import JSONRenderer, YAMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    renderer_classes = [JSONRenderer, YAMLRenderer]

    def get(self, request):
        data = {"message": "Hello, YAML!"}
        return Response(data)

하지만 대부분의 API는 JSON이 기본! 왜냐하면 YAML은 파싱 속도와 보안 이슈 때문에 널리 쓰이지 않기 때문이야.

JSON vs YAML Medieval Battle


🎯 6. 결론: JSON vs YAML, 누가 더 좋은가?

✅ JSON을 선택해야 할 때:
- 웹 API, 데이터 교환 (속도 & 안정성 중요!)
- NoSQL 데이터 저장
- 브라우저에서 바로 사용할 때

✅ YAML을 선택해야 할 때:
- 설정 파일 (Kubernetes, Docker, CI/CD)
- 사람이 읽기 쉬운 문서 작성
- DevOps 관련 작업

한 줄 요약:
🚀 "JSON은 데이터 교환의 왕, YAML은 설정 파일의 왕!"