JSON과 CSV는 구조화된 데이터를 다루는 가장 대표적인 플레인 텍스트 형식입니다. JSON은 계층적·중첩 데이터 구조에 강하고, CSV는 평탄한 표 형태 데이터에서 타의 추종을 불허합니다.
둘 사이의 선택은 데이터의 형태, 도구 요구사항, 그리고 사람이 읽기 쉬운 것과 기계가 처리하기 효율적인 것 중 무엇이 우선인지에 따라 달라집니다.
Comparison Table
| 특성 | JSON | CSV |
|---|---|---|
| 데이터 구조 | 계층적 (중첩 객체) | 평탄 (행과 열) |
| 데이터 타입 | 문자열, 숫자, 불리언, null, 배열, 객체 | 모든 것이 문자열 |
| 스키마 | JSON Schema (선택적) | 없음 (RFC 4180은 구문 규칙만) |
| 가독성 | 양호 (포매팅 시) | 표 형태 데이터에 탁월 |
| 파일 크기 | 큼 (레코드마다 키가 반복) | 작음 (헤더 한 번만) |
| 스트리밍 | NDJSON (한 줄에 객체 하나) | 기본 지원 (줄 단위 처리) |
| 스프레드시트 지원 | 임포트/매핑 필요 | Excel에서 바로 열기 가능 |
| API 표준 | 지배적 (REST, GraphQL) | API에서는 드묾 |
Detailed Analysis
핵심 차이는 데이터 형태입니다. CSV는 본질적으로 표(행과 열)이며, 스프레드시트와 같습니다. 모든 레코드가 동일한 필드를 가집니다. 매출 기록, 센서 데이터, 사용자 목록처럼 자연스럽게 표를 이루는 데이터셋에는 CSV가 제격입니다.
JSON은 중첩과 혼합 타입을 지원합니다. 예를 들어 API 응답에 사용자 객체 안에 주소 하위 객체가 있고, 주문 배열 안에 각 주문의 항목 배열이 담기는 구조를 자연스럽게 표현할 수 있습니다. 이를 CSV로 나타내려면 평탄화하거나 여러 파일로 나눠야 하므로 본래의 구조가 사라집니다.
파일 크기 면에서는 평탄한 데이터에 CSV가 유리합니다. JSON은 레코드마다 키 이름을 반복하기 때문입니다. 20개 열에 10,000행이면 JSON에는 200,000개의 중복 키 문자열이 생기지만, CSV는 헤더 행에서 열 이름을 한 번만 사용합니다.
대용량 데이터셋 스트리밍에는 두 형식 모두 해법이 있습니다. CSV는 본래 줄 단위로 스트리밍할 수 있고, JSON에는 NDJSON(Newline-Delimited JSON)이 있어 한 줄에 완전한 JSON 객체 하나씩 스트림 처리가 가능합니다.
도구 생태계는 분야에 따라 다릅니다. 데이터 과학자와 스프레드시트 사용자는 CSV를, 웹 개발자와 API 소비자는 JSON을 선호합니다. 대부분의 최신 도구는 두 형식 모두 지원합니다.
When to Use JSON
- API 응답 및 웹 서비스 통신
- 중첩·계층적 데이터 구조
- 타입이 있는 값의 설정 파일
- 혼합 타입 데이터 (문자열, 숫자, 불리언, null)
- NoSQL 데이터베이스 임포트/익스포트
- 표 형태보다 데이터 구조가 중요한 모든 상황
When to Use CSV
- 일관된 열 구조의 평탄한 표 형태 데이터
- 스프레드시트 가져오기/내보내기 및 Excel 워크플로
- 데이터베이스 테이블 덤프 및 마이그레이션
- 파일 크기가 중요한 대용량 데이터셋
- 비기술 사용자와의 간단한 데이터 교환
- 로그 파일 및 시계열 데이터
Conclusion
중첩 구조, 타입 정보, API 지향 데이터에는 JSON을, 평탄한 표 형태 데이터, 특히 스프레드시트 호환이 중요한 경우에는 CSV를 사용하면 됩니다. 실무에서는 두 형식을 함께 쓰는 경우가 많습니다. API가 JSON으로 데이터를 반환하면, 이를 CSV로 변환해 스프레드시트에서 분석하는 식입니다.