한 문장이면 대부분 설명됩니다. CSV는 쉼표가 들어 있는 텍스트 파일이고, XLSX는 스프레드시트 프로그램만 이해하는 XML을 압축해 묶어 둔 폴더입니다. 실제로 체감되는 차이는 거의 다 여기서 나옵니다.
중요한 질문은 대개 "어느 쪽이 더 낫나"가 아닙니다. "이 파일을 누구에게 넘기고, 가는 도중에 무엇이 살아남을까"입니다.
빠른 답
- 프로그램에 데이터를 넘길 때(가져오기, API, 스크립트, 데이터베이스): CSV.
- 사람에게 문서를 넘길 때(서식, 수식, 여러 시트): XLSX.
- 파일이 클 때(대략 100MB 또는 50만 행 이상): CSV.
- 값이 넣은 그대로 돌아와야 할 때(우편번호, 상품 코드, 전화번호, 긴 ID): CSV. 단, 그 사실을 꼭 알려 주세요. 값을 망가뜨리는 쪽은 받는 쪽의 스프레드시트이기 때문입니다.
각각의 정체
CSV는 한 줄이 한 행이고, 값은 쉼표로 구분하며, 쉼표가 들어간 값은 따옴표로 감쌉니다. 텍스트 편집기로 읽을 수 있고, echo로도 쓸 수 있습니다. RFC 4180이라는 명세가 있지만 일부는 무시하는 것이 거의 통념이라서, 나라마다 구분자가 다르고 깨진 CSV가 하나의 독립된 주제가 되었습니다.
저장되는 것은 값뿐입니다. 자료형도, 서식도, 수식도, 색도, 두 번째 시트도 없습니다. 007이 든 셀과 숫자 7이 든 셀은 저장되는 순간 구별할 수 없습니다. 둘 다 쉼표 사이의 문자일 뿐이고, 그 뒤에 어떻게 되느냐는 전적으로 읽는 프로그램에 달려 있습니다.
XLSX는 ZIP 압축 파일입니다. 확장자를 .zip으로 바꿔 풀면 XML이 담긴 디렉터리가 나옵니다. 워크시트마다 파일 하나, 공유 문자열 테이블, 스타일 테이블, 관계 파일이 들어 있습니다. 스프레드시트가 아는 것은 모두 저장합니다. 셀 자료형, 숫자 서식, 수식과 캐시된 계산 결과, 차트, 조건부 서식, 틀 고정, .xlsm 변형이라면 매크로까지 포함됩니다.
나란히 비교
| CSV | XLSX | |
|---|---|---|
| 파일 종류 | 일반 텍스트 | 압축된 XML 아카이브 |
| 행 수 제한 | 없음 | 시트당 1,048,576 |
| 열 수 제한 | 없음 | 16,384 |
| 여러 시트 | 불가 | 가능 |
| 수식 | 불가 | 가능 |
| 서식, 차트 | 불가 | 가능 |
| 데이터 형식 | 없음. 모두 텍스트 | 셀마다 명시 |
| 크기, 100만 행 × 10열 | 약 150MB | 약 40MB |
| 텍스트 편집기에서 열기 | 가능 | 불가 |
| 20년 뒤에도 읽을 수 있나 | 거의 확실 | 아마도 |
| git diff | 깔끔하게 표시 | 전혀 볼 수 없음 |
이 중 두 항목은 좀 더 설명이 필요합니다.
크기, 그리고 답이 뒤집히는 이유
XLSX는 압축되므로 같은 데이터라면 디스크에서는 보통 더 작고, 3~4배 작은 경우도 흔합니다. 그래서 큰 데이터에는 CSV가 맞지 않는 것처럼 보이지만, 실제로는 반대입니다.
큰 파일에서 중요한 것은 디스크 크기가 아니라 열 때 일어나는 일입니다. XLSX는 첫 행을 보기 전에 압축을 풀고 객체 모델로 파싱해야 하며, 전체가 메모리에 올라갑니다. CSV는 한 줄씩 읽을 수 있어서, 통째로는 메모리에 올릴 수 없는 5GB 파일도 스트리밍으로 처리할 수 있습니다. "이 파일을 DuckDB로 처리하세요"라는 답이 늘 CSV로 시작하는 이유이고, 위의 행 수 제한이 중요한 이유이기도 합니다. 300만 행 내보내기는 크기와 상관없이 한 시트짜리 XLSX가 될 수 없습니다.
자료형, 그리고 데이터를 갉아먹는 왕복
사람들의 수고를 실제로 늘리는 것은 이 차이입니다.
CSV에는 자료형이 없으므로 스프레드시트는 가져올 때 추측해야 합니다. 이 추측은 일관되고, 늘 같은 네 가지 방식으로 일관되게 틀립니다.
01234가1234가 됩니다. 우편번호 앞의 0이 사라집니다.4019283746501928이4.01928E+15가 됩니다. ID가 지수 표기로 바뀌고, 뒤쪽 자릿수는 숨겨진 것이 아니라 사라집니다.3/4/2026이 지역 설정에 따라 3월 4일이 되기도, 4월 3일이 되기도 합니다.MAR1,SEPT2,DEC5가 날짜가 됩니다. 2020년에 유전자 연구자들이 이 때문에 사람 유전자 27개의 이름을 바꿨습니다.
CSV를 Excel에서 열고 다시 CSV로 저장하면 이 변경은 파일에 영구히 남습니다. CSV가 데이터를 잃은 것이 아닙니다. 그것을 연 스프레드시트가 잃게 한 것입니다. 그래서 CSV는 스프레드시트 문서가 아니라 CSV로 읽어 주는 도구로 읽는 편이 좋습니다.
파일을 가져오기 하지 않고 CSV로 읽습니다. 자료형 강제 변환도, 지역 설정에 따른 날짜 추측도 없고, 적힌 그대로의 값에 SQL이나 일상 언어로 질문할 수 있습니다.
기능상황별 선택
CSV를 쓰는 경우:
- 상대편이 자동화된 무언가일 때. 데이터베이스 가져오기, 스크립트, API 등입니다.
- 파일이 크거나 계속 커질 때.
- 데이터가 바이트 단위로 정확히 왕복해야 할 때.
- 버전 관리에 넣고 무엇이 바뀌었는지 보고 싶을 때.
- 소프트웨어에 대한 가정 없이 10년 뒤에도 읽을 수 있어야 할 때.
XLSX를 쓰는 경우:
- 사람이 열어 보고, 레이아웃도 전달할 내용의 일부일 때.
- 수식이 살아 있어야 할 때.
- 데이터가 정말로 여러 시트로 이루어져 있을 때.
- 셀 자료형이 중요한데 무엇으로 열릴지 통제할 수 없을 때. 이것이 XLSX를 고르는 솔직한 이유입니다. 받는 쪽이 잘못 해석할 수 없는 자료형입니다.
- 차트, 필터, 조건부 서식이 파일 안에 있어야 할 때.
둘 다 쓰지 않는 경우: 데이터가 스프레드시트보다 크고 반복해서 조회할 때입니다. 이것은 Parquet이나 데이터베이스가 할 일입니다. Parquet은 열 지향이고, 자료형이 있고, 압축되어 있으며, DuckDB와 pandas 모두 그대로 읽습니다.
흔히 잘못 알고 있는 것들
"CSV는 Excel 형식이다." 아닙니다. Excel은 그저 열 수 있을 뿐이고, 그래서 위와 같은 자료형 변환이 일어납니다. CSV는 Excel보다 20년쯤 앞섭니다.
"XLS와 XLSX는 같은 것이다." XLS는 2007년 이전의 바이너리 형식으로, 오래된 시스템에서 지금도 나옵니다. XLSX는 OOXML 기반의 후속 형식입니다. .xls를 받았다면 변환하세요. 최신 Excel은 경고와 함께 열고, 일부 도구는 아예 열지 않습니다.
"XLSX는 제대로 된 형식이라 더 안전하다." XLSX에는 매크로, 외부 링크, DDE 페이로드가 들어갈 수 있습니다. CSV는 동작하지 않는 텍스트이지만 수식 인젝션은 예외로, =, +, -, @로 시작하는 값은 열어 본 스프레드시트가 실행합니다. 둘 다 주의가 필요하며, 방향이 다를 뿐입니다.
"변환해도 손실이 없다." XLSX에서 CSV로 바꾸면 모든 수식(마지막으로 계산된 값은 남습니다), 두 번째 이후의 시트, 모든 서식이 사라집니다. CSV에서 XLSX로 바꾸면 데이터에 없던 자료형이 붙고, 값이 망가지는 것이 바로 여기서입니다. 휴대폰에서 CSV를 Excel로 변환하기에서 손상 없이 하는 방법을 다룹니다.
들일 만한 습관 하나
코드, ID, 날짜가 들어 있는 CSV를 보낼 때는 메시지에 그 사실을 적으세요. "가져오기 기능으로 열고 ID 열을 텍스트로 지정해 주세요." 메일 두 줄이면 사무 업무에서 가장 흔한 데이터 품질 사고를 막을 수 있고, 형식 선택만으로는 이를 막을 수 없습니다.