- CSV를 대체할 "우월한" 형식들이 자주 소개되지만, 대부분은 편향된 비교를 기반으로 CSV의 진정한 강점을 간과함
- 이 글은 CSV가 완벽하다는 것이 아니라, 과소평가된 장점을 조명하고자 함
- CSV를 미워하는 것이 멋져 보이는 분위기에 반해 CSV의 진가를 되새김
1. CSV는 극도로 단순함
- CSV의 정의는 제목 그대로: "쉼표로 구분된 값"
- 행은 줄바꿈으로, 열은 쉼표로 구분됨
- 값에 쉼표나 줄바꿈이 있을 경우에는 따옴표로 감싸고, 따옴표 자체는 이중 따옴표로 표현
- 복잡한 명세 없이 누구나 직관적으로 이해하고 사용할 수 있음
- 다만, 정확한 파싱을 위해 전용 CSV 파서 사용은 여전히 필요함
2. CSV는 집단적인 아이디어임
- 소유자가 없음, 사유화되지 않음
- RFC 4180이 존재하지만, 대부분은 이를 참고용으로만 여김
- 전 세계 개발자들이 암묵적으로 공유하는 공통 규칙 기반의 자유로운 형식임
3. CSV는 텍스트임
- JSON, YAML, XML처럼 사람이 읽을 수 있는 순수 텍스트 포맷
- 어떤 텍스트 에디터로도 열 수 있으며, 별도 도구 없이도 내용을 확인 가능
- 인코딩 방식도 자유롭게 선택 가능
4. CSV는 스트리밍에 최적화됨
- 한 줄씩 읽는 구조이기 때문에 메모리 소모가 매우 적음
- 간단한 코드만으로도 수 기가바이트의 데이터를 몇 KB의 메모리만으로 처리 가능
- Parquet 같은 열 지향 포맷은 스트리밍 처리가 어렵고, 복잡한 버퍼링이 필요함
- 단점은 특정 열만 보고 싶을 때에도 전체 행을 읽어야 한다는 점
5. CSV는 쉽게 덧붙일 수 있음
- 파일을 append 모드(
a+)로 열어 새로운 행을 끝에 추가하는 것이 매우 쉬움 - 반면 Parquet 등의 열 지향 포맷은 행 추가가 비효율적이고 복잡함
6. CSV는 동적 타입을 지원함
- 고정 타입이 없어서 유연하게 데이터를 해석 가능
- 예: JavaScript는 64비트 정수를 제대로 표현하지 못하지만 CSV는 이런 제약 없이 사용 가능
- 언어 간 호환성과 유연성에서 이점이 있음
- 하지만 잘못 해석하면 오류 발생 가능 → 사용 시 주의 필요
- 고성능이 요구될 경우 텍스트를 디코딩하지 않고 바이너리 수준에서 직접 처리하는 것도 가능
7. CSV는 간결함
- 헤더가 파일 맨 앞에만 존재하기 때문에 형식 반복이 거의 없음
- JSON, XML은 키 반복으로 오버헤드가 큼
- 문자열 표현도 이미 간결하며, 포맷 자체의 오버헤드(쉼표, 따옴표 등)가 매우 적음
8. 뒤집힌 CSV도 여전히 유효함
- CSV는 바이트 단위로 뒤집어도 여전히 유효한 CSV임
- 이는 이중 따옴표 이스케이프 방식 덕분으로, 팔린드롬 형태의 이스케이프 방식이기 때문
- 이 특성 덕분에 CSV 파일의 끝부분을 매우 효율적으로 읽을 수 있음
- 예: 중단된 프로세스를 재개할 때 파일의 마지막 몇 줄만 읽어 재시작 가능
9. Excel은 CSV를 싫어함
- Excel이 불편하게 여기는 형식이라면, 오히려 올바른 길을 가고 있다는 신호일 수도 있음