"YAML은 사람이 읽기 편한데, 왜 데이터 교환의 왕좌는 JSON이 차지했을까?"
"YAML은 어디서 강하고, JSON은 왜 이길 수밖에 없었을까?"
🔥 1. 데이터 포맷 전쟁의 서막
옛날 옛적, 프로그래머들은 데이터를 저장하고 주고받을 방법이 필요했어.
초창기엔 XML이 왕좌를 차지하고 있었지.
<person>
<name>Alice</name>
<age>25</age>
<skills>
<skill>Python</skill>
<skill>Django</skill>
</skills>
</person>
하지만 XML은 너무 장황하고 무겁고, 읽기가 힘들었어.
그래서 등장한 게 바로 JSON과 YAML이었지.
🤖 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
문제 🤯)
- 파싱 속도가 느리다
- JSON은 빠르게 파싱 가능하지만,
- YAML은 문법이 유연한 만큼 해석해야 할 게 많아서 속도가 느림.
-
대량의 데이터를 처리할 때 JSON보다 비효율적.
-
YAML은 보안 이슈가 있다
- YAML은 실행 가능한 코드(
!python/object
)를 포함할 수 있어서, - 보안 위험(RCE, 원격 코드 실행)이 있음.
-
JSON은 순수 데이터이기 때문에 안전!
-
브라우저에서 기본 지원되지 않는다
- JSON은 JavaScript의 기본 객체 구조이지만,
- 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은 파싱 속도와 보안 이슈 때문에 널리 쓰이지 않기 때문이야.
🎯 6. 결론: JSON vs YAML, 누가 더 좋은가?
✅ JSON을 선택해야 할 때:
- 웹 API, 데이터 교환 (속도 & 안정성 중요!)
- NoSQL 데이터 저장
- 브라우저에서 바로 사용할 때
✅ YAML을 선택해야 할 때:
- 설정 파일 (Kubernetes, Docker, CI/CD)
- 사람이 읽기 쉬운 문서 작성
- DevOps 관련 작업
한 줄 요약:
🚀 "JSON은 데이터 교환의 왕, YAML은 설정 파일의 왕!"
Add a New Comment