alltools.one
Data
2025-06-21
7 min
alltools.one Team
JSONYAMLConversionConfigurationDevOps

JSON에서 YAML로 변환: 완벽 마이그레이션 가이드

JSON과 YAML은 서로 다른 구문으로 동일한 데이터 구조를 표현합니다. 대부분의 경우 변환은 간단하지만, 타입, 멀티라인 문자열, 주석 관련 엣지 케이스에는 주의가 필요합니다. 이 가이드에서는 포맷 간 완전한 매핑을 다룹니다.

구문 매핑

객체 / 매핑

JSON:

{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "myapp"
  }
}

YAML:

database:
  host: localhost
  port: 5432
  name: myapp

배열 / 시퀀스

JSON:

{
  "servers": ["web1", "web2", "web3"]
}

YAML:

servers:
  - web1
  - web2
  - web3

중첩 구조

JSON:

{
  "services": [
    {
      "name": "api",
      "ports": [8080, 8443],
      "env": {"NODE_ENV": "production"}
    }
  ]
}

YAML:

services:
  - name: api
    ports:
      - 8080
      - 8443
    env:
      NODE_ENV: production

JSON에서 YAML 변환기로 즉시 변환하세요.

주의할 엣지 케이스

1. 주석

YAML은 주석을 지원하지만 JSON은 지원하지 않습니다. YAML을 JSON으로 변환하면 모든 주석이 사라집니다:

# 이 주석은 JSON에서 사라집니다
database:
  host: localhost  # 이것도 사라집니다

2. 멀티라인 문자열

YAML은 JSON에 없는 강력한 멀티라인 구문을 가지고 있습니다:

description: |
  이것은 줄 바꿈을
  유지하는 멀티라인
  문자열입니다.

JSON에서는 이렇게 됩니다:

{
  "description": "이것은 줄 바꿈을\n유지하는 멀티라인\n문자열입니다.\n"
}

3. 타입 모호성

YAML은 자동으로 타입을 감지하여 문제가 발생할 수 있습니다:

version: 1.0    # 부동소수점, "1.0" 문자열이 아님
port: 080       # 8진수 64, "080" 문자열이 아님
country: NO     # 불리언 false, "NO" 문자열이 아님

JSON에서는 타입이 명시적입니다:

{
  "version": "1.0",
  "port": "080",
  "country": "NO"
}

JSON을 YAML로 변환할 때 잘못 해석될 수 있는 값에는 따옴표를 추가하세요.

4. Null 값

둘 다 null을 지원하지만 구문이 다릅니다:

value: null     # 명시적
value: ~        # YAML 축약형
value:          # 빈 값 = null
{ "value": null }

5. 키의 특수 문자

JSON 키는 모든 유니코드 문자를 포함할 수 있습니다. 특수 문자가 있는 YAML 키는 따옴표가 필요합니다:

"content-type": "application/json"  # 하이픈에 따옴표 필요
simple_key: value                    # 밑줄은 괜찮음

커맨드 라인 변환

yq (YAML 프로세서) 사용

# JSON에서 YAML로
yq -P input.json > output.yaml

# YAML에서 JSON으로
yq -o=json input.yaml > output.json

Python 사용

# JSON에서 YAML로
python3 -c "import json, yaml, sys; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))" < input.json > output.yaml

# YAML에서 JSON으로
python3 -c "import json, yaml, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml > output.json

jq + yq 함께 사용

# JSON 처리 후 YAML로 출력
cat config.json | jq '.database' | yq -P

각 포맷의 사용 시기

기준JSONYAML
사람이 편집어려움 (괄호, 쉼표)쉬움 (깔끔한 구문)
기계 파싱빠름느림
주석미지원지원
데이터 교환표준 (API)드물게 사용
설정허용선호
엄격성엄격 (좋음)유연 (위험)

JSON 사용 시기: API 통신, 데이터 저장, 기계 생성 설정, 브라우저 환경.

YAML 사용 시기: 사람이 편집하는 설정, Docker Compose, Kubernetes, CI/CD 파이프라인, Ansible.

더 자세한 비교는 YAML vs JSON 글을 참조하세요.

FAQ

YAML은 JSON의 상위 집합인가요?

네, YAML 1.2 (2009) 이후 모든 유효한 JSON 문서는 유효한 YAML이기도 합니다. YAML 파서는 JSON을 직접 파싱할 수 있습니다. 그러나 반대는 성립하지 않습니다 — 주석, 앵커, 멀티라인 문자열 같은 YAML 기능은 JSON에 해당하는 것이 없습니다.

JSON과 YAML 중 어느 것이 파싱이 더 빠른가요?

거의 모든 언어에서 JSON이 훨씬 빠르게 파싱됩니다. JSON 파서는 처리할 구문이 적어 더 단순합니다. 시작 시 한 번 로드하는 설정 파일에서는 차이가 무시할 수 있습니다. 고처리량 데이터 처리에서는 JSON이 확실한 선택입니다.

관련 리소스

Published on 2025-06-21
JSON to YAML Conversion: A Complete Migration Guide | alltools.one