블로그

JSON vs YAML 완벽 비교: 어떤 형식을 선택해야 할까?

개발자라면 JSON과 YAML을 매일 접하게 됩니다. Docker Compose는 YAML을, API 응답은 JSON을 사용합니다. 두 형식은 각각 어떤 장단점이 있고, 언제 어떤 것을 선택해야 할까요? 이 글에서 상세히 비교합니다.

기본 문법 비교

같은 데이터를 JSON과 YAML로 표현해보겠습니다.

JSON

{
"server": {
"host": "localhost",
"port": 8080,
"debug": true,
"databases": ["postgres", "redis"],
"cors": {
"origins": ["https://example.com"],
"credentials": true
}
}
}

YAML

server:
host: localhost
port: 8080
debug: true
databases:
- postgres
- redis
cors:
origins:
- https://example.com
credentials: true

핵심 차이점

특성JSONYAML
가독성괜찮음매우 좋음
주석 지원불가

#으로 가능

파일 크기더 큼 (괄호, 따옴표)더 작음
파싱 속도빠름상대적으로 느림
데이터 타입6가지더 다양 (날짜, 바이너리 등)
들여쓰기의미 없음구조를 결정함
표준화RFC 8259YAML 1.2

JSON의 장점

1. 범용성과 호환성

거의 모든 프로그래밍 언어에 JSON 파서가 내장되어 있습니다. 브라우저의 JSON.parse()JSON.stringify()는 추가 라이브러리 없이 바로 사용할 수 있습니다.

2. 파싱 성능

JSON은 문법이 단순하여 파싱 속도가 빠릅니다. 대용량 데이터를 처리할 때 유리합니다.

3. 엄격한 문법

문법이 엄격하여 파싱 오류를 쉽게 발견할 수 있습니다. 모호한 해석의 여지가 없습니다.

4. API 표준

REST API, GraphQL 등 대부분의 웹 API가 JSON을 기본 형식으로 사용합니다.

YAML의 장점

1. 가독성

들여쓰기 기반 구조로 사람이 읽기 매우 편합니다. 설정 파일에 특히 적합합니다.

2. 주석 지원

# 기호로 주석을 작성할 수 있어 설정 파일에 설명을 추가할 수 있습니다.

# 데이터베이스 설정
database:
host: localhost # 개발 환경용
port: 5432

3. 멀티라인 문자열

긴 텍스트를 깔끔하게 작성할 수 있습니다.

description: |
이것은 여러 줄에 걸친
긴 설명 텍스트입니다.
줄바꿈이 유지됩니다.

4. 앵커와 별칭

반복되는 값을 참조로 재사용할 수 있습니다.

defaults: &defaults
timeout: 30
retries: 3
development:
<<: *defaults
debug: true
production:
<<: *defaults
debug: false

언제 어떤 형식을 선택할까?

JSON을 선택해야 하는 경우

  • API 통신: 클라이언트-서버 간 데이터 교환
  • 브라우저 환경: 웹 프론트엔드에서 데이터 처리
  • 프로그래밍 데이터: 코드에서 직접 생성/소비하는 데이터
  • 성능이 중요한 경우: 대용량 데이터의 빠른 파싱

YAML을 선택해야 하는 경우

  • 설정 파일: Docker Compose, Kubernetes, GitHub Actions
  • 사람이 편집하는 파일: 주석과 가독성이 중요할 때
  • CI/CD 파이프라인: 워크플로우 정의
  • 문서화가 필요한 설정: 각 옵션에 설명이 필요할 때

YAML 사용 시 주의사항

들여쓰기 실수

YAML에서 가장 흔한 오류입니다. 탭 대신 반드시 스페이스를 사용하세요.

암묵적 타입 변환

YAML은 yes, no, on, off를 불리언으로 자동 변환합니다. 문자열로 사용하려면 따옴표가 필요합니다.

# 주의: country가 boolean true로 해석됨
country: NO
# 올바른 방법
country: "NO"

보안 이슈

YAML의 일부 구현체는 임의 코드 실행 취약점이 있을 수 있습니다. 신뢰할 수 없는 YAML 입력을 처리할 때는 안전한 로더를 사용하세요.

마무리

JSON과 YAML은 경쟁이 아닌 보완 관계입니다. 상황에 맞게 적절히 선택하고, 필요할 때 JSONKit의 Convert 도구를 사용하면 두 형식 간 변환을 즉시 수행할 수 있습니다.