alltools.one
Data
2025-06-14
8 min
alltools.one Team
CSVJSONXMLData FormatAPI

CSV vs JSON vs XML: 적합한 데이터 포맷 선택하기

모든 데이터 교환에는 포맷 선택이 필요합니다. CSV, JSON, XML은 가장 일반적인 세 가지 옵션으로, 각각 뚜렷한 강점을 가지고 있습니다. 잘못된 포맷을 선택하면 파싱 문제, 비대한 페이로드, 개발 시간 낭비로 이어집니다. 이 가이드는 작업에 적합한 도구를 선택하는 데 도움을 줍니다.

포맷 개요

CSV (Comma-Separated Values)

name,age,city
Alice,30,London
Bob,25,Paris
Charlie,35,Tokyo
  • 구조: 평탄, 표 형식 (행과 열)
  • 타입 시스템: 없음 (모든 것이 텍스트)
  • 중첩: 지원하지 않음
  • 크기: 표 형식 데이터에서 가장 작음

JSON (JavaScript Object Notation)

[
  {"name": "Alice", "age": 30, "city": "London"},
  {"name": "Bob", "age": 25, "city": "Paris"},
  {"name": "Charlie", "age": 35, "city": "Tokyo"}
]
  • 구조: 계층적 (객체, 배열)
  • 타입 시스템: 문자열, 숫자, 불리언, null, 객체, 배열
  • 중첩: 네이티브 지원
  • 크기: 중간

XML (eXtensible Markup Language)

<people>
  <person>
    <name>Alice</name>
    <age>30</age>
    <city>London</city>
  </person>
  <person>
    <name>Bob</name>
    <age>25</age>
    <city>Paris</city>
  </person>
</people>
  • 구조: 속성과 요소가 있는 계층적
  • 타입 시스템: XML Schema (XSD)를 통해
  • 중첩: 네이티브 지원
  • 크기: 가장 큼 (장황한 태그)

상세 비교

기능CSVJSONXML
가독성높음 (표 형식)높음낮음 (장황)
파일 크기가장 작음중간가장 큼
파싱 속도가장 빠름빠름가장 느림
중첩아니오
스키마표준 없음JSON SchemaXSD, DTD
주석아니오아니오
메타데이터아니오아니오예 (속성)
스트리밍줄 단위SAX/스트리밍SAX/StAX
바이너리 데이터아니오Base64 문자열Base64 또는 CDATA
네임스페이스아니오아니오

CSV를 사용할 때

적합한 경우:

  • 스프레드시트 데이터 및 데이터베이스 내보내기
  • 데이터 분석 (pandas, R, Excel)
  • 일관된 열을 가진 단순한 평탄 데이터
  • 최대 호환성 (모든 도구가 CSV를 지원)
  • 크기가 중요한 대규모 데이터셋

피해야 할 경우:

  • 데이터가 중첩되거나 계층적 구조를 가짐
  • 여러 데이터 타입을 보존해야 함
  • 열 값에 쉼표, 줄 바꿈, 따옴표가 포함됨 (엣지 케이스)

CSV 편집기로 CSV 데이터를 다루거나 CSV to JSON 변환기로 JSON으로 변환하세요.

JSON을 사용할 때

적합한 경우:

  • 웹 API 통신 (REST, GraphQL 응답)
  • 설정 파일 (package.json, tsconfig.json)
  • 문서 지향 데이터베이스 (MongoDB, CouchDB)
  • 브라우저 환경 (네이티브 JavaScript 파싱)
  • 구조가 다양한 데이터 (일부 레코드에만 있는 필드)

피해야 할 경우:

  • 데이터가 순수하게 표 형식 (CSV가 더 간단하고 작음)
  • XML 기능이 필요 (네임스페이스, 스키마, XSLT)
  • 데이터 파일에 주석이 필요 (대신 YAML 사용)

JSON 포맷터로 JSON을 포맷하고 유효성을 검사하세요.

XML을 사용할 때

적합한 경우:

  • 엔터프라이즈 시스템 (SOAP, XHTML, RSS, SVG)
  • 문서 마크업 (임베디드 구조가 있는 혼합 콘텐츠)
  • 요소와 함께 속성이 필요할 때
  • 강력한 스키마 유효성 검사 요구사항 (XSD)
  • XSLT 변환
  • 산업별 표준 (의료 HL7, 금융 XBRL)

피해야 할 경우:

  • 최신 웹 API 구축 (JSON이 표준)
  • 데이터가 표 형식 (CSV가 더 간단)
  • 파일 크기와 파싱 속도가 중요 (JSON이 더 가벼움)

크기 비교

동일한 1000개 레코드 데이터셋:

포맷파일 크기파싱 시간 (상대적)
CSV45 KB1x (기준)
JSON85 KB1.5x
XML140 KB3x

XML의 장황함 — 여는 태그, 닫는 태그, 모든 값에 반복되는 요소 이름 — 은 CSV에 비해 크기를 대략 3배로 만듭니다.

마이그레이션 패턴

CSV에서 JSON으로

import csv, json

with open('data.csv') as f:
    reader = csv.DictReader(f)
    data = list(reader)

with open('data.json', 'w') as f:
    json.dump(data, f, indent=2)

JSON에서 CSV로

import csv, json

with open('data.json') as f:
    data = json.load(f)

with open('data.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

XML에서 JSON으로

import xmltodict, json

with open('data.xml') as f:
    data = xmltodict.parse(f.read())

with open('data.json', 'w') as f:
    json.dump(data, f, indent=2)

현대의 동향

지난 10년간의 추세는 분명합니다: JSON이 웹 API와 설정에서 XML을 크게 대체했습니다. 하지만 CSV는 분석 및 비즈니스 맥락에서 데이터 교환의 주류로 남아있으며, XML은 엔터프라이즈 및 정부 시스템에서 지속됩니다.

최신 대안:

  • YAML: 사람 친화적인 설정 (설정에서 JSON과 XML 모두 대체)
  • Protocol Buffers / MessagePack: 고성능 시스템을 위한 바이너리 포맷
  • Parquet / Arrow: 빅데이터 분석을 위한 컬럼형 포맷

JSON과 YAML의 구체적인 비교는 YAML vs JSON 가이드를 참조하세요.

자주 묻는 질문

데이터 손실 없이 이러한 포맷 간 변환할 수 있나요?

CSV에서 JSON으로의 변환은 평탄 데이터에 대해 무손실입니다 (타입은 손실됨 — CSV에서 숫자는 문자열이 됨). JSON에서 CSV로는 계층 구조가 손실됩니다 (중첩 객체를 평탄화해야 함). XML에서 JSON으로는 대부분 무손실이지만 속성과 혼합 콘텐츠는 까다로울 수 있습니다. 항상 특정 데이터로 왕복 변환을 테스트하세요.

새 API에 어떤 포맷을 사용해야 하나요?

JSON입니다. 네이티브 브라우저 지원, 우수한 도구, 가독성과 크기의 최적 균형을 갖춘 현대 웹 API의 사실상 표준입니다. 유효성 검사에는 JSON Schema를 사용하세요. 유일한 예외는 XML을 요구하는 레거시 엔터프라이즈 시스템과 통합하는 경우입니다.

관련 리소스

Published on 2025-06-14
CSV vs JSON vs XML: Choosing the Right Data Format | alltools.one