JSON, CSV, YAML 간 변환하기
JSON, CSV, YAML은 같은 데이터를 담을 수 있는 경우가 많지만 1:1로 대응하지는 않습니다. 이 가이드에서는 각 형식의 장점, 변환 중에 달라질 수 있는 세부 사항, 결과를 확인하는 방법을 설명합니다.
각 형식의 장점
JSON은 웹 API와 프로그램이 읽는 설정에 널리 쓰이는 형식입니다. 객체, 배열, 문자열, 숫자, 불리언, null이라는 작고 명확한 타입 체계를 갖고 있습니다. 문법이 엄격해 소프트웨어가 파싱하기 쉽지만 주석은 쓸 수 없습니다.
CSV는 한 줄에 한 행, 한 열에 한 값을 담는 표입니다. 스프레드시트, 데이터베이스, 보고서 도구가 쉽게 가져올 수 있고, 크고 평평한 데이터를 간결하게 담습니다. 데이터 타입이나 중첩 구조를 표현하는 표준 방법은 없습니다.
YAML은 사람이 쓰고 읽기 쉽도록 설계되었습니다. 주석을 쓸 수 있고, 괄호 대신 들여쓰기를 사용하며, JSON과 같은 구조를 표현할 수 있어 설정 파일에 널리 쓰입니다. 반면 문법이 유연한 만큼 들여쓰기나 따옴표를 조금만 잘못 써도 의미가 바뀔 수 있습니다.
| 특징 | JSON | CSV | YAML |
|---|---|---|---|
| 중첩 객체와 배열 | 지원 | 미지원 (평평한 표) | 지원 |
| 데이터 타입 | 문자열, 숫자, 불리언, null | 텍스트만 | 값에서 추론 |
| 주석 | 미지원 | 미지원 | 지원 |
| 주요 용도 | API, 앱 데이터 | 스프레드시트, 데이터 가져오기 | 설정 파일 |
CSV에서는 중첩 구조가 평평해집니다
CSV 파일에는 행과 열만 있으므로 중첩 데이터는 형태를 바꿔야 합니다. 흔히 쓰는 방법은 두 가지입니다. 첫째는 구조를 address.city, address.zip 같은 열 이름으로 평탄화하는 방법이고, 둘째는 중첩된 부분을 한 셀 안에 JSON 문자열로 그대로 두는 방법입니다. LeedyBox 데이터 변환은 두 방법을 모두 제공합니다.
두 방법 모두 장단점이 있습니다. 평탄화한 열은 스프레드시트에서 읽기 쉽지만, 길이가 서로 다른 배열이 있으면 빈칸이 많은 열이 잔뜩 생깁니다. 셀 안의 JSON 문자열은 구조를 유지하지만 손으로 편집하기는 어렵습니다. 나중에 다시 JSON으로 변환한다면 구조가 처음과 같은지 확인하세요.
CSV에서는 타입이 텍스트가 됩니다
CSV는 모든 값을 텍스트로 저장합니다. 숫자 42, 문자열 "42", 불리언 true는 셀 안에서 모두 똑같아 보입니다. CSV 파일을 다시 읽을 때 프로그램은 어떤 열이 숫자나 날짜인지 추측하거나 따로 지정받아야 합니다. LeedyBox 변환기는 CSV 값을 텍스트로 읽으므로, 직접 바꾸지 않는 한 CSV 파일의 숫자는 JSON에서 문자열로 나타납니다.
스프레드시트 앱은 여기에 자체적인 추측을 더합니다. 우편번호나 전화번호 앞의 0을 없애거나, 긴 숫자를 지수 표기로 바꾸거나, 값을 날짜로 해석할 수 있습니다. =, +, -, @로 시작하는 셀은 수식으로 처리될 수 있으며, 변환기에는 CSV 출력용 엑셀 수식 보호 옵션이 있습니다.
주석과 YAML의 타입 추론
JSON에는 주석이 없으므로 YAML을 JSON으로 변환하면 주석이 사라집니다. 다시 변환해도 주석은 복원되지 않습니다. 주석이 중요하다면 원본 YAML 파일을 보관하세요.
YAML은 따옴표 없는 값에서 타입을 추측합니다. 일부 파서가 쓰는 예전 YAML 1.1 규칙에서는 no, yes, on, off 같은 단어가 불리언이 되므로, NO 같은 국가 코드가 false로 바뀔 수 있습니다. 2026-10-02 같은 값은 날짜 객체가 되고, 1e3이나 010은 숫자로 읽힐 수 있습니다. LeedyBox 변환기는 YAML 1.2 코어 스키마로 YAML을 읽으므로 no와 날짜를 텍스트로 유지하지만, 파일을 읽는 다른 도구는 다르게 동작할 수 있습니다. 텍스트로 남아야 하는 값은 따옴표로 감싸는 습관이 가장 안전합니다.
JavaScript에서의 큰 숫자
JavaScript는 숫자를 64비트 부동소수점 값으로 저장합니다. 9,007,199,254,740,991(253 − 1)보다 큰 정수는 모두 정확히 표현할 수 없으므로, 12345678901234567891 같은 큰 ID는 파싱할 때 아무 경고 없이 반올림될 수 있습니다. 이 문제는 이 도구를 포함한 모든 브라우저 기반 변환기에 해당하며, 이 도구는 그런 숫자를 감지하면 알림을 표시합니다. 데이터베이스 ID 같은 긴 식별자는 문자열로 저장하는 편이 안전합니다.
결과 확인하기
변환 결과가 올바른 형식이라고 해서 내용까지 정확하다는 뜻은 아닙니다. 결과를 사용하기 전에 다음을 확인하세요.
- 행 또는 항목 수를 원본과 비교합니다.
- 빈 값, 특수문자, 줄바꿈, 중첩 데이터가 있는 레코드를 포함해 몇 개를 골라 확인합니다.
- 대상 시스템에서 숫자, 불리언, 날짜여야 하는 열을 확인합니다.
- 반올림됐을 수 있는 긴 숫자가 없는지 살펴봅니다.
- 결과를 읽을 프로그램으로 검증하되, 먼저 데이터 사본으로 해 봅니다.
텍스트 비교 도구로 원본 파일과 왕복 변환한 결과를 비교할 수 있습니다.
자주 묻는 질문
JSON을 CSV로 바꿨다가 다시 바꾸면 그대로 돌아오나요?
단순하고 평평한 데이터에서만 그렇고, 그 경우에도 숫자와 불리언은 대개 텍스트로 돌아옵니다. 중첩 데이터와 타입은 사용한 옵션에 따라 달라지므로 결과를 원본과 비교하세요.
YAML 값이 왜 true나 false로 바뀌었나요?
일부 YAML 파서는 따옴표 없는 yes, no, on, off 같은 단어를 불리언으로 처리합니다. 텍스트로 유지하려면 값을 따옴표로 감싸세요.
변환할 때 데이터가 업로드되나요?
LeedyBox 데이터 변환은 브라우저에서 실행되므로, 붙여넣은 데이터는 사용자의 기기에서 처리됩니다.