CSV 는 모두가 가졌고 아무도 안 가진 포맷
Comma-separated values 는 지구상 가장 universal 한 데이터 교환 포맷. 모든 도구가 읽고, 모든 분석가가 열고, 진짜 spec 도 없어 (RFC 4180 은 사후 description, binding 표준 아님). 그 universality 가 정확히 CSV 가 다루게 될 어떤 포맷보다 byte 당 silent 데이터 corruption 을 가장 많이 만드는 이유야.
CSV 가 안 담는 것
- Type. 모든 게 disk 에 string. 누가 읽든 추측해야 해:
123이 정수였나? 앞 0 있는00123(US ZIP 코드) 였나?2026-04-30이 날짜였나 string 이었나? - Encoding. 캐릭터 encoding 이 파일에 저장 안 돼. UTF-8, Latin-1, Windows-1252 — 다 valid CSV. 잘못 열면 악센트가 mojibake 돼.
- Schema. 헤더 row 가 optional. Column 순서가 유일한 contract. Upstream 에서 column 추가하면 position 참조하는 downstream 코드가 silent 하게 깨져.
- Quoting 규칙. 값 안의 comma 는 quote 필요. Quoted 값 안의 quote 는 escape 필요. Writer 들이 디테일에서 disagree.
- 줄 끝.
\nvs\r\nvs\r. Windows Excel 은 하나, Linux pandas 는 다른 거. 대부분 OK; 가끔 catastrophic.
CSV 가 여전히 옳은 선택일 때
CSV 가 OK 인 경우: 사람-eyeballable 입력, 팀 간 일회성 transfer, 작은 데이터셋 archival, audience 가 명시적으로 요구하는 경우. CSV 가 틀린 경우: 스케줄로 도는 거, 몇백 MB 넘는 거, type 을 안정적으로 round-trip 해야 하는 거, 나중에 join 할 거.