JSON, YAML, CSV: 언제 어떤 것을 사용하고 어떻게 변환할까
데이터셋을 다운로드하면 CSV입니다. API는 JSON을 반환합니다. 설정 파일은 YAML입니다. 동료가 JSON 파일을 보내며 스프레드시트로 만들어 달라고 합니다. 또 다른 동료가 YAML 설정을 주면서 다른 도구를 위해 JSON으로 변환해 달라고 합니다.
데이터 형식 변환은 실제로 해보기 전까지는 사소해 보이는 작업입니다. 어떤 형식을 언제 사용해야 하는지, 형식 간에 어떻게 변환하는지 이해하면 실제로 시간을 절약할 수 있습니다.
세 가지 형식 한눈에 보기
JSON (JavaScript Object Notation)
{
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}
무엇인가: 객체(키-값 쌍), 배열(순서 있는 목록), 문자열, 숫자, 불리언, null을 지원하는 구조화된 데이터용 텍스트 형식입니다.
장점: 기계 판독 가능, 모든 프로그래밍 언어에서 폭넓게 지원, 중첩 데이터를 자연스럽게 처리, 엄격한 구문으로 모호함 방지.
단점: 장황함(중괄호, 대괄호, 따옴표가 많음), YAML보다 사람이 읽기 어려움, 주석 미지원.
YAML (YAML Ain't Markup Language)
name: Alice
age: 30
skills:
- Python
- SQL
- Docker
address:
city: Berlin
country: Germany
무엇인가: 중괄호와 대괄호 대신 들여쓰기를 사용하는 사람 친화적인 데이터 직렬화 형식입니다. JSON의 상위 집합으로, 유효한 JSON은 유효한 YAML이기도 합니다.
장점: 매우 읽기 쉬움, 주석 지원, 시각적 잡음이 적음, 설정 파일에 적합.
단점: 들여쓰기에 민감(잘못된 공백으로 쉽게 깨짐), 예상치 못한 파싱 동작이 있을 수 있음, JSON보다 파싱 속도가 느림.
CSV (Comma-Separated Values)
name,age,city,country
Alice,30,Berlin,Germany
Bob,25,London,UK
Charlie,35,Paris,France
무엇인가: 각 줄이 행이고 행 내의 값이 쉼표(또는 세미콜론, 탭)로 구분되는 평면 텍스트 형식입니다.
장점: 범용적(모든 스프레드시트, 데이터베이스, 데이터 도구에서 지원), 표 형식 데이터에 대해 간결, 읽고 만들기 쉬움.
단점: 중첩 데이터 미지원, 데이터 타입 없음(모든 것이 문자열), 특수 문자에 대한 표준 없음, 평면 테이블에 제한됨.
알고 계셨나요? YAML은 기술적으로 JSON의 상위 집합입니다. 즉, 유효한 JSON 문서는 자동으로 유효한 YAML 문서이기도 합니다. JSON을 YAML 파서에 붙여넣으면 작동합니다. 반대는 성립하지 않습니다 — YAML의 기능(주석, 앵커, 여러 줄 문자열)에는 JSON 대응물이 없습니다.
언제 어떤 것을 사용할까
| 용도 | 최적 형식 | 이유 |
|---|---|---|
| API 요청 및 응답 | JSON | 업계 표준, 모든 언어가 네이티브 지원 |
| 설정 파일 | YAML | 사람이 읽기 쉬움, 문서화를 위한 주석 지원 |
| 스프레드시트 데이터 | CSV | Excel, Google Sheets 등에서 바로 열림 |
| 데이터베이스 내보내기 | CSV | 평면 표 형식 데이터가 행과 열에 직접 대응 |
| 복잡한 중첩 데이터 | JSON 또는 YAML | CSV는 중첩을 표현할 수 없음 |
| 시스템 간 데이터 교환 | JSON | 명확한 파싱, 엄격한 규격 |
| 사람이 편집하는 설정 | YAML | 손으로 읽고 편집하기 쉬움 |
| 단순한 데이터 목록 | CSV | 가벼움, 오버헤드 없음 |
형식 간 변환
JSON에서 YAML로
가장 흔한 설정 변환입니다. 한 도구에서 JSON 설정을 가지고 있고 다른 도구를 위해 YAML이 필요한 경우입니다. YAML은 JSON이 지원하는 모든 것을 지원하므로 변환은 간단합니다.
{"server": {"host": "0.0.0.0", "port": 8080}}
다음과 같이 변환됩니다:
server:
host: 0.0.0.0
port: 8080
YAML에서 JSON으로
YAML에서 JSON으로의 변환도 간단하지만 주석을 잃게 되며(JSON은 주석을 지원하지 않음) 결과가 더 장황해집니다.
JSON에서 CSV로
이것은 평면 JSON 배열(같은 키를 가진 객체의 배열)에 잘 작동합니다. 각 객체가 행이 되고 각 키가 열 헤더가 됩니다.
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
다음과 같이 변환됩니다:
name,age
Alice,30
Bob,25
주의 JSON에 중첩된 객체나 배열이 포함되어 있으면 JSON-CSV 변환이 제대로 되지 않습니다. CSV는 평면적이므로 "skills" 배열이나 중첩된 "address" 객체를 표현할 방법이 없습니다. 중첩 데이터는 평면화하거나(address.city, address.country를 별도 열로) CSV 셀 내에서 문자열로 직렬화해야 합니다.
CSV에서 JSON으로
각 행이 객체가 되며, 열 헤더가 키가 됩니다. 단순한 표 형식 데이터에 깔끔합니다.
CSV에서 YAML로
덜 흔하지만 같은 논리를 따릅니다: 각 행이 YAML 매핑이 되고 전체 파일이 YAML 시퀀스가 됩니다.
흔한 함정들
CSV 인코딩 문제
CSV 파일은 다양한 문자 인코딩(UTF-8, Latin-1, Windows-1252)을 사용할 수 있습니다. CSV를 열었을 때 "München" 대신 "München"처럼 깨진 문자가 보인다면 인코딩 불일치입니다. 가능하면 항상 UTF-8을 사용하세요.
CSV 구분자 혼동
모든 CSV가 쉼표를 사용하는 것은 아닙니다. 유럽의 CSV는 많은 유럽 숫자 형식에서 쉼표가 소수점 구분자로 사용되기 때문에 세미콜론을 사용하는 경우가 많습니다. 탭으로 구분된 값(TSV)도 흔한 변형입니다.
YAML 들여쓰기 오류
YAML은 들여쓰기(스페이스, 절대 탭 아님)를 사용하여 구조를 정의합니다. 일관되지 않은 들여쓰기나 탭과 스페이스를 혼합하면 파싱 오류 또는 조용한 오해석이 발생합니다. 들여쓰기 수준당 정확히 2칸 스페이스를 사용하고 에디터가 탭 대신 스페이스를 삽입하도록 설정하세요.
주의 YAML에서 문자열 no는 불리언 false로 파싱되고, yes는 true로 파싱됩니다. 문자열 1.0은 숫자로 파싱됩니다. 리터럴 문자열 "no", "yes", "1.0"을 의미한다면 따옴표를 써야 합니다: "no", "yes", "1.0". 이것은 YAML의 가장 유명한 함정 중 하나입니다.
JSON 후행 쉼표
JSON은 후행 쉼표를 허용하지 않습니다. 다음은 JavaScript에서는 유효하지만 JSON에서는 유효하지 않습니다:
{"name": "Alice", "age": 30,} // 잘못된 JSON: 후행 쉼표
대용량 파일 성능
매우 큰 데이터셋(수백만 행)의 경우 CSV가 JSON이나 YAML보다 효율적입니다. 레코드당 최소한의 오버헤드가 있기 때문입니다. JSON은 모든 값에 중괄호와 따옴표를 추가하므로 큰 표 형식 데이터의 파일 크기가 크게 증가합니다.
변환을 위한 실용적 도구
빠른 일회성 변환에는 브라우저 기반 도구가 가장 빠른 옵션입니다. 데이터를 붙여넣거나 업로드하고 대상 형식을 선택하면 즉시 결과를 얻을 수 있습니다.
팁 JSON, YAML, CSV 형식 간 즉시 변환하세요: 데이터 형식 변환 방법. 데이터를 붙여넣고 대상 형식을 선택한 후 결과를 복사하거나 다운로드하세요.
JSON을 다룰 때 특히, 유효성 검사와 보기 좋은 출력을 해주는 포맷터가 매우 유용합니다:
- JSON 포맷터 — JSON 유효성 검사, 포맷팅, 축소
- JSON to CSV 변환기 — JSON 배열을 CSV로 변환
- YAML-JSON 변환기 — YAML과 JSON 간 변환
- CSV 뷰어 — CSV 파일 보기 및 탐색
지금 데이터를 변환하세요:
모든 도구는 무료이며 브라우저에서 바로 작동합니다.