JSON to YAML 변환기 (JSON to YAML Converter)
JSON을 붙여넣으면 즉시 YAML로 변환됩니다. 브라우저에서 실시간 변환, K8s/Compose 지원, 2/4칸 들여쓰기, Norway 안전 자동 인용, 100% 개인 정보 보호.
YAML이란 무엇이며 JSON에서 왜 변환하나요?
YAML(YAML Ain't Markup Language)은 사람이 읽을 수 있는 데이터 직렬화 형식으로, 설정 파일, 코드형 인프라, 사람이 작성하고 기계가 읽는 모든 곳을 위해 설계되었습니다. 들여쓰기 기반 구문은 중괄호나 대괄호가 필요 없어 복잡한 중첩 구조를 JSON보다 훨씬 읽기 쉽게 만듭니다. Kubernetes, Helm, Ansible, Docker Compose, GitHub Actions, CircleCI, 사실상 모든 클라우드 네이티브 도구가 YAML을 기본 설정 형식으로 사용합니다. 따라서 JSON을 YAML로 변환하는 것은 DevOps와 백엔드 개발에서 가장 일반적인 작업 중 하나입니다 — API에서 JSON 형식으로 리소스 정의를 받은 후 버전 관리에 커밋할 YAML 매니페스트가 필요합니다.
일반적인 온라인 변환기와 비교할 때 이 도구에는 네 가지 중요한 차별점이 있습니다:
**1. Norway 문제 — 자동 안전 인용.** JSON을 YAML로 변환할 때 가장 큰 함정은 YAML Norway 문제입니다. YAML 1.1(구버전 Kubernetes, PyYAML, Ansible, Ruby의 Psych를 포함한 수많은 프로덕션 파서가 여전히 사용)에서 단순 문자열 yes, no, on, off, y, n은 불리언 true/false로 파싱됩니다. 이 문제는 Norway의 ISO 국가 코드("NO" → false)에서 유명해졌으며 Kubernetes 설정에서 실제 프로덕션 장애를 일으켰습니다. YAML 1.2에서 수정되었지만 파서가 아직 1.2가 아닐 수 있습니다. 이 도구의 기본 자동 인용 모드는 YAML 1.1 스키마와 함께 eemeli/yaml 라이브러리를 사용하여 Norway 문제 문자열에 자동으로 인용 부호를 추가합니다. 자세한 내용은 YAML Norway 문제와 JSON-YAML 차이점을 참조하세요.
**2. 키 순서 유지.** 일부 변환기가 키를 알파벳순으로 정렬하는 것과 달리, 이 도구는 JSON의 원래 키 삽입 순서를 유지합니다 — 모든 현대 자바스크립트 엔진에서 JSON.parse()의 동작과 일치합니다. 이는 apiVersion과 kind가 관례적으로 먼저 나와야 하는 Kubernetes 매니페스트, info가 paths 앞에 오는 OpenAPI 명세, 가독성이나 diff에 필드 순서가 중요한 모든 설정에 중요합니다.
**3. 큰 숫자 정밀도 주의 사항.** 2^53 - 1(9007199254740991)보다 큰 JSON 숫자는 자바스크립트의 IEEE 754 배정밀도 부동소수점으로 정확히 표현할 수 없습니다. JSON.parse()가 큰 정수(서버에서 64비트 정수인 Kubernetes resourceVersion 필드 등)를 읽으면 자동으로 잘립니다. 이것은 이 도구를 포함한 모든 브라우저 기반 JSON 도구에 영향을 미치는 근본적인 브라우저 자바스크립트 한계입니다. 안전한 해결 방법은 변환 전에 큰 정수가 JSON에 문자열로 저장되어 있는지 확인하는 것입니다.
**4. 100% 브라우저 기반 개인 정보 보호.** API 키, 데이터베이스 자격 증명, 내부 서비스 설정, 프로덕션 시크릿이 포함되는 JSON 데이터가 브라우저를 벗어나지 않습니다. 어떤 서버로도 데이터가 전송되지 않습니다. 브라우저의 네트워크 탭에서 확인할 수 있습니다. 역방향 도구는 YAML to JSON 변환기를 참조하고, JSON을 변환하기 전에 유효성 검사와 포매팅이 필요하다면 JSON 포맷터를 사용하세요.
YAML의 사람이 읽기 쉬운 특성에는 더 많은 파싱 엣지 케이스가 따릅니다. Norway 문제 외에도 YAML에는 8진수 숫자 특이 사항(YAML 1.1에서 0777은 511로 파싱), 여러 줄 문자열 구문(| 리터럴, > 폴딩), 앵커와 별칭 참조(&anchor와 *alias), 다중 문서 지원(--- 구분자)이 있습니다. JSON에는 이러한 복잡성이 없습니다 — 여섯 가지 데이터 타입만 있는 엄격하고 최소한의 형식입니다. 기계 간 데이터 교환에는 JSON이 거의 항상 더 나은 선택입니다. 사람이 편집하는 설정 파일(가독성과 주석이 중요)에는 YAML이 더 적합합니다. 이 변환기는 두 세계의 장점을 모두 제공합니다: JSON으로 프로그래밍 방식으로 작업하고, 인프라에는 YAML로 변환하세요.
// Convert JSON to YAML in Node.js using the eemeli/yaml library
import { Document } from 'yaml';
const data = JSON.parse('{"apiVersion":"apps/v1","kind":"Deployment"}');
// version: '1.1' ensures Norway-problem strings (yes/no/on/off/y/n)
// are automatically quoted in the output for YAML 1.1 parser safety
const doc = new Document(data, { version: '1.1' });
const yamlString = doc.toString({
indent: 2,
lineWidth: 0, // disable line wrapping
defaultStringType: 'PLAIN', // Auto mode: only quote when needed
});
console.log(yamlString);
// apiVersion: apps/v1
// kind: Deployment 주요 기능
실시간 변환
JSON을 입력하거나 붙여넣으면 YAML 출력이 즉시 업데이트됩니다 — 변환 버튼이 필요 없습니다. 대용량 입력(>200KB)은 자동으로 수동 모드로 전환하여 브라우저 응답성을 유지합니다.
2칸 또는 4칸 들여쓰기
2칸(Kubernetes, Docker Compose, GitHub Actions 표준)과 4칸(Ansible 관례) 들여쓰기를 전환합니다. YAML은 탭을 금지합니다 — 이 도구는 항상 공백을 사용합니다.
자동 안전 인용(Norway 안전)
기본 자동 모드는 YAML 1.1 스키마를 사용하여 "no", "yes", "on", "off", "y", "n" 같은 문자열을 YAML 1.1 파서에서 불리언으로 잘못 읽힐 경우 자동으로 인용하여 프로덕션 설정 오류를 방지합니다.
블록 및 Flow 스타일
블록 스타일은 매니페스트와 설정 파일에 이상적인 들여쓰기된 사람 읽기 쉬운 YAML을 생성합니다. Flow 스타일은 JSON과 유사한 컴팩트한 인라인 YAML을 생성합니다 — 문서 스니펫이나 최소 출력을 선호하는 도구에 유용합니다.
100% 브라우저 기반 개인 정보 보호
모든 변환은 자바스크립트를 사용하여 브라우저에서 로컬로 실행됩니다. API 키, 자격 증명, 프로덕션 설정을 포함한 JSON 데이터는 어떤 서버로도 전송되지 않고, 기록되지 않으며, 저장되지 않습니다.
K8s, Compose, Terraform 파일 지원
실제 DevOps 사용 사례에 최적화: Kubernetes 매니페스트, Docker Compose 스택, Helm 차트 values, GitHub Actions 워크플로, OpenAPI 명세, Terraform JSON 플랜 출력 — 각각에 대한 예시가 제공됩니다.
예시
Kubernetes Deployment
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"my-app","namespace":"production","labels":{"app":"my-app","version":"1.0.0"}},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"my-app"}},"template":{"metadata":{"labels":{"app":"my-app"}},"spec":{"containers":[{"name":"my-app","image":"my-app:1.0.0","ports":[{"containerPort":8080}],"resources":{"requests":{"memory":"64Mi","cpu":"250m"},"limits":{"memory":"128Mi","cpu":"500m"}}}]}}}} JSON API 응답 형식의 Kubernetes Deployment 매니페스트를 YAML로 변환하여 kubectl apply -f로 적용합니다
Docker Compose
{"version":"3.9","services":{"web":{"image":"nginx:1.25-alpine","ports":["80:80","443:443"],"environment":{"NGINX_HOST":"example.com","NGINX_PORT":"80"},"depends_on":["db"],"restart":"unless-stopped"},"db":{"image":"postgres:16-alpine","environment":{"POSTGRES_DB":"mydb","POSTGRES_USER":"admin","POSTGRES_PASSWORD":"secret"},"volumes":["pgdata:/var/lib/postgresql/data"]}},"volumes":{"pgdata":{}}} Docker Compose 서비스 정의를 JSON에서 docker compose up에 필요한 YAML 형식으로 변환합니다
GitHub Actions 워크플로
{"name":"CI","on":{"push":{"branches":["main"]},"pull_request":{"branches":["main"]}},"jobs":{"build":{"runs-on":"ubuntu-latest","steps":[{"uses":"actions/checkout@v4"},{"name":"Set up Node.js","uses":"actions/setup-node@v4","with":{"node-version":"20","cache":"pnpm"}},{"name":"Install dependencies","run":"pnpm install --frozen-lockfile"},{"name":"Run tests","run":"pnpm test"}]}}} GitHub Actions CI 워크플로 정의를 JSON에서 YAML로 변환하여 .github/workflows/에 커밋합니다
OpenAPI 명세
{"openapi":"3.0.3","info":{"title":"User API","version":"1.0.0","description":"Manage application users"},"paths":{"/users":{"get":{"summary":"List users","operationId":"listUsers","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}}}},"/users/{id}":{"get":{"summary":"Get user","operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}}},"components":{"schemas":{"User":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"}}}}}} OpenAPI 3.0 명세를 JSON에서 YAML로 변환합니다 — Swagger UI, Redoc, 대부분의 API 도구에서 선호하는 형식입니다
package.json
{"name":"my-app","version":"1.0.0","description":"A sample Node.js application","private":true,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","test":"vitest","lint":"eslint . --ext .ts,.tsx"},"dependencies":{"react":"^18.3.0","react-dom":"^18.3.0"},"devDependencies":{"typescript":"^5.4.0","vite":"^5.2.0","vitest":"^1.5.0","eslint":"^8.57.0","@types/react":"^18.3.0"},"engines":{"node":">=20.0.0","pnpm":">=9.0.0"}} 일반적인 Node.js package.json을 YAML로 변환합니다 — YAML을 선호하는 프로젝트 설정 도구로 마이그레이션할 때 유용합니다
Terraform JSON 플랜
{"format_version":"1.0","terraform_version":"1.7.4","variables":{"region":{"value":"us-east-1"}},"planned_values":{"root_module":{"resources":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","values":{"bucket":"my-app-assets","force_destroy":false,"tags":{"Environment":"production","ManagedBy":"terraform"}}}]}},"resource_changes":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","change":{"actions":["create"],"before":null,"after":{"bucket":"my-app-assets","force_destroy":false}}}]} Terraform JSON 플랜 출력을 YAML로 변환하여 사람이 검토하거나 GitOps 감사 및 CI/CD 파이프라인에서 활용합니다 — 대부분의 변환기가 지원하지 않는 기능입니다
사용 방법
- 1
JSON 데이터 붙여넣기
위 입력 필드에 JSON 데이터를 입력하거나 붙여넣으세요. '예시 불러오기'를 클릭하여 Kubernetes Deployment, Docker Compose 파일, Terraform 플랜 같은 샘플을 사용해 볼 수도 있습니다.
- 2
실시간 YAML 출력 확인
YAML이 출력 패널에 즉시 표시됩니다. 대상 도구의 요구 사항에 맞게 옵션(들여쓰기 2/4칸, 인용 자동/큰따옴표/작은따옴표, 스타일 블록/Flow)을 조정하세요.
- 3
복사 또는 다운로드
복사를 클릭하여 YAML을 클립보드에 저장하거나 다운로드를 클릭하여 .yaml 파일로 저장하면 kubectl apply, docker compose up, 기타 도구에서 바로 사용할 수 있습니다.
일반적인 변환 함정
후행 쉼표
JSON은 객체나 배열의 마지막 요소 뒤에 쉼표를 허용하지 않습니다. 후행 쉼표를 허용하는 자바스크립트 코드에서 복사할 때 매우 자주 발생합니다. 변환 전에 마지막 쉼표를 제거하세요.
{"name": "Alice", "role": "admin",} {"name": "Alice", "role": "admin"} 작은따옴표
JSON은 모든 문자열 값과 객체 키에 큰따옴표를 요구합니다. 작은따옴표는 자바스크립트와 Python에서는 유효하지만 JSON에서는 구문 오류입니다.
{'name': 'Alice', 'active': true} {"name": "Alice", "active": true} 인용되지 않은 키
모든 JSON 객체 키는 큰따옴표로 감싸야 합니다. 인용되지 않은 키는 자바스크립트 객체 리터럴에서는 유효하지만 엄격한 JSON에서는 파싱 오류를 일으킵니다.
{name: "Alice", role: "admin"} {"name": "Alice", "role": "admin"} 주석 미지원
표준 JSON은 어떤 형태의 주석도 지원하지 않습니다 — //, /* */, # 모두 해당됩니다. 설정에 주석이 필요하다면 YAML(# 주석 지원)이나 JSONC(주석 포함 JSON, VS Code에서 사용)를 사용하세요. JSON 데이터로 사용하기 전에 모든 주석을 제거하세요.
{"port": 8080 // HTTP port} {"port": 8080} YAML Norway 문제(자동 모드에서 자동 처리됨)
YAML 1.1 파서(Kubernetes, Ansible, PyYAML, Ruby Psych에서 사용)에서 단순 문자열 yes, no, on, off, y, n은 문자열 대신 불리언 true/false로 파싱됩니다. 이 도구의 자동 모드는 YAML 출력에서 이러한 값에 자동으로 인용 부호를 추가하여 YAML 1.1 또는 1.2 파서에서 안전하게 왕복 변환을 보장합니다. 큰따옴표 또는 작은따옴표 모드를 선택하면 모든 문자열이 명시적으로 인용되어 문제를 방지하지만 자동 모드의 출력이 더 자연스럽습니다.
# JSON input: {"country": "no", "enabled": "yes"}
# YAML without quoting (dangerous):
country: no
enabled: yes
# YAML 1.1 parser reads: country=false, enabled=true # YAML with Auto quoting (safe): country: 'no' enabled: 'yes' # YAML 1.1 parser reads: country="no", enabled="yes"
큰 정수 정밀도 손실
자바스크립트는 2^53 - 1(9007199254740991) 이하의 정수만 정확히 표현할 수 있습니다. 이보다 큰 JSON 정수(서버에서 int64인 Kubernetes resourceVersion 필드 등)는 JSON.parse()로 파싱할 때 자동으로 반올림되며, 잘린 숫자가 YAML 출력에 나타납니다. 이것은 브라우저 기반의 모든 JSON 도구에 영향을 미치는 근본적인 한계입니다. 안전한 해결 방법은 변환 전에 큰 정수를 JSON에 문자열로 저장하는 것입니다.
// JSON input (resourceVersion is int64 on K8s server)
{"resourceVersion": 9007199254740993}
// JavaScript reads it as: 9007199254740992 (precision lost)
// YAML output will contain the wrong number // Store large integers as strings to preserve precision
{"resourceVersion": "9007199254740993"}
// YAML output: resourceVersion: '9007199254740993' (exact) 주요 사용 사례
- Kubernetes 매니페스트
- kubectl get -o json 또는 Kubernetes API에서 받은 JSON API 응답을 GitOps 워크플로, Kustomize 오버레이, kubectl apply -f 배포용 YAML 매니페스트로 변환합니다.
- Docker Compose 파일
- docker inspect JSON 출력 또는 프로그래밍 방식으로 생성된 서비스 설정을 docker compose up 및 Docker Stack 배포와 호환되는 docker-compose.yaml 파일로 변환합니다.
- Helm 차트 Values
- JSON 설정 내보내기를 Helm 차트 배포용 YAML values 파일로 변환하여 깔끔한 YAML 구문으로 버전 관리된 인프라 설정을 구현합니다.
- GitHub Actions 워크플로
- JSON으로 GitHub Actions 워크플로 정의를 프로그래밍 방식으로 구축한 후 GitHub Actions 러너가 요구하는 .github/workflows/*.yaml 형식으로 변환합니다.
- OpenAPI 명세
- 많은 프레임워크(FastAPI, SpringDoc)가 반환하는 JSON 형식의 OpenAPI/Swagger 명세를 Swagger UI, Redoc, API 게이트웨이 도구에서 선호하는 YAML 형식으로 변환합니다.
- 설정 마이그레이션
- JSON에 저장된 애플리케이션 설정(appsettings.json, config.json)을 YAML이 필요하거나 선호하는 도구용 YAML 형식으로 마이그레이션하여 주석으로 문서화할 수 있습니다.
기술 세부 정보
- RFC 8259 호환 JSON 파싱
- JSON 입력은 브라우저의 네이티브 JSON.parse()를 사용하여 파싱되며 RFC 8259를 완전히 준수합니다. 위치 정보(최선의 줄 및 열 번호)를 포함한 정확한 구문 오류 메시지를 제공하며 모든 JSON 데이터 타입(문자열, 숫자, 불리언, null, 배열, 객체)을 처리합니다.
- YAML 1.1 스키마를 사용하는 eemeli/yaml Document API를 통한 YAML 1.2 출력
- YAML은 eemeli/yaml 라이브러리(v2.8+, CVE 안전)를 통해 version: '1.1'로 Document API를 사용하여 생성됩니다. 이 조합은 YAML 1.2 호환 출력을 생성하면서 YAML 1.1 인용 규칙을 적용합니다 — Norway 문제 문자열(yes/no/on/off/y/n)이 출력에서 자동으로 인용되어 YAML 1.1 및 1.2 파서 모두에서 안전합니다. 긴 문자열을 온전히 유지하기 위해 줄 바꿈이 비활성화됩니다(lineWidth: 0).
- 100% 브라우저 기반 — 업로드 없음, 서버 없음
- 모든 처리는 브라우저의 자바스크립트 엔진에서 완전히 실행됩니다. 어떤 시점에서도 네트워크를 통해 데이터가 전송되지 않습니다. 200KB보다 큰 입력은 자동으로 실시간 모드에서 수동 모드(명시적인 변환 클릭 필요)로 전환되어 브라우저 응답성을 유지하고 무거운 직렬화 중 메인 스레드 블로킹을 방지합니다.
모범 사례
- DevOps 설정에는 항상 자동 인용 모드 사용
- Kubernetes, Helm, Ansible, Docker Compose, GitHub Actions에서 사용할 JSON을 변환할 때는 항상 기본 자동(Norway 안전) 인용 모드를 사용하세요. 이러한 도구의 YAML 1.1 파서는 단순 문자열 yes, no, on, off, y, n을 불리언으로 잘못 해석합니다 — 자동 모드가 이를 투명하게 방지합니다.
- 클라우드 네이티브 도구에는 2칸 들여쓰기 사용
- Kubernetes, Docker Compose, GitHub Actions, Helm은 관례적으로 2칸 들여쓰기를 사용합니다. 이러한 파일에서 4칸 들여쓰기를 사용하는 것은 유효한 YAML이지만 커뮤니티 예시, 자동 생성된 설정, 팀의 기존 매니페스트와 불일치를 만들 수 있습니다.
- 변환 전 큰 정수를 문자열로 저장
- API 서버의 Kubernetes resourceVersion, uid, 기타 int64 필드는 자바스크립트의 안전한 정수 범위(2^53 - 1)를 초과할 수 있습니다. 정확한 수치 정밀도가 필요하다면 변환 전에 이 값들을 JSON 문자열로 저장하세요. 서버 측 생성 필드가 포함된 kubectl get -o json 출력에 특히 중요합니다.
- 먼저 JSON 유효성 검사
- JSON 소스가 직접 작성되었거나 유효하지 않은 출력을 가끔 생성하는 시스템(후행 쉼표, 인용되지 않은 키, 주석)에서 온 경우 변환 전에 JSON 포맷터로 유효성을 검사하세요. JSON 포맷터를 사용하여 먼저 구문 오류를 찾아 수정한 다음 깨끗한 JSON을 YAML로 변환하세요.
- 버전 관리에 들어가는 파일에는 블록 스타일 선호
- 블록 스타일 YAML은 각 필드가 별도 줄에 표시되기 때문에 Git에서 사람이 읽기 쉬운 diff를 생성합니다. Flow 스타일(컴팩트한 인라인)은 diff를 읽고 검토하기 어렵게 만듭니다. Flow 스타일은 문서에 짧은 YAML 스니펫을 삽입하거나 컴팩트한 출력이 필요한 도구에 한해 사용하세요.
자주 묻는 질문
온라인에서 JSON을 YAML로 어떻게 변환하나요?
YAML Norway 문제란 무엇이며, 이 도구는 어떻게 처리하나요?
Norway 문제가 Kubernetes와 DevOps에 미치는 영향은 무엇인가요?
YAML에서 2칸과 4칸 들여쓰기 중 어느 것을 사용해야 하나요?
이 도구로 Kubernetes 매니페스트를 만들려면 어떻게 하나요?
Docker Compose JSON을 YAML로 변환하려면 어떻게 하나요?
2^53보다 큰 JSON 숫자를 YAML로 변환하면 정밀도가 손실되나요?
변환기가 JSON의 원래 키 순서를 유지하나요?
JSON과 YAML 중 언제 무엇을 사용해야 하나요?
명령줄에서 JSON을 YAML로 변환하려면 어떻게 하나요?
Python, Node.js, Go에서 JSON을 YAML로 변환하려면 어떻게 하나요?
이 도구를 사용할 때 JSON 데이터가 서버로 전송되나요?
JSON 입력에 파일 크기 제한이 있나요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
JSON 포맷터 (JSON Formatter)
인코딩 & 포매팅
브라우저에서 JSON을 즉시 포매팅하고 유효성 검사를 수행합니다. 온라인 도구로 구문 검사, 오류 감지, 최소화, 복사를 지원하며 데이터는 서버로 전송되지 않습니다.
URL 인코더 · 디코더 (URL Encoder & Decoder)
인코딩 & 포매팅
URL을 실시간 인코딩·디코딩하고 내장 파서로 구조를 분석합니다. encodeURI와 encodeURIComponent 모드를 온라인에서 지원하며 데이터는 브라우저를 떠나지 않습니다.
YAML to JSON 변환기 (YAML to JSON Converter)
인코딩 & 포매팅
YAML을 붙여넣으면 즉시 JSON으로 변환됩니다. K8s 매니페스트, OpenAPI 명세, Helm values 지원, 앵커/별칭 완전 확장, 100% 개인 정보 보호.
진법 변환기 (Number Base Converter)
변환 도구
2진수, 16진수, 10진수, 8진수 및 임의 진법(2-36)을 즉시 변환합니다. 온라인에서 무료로 사용할 수 있으며 모든 처리는 브라우저에서 이루어집니다.
이미지 압축기 · JPEG, PNG, WebP 온라인 압축
변환 도구
JPEG, PNG, WebP 이미지를 온라인에서 최대 80% 압축합니다. 브라우저 안에서만 처리되며 업로드 없이 20장 일괄 처리, 품질 조절, 전후 비교를 무료로 지원합니다.