모두의 포맷, 누구의 것도 아닌 포맷
Comma-separated values 는 지구에서 제일 널리 통하는 데이터 교환 포맷이야. 모든 도구가 읽고, 모든 분석가가 열고, 그런데 진짜 spec 은 없어 (RFC 4180 은 사후에 정리한 기술이지 구속력 있는 표준이 아니야). 그리고 바로 그 만능성 때문에, 앞으로 만질 어떤 포맷보다 CSV 에서 silent corruption 이 제일 많이 나와.
CSV 가 안 담는 것
- Type. Disk 위에선 전부 string 이야. 읽는 쪽이 매번 추측해야 해:
123은 정수였을까? 앞자리 0 이 붙은00123(미국 ZIP 코드) 이었을까?2026-04-30은 날짜였을까 string 이었을까? - Encoding. 캐릭터 encoding 이 파일에 안 적혀. UTF-8, Latin-1, Windows-1252 — 전부 valid CSV 야. 잘못 열면 악센트 문자가 mojibake 로 깨져.
- Schema. 헤더 row 는 있어도 그만 없어도 그만. Column 순서가 유일한 약속이야. Upstream 이 column 하나 추가하면 위치로 참조하던 downstream 코드가 소리 없이 깨져.
- Quoting 규칙. 값 안의 comma 는 quote 가 필요하고, quoted 값 안의 quote 는 escape 가 필요해. Writer 마다 그 디테일이 미묘하게 달라.
- 줄 끝.
\nvs\r\nvs\r. Windows Excel 은 이거, Linux pandas 는 저거. 대부분은 괜찮아. 가끔은 참사야.
CSV 가 여전히 옳은 선택일 때
CSV 가 괜찮은 경우: 사람이 눈으로 훑는 입력, 팀 간 일회성 전달, 작은 데이터셋 보관, 받는 쪽이 콕 집어 CSV 로 달라는 경우. CSV 가 틀린 경우: 스케줄로 도는 거, 몇백 MB 넘는 거, type 을 안정적으로 왕복시켜야 하는 거, 나중에 join 할 거.