1GB짜리 CSV는 평범한 표 형식 데이터라면 대략 500만~1,000만 행입니다. 기가바이트보다 이 숫자가 더 중요합니다. 스프레드시트 시트 하나에 들어가는 행 수의 이미 다섯 배이기 때문입니다. 그래서 가장 먼저 받아들여야 할 것은 "엑셀로 열기"가 애초에 선택지에 없었다는 점입니다.
그다음에 무엇을 쓸지는 질문 하나에 달려 있습니다. 파일을 들여다봐야 합니까, 아니면 파일에서 답을 뽑아내야 합니까?
- 답이 필요할 때 — 합계, 필터, 조인, 중복 개수: DuckDB입니다. 명령어 한 줄, 10초, 가져오기(import) 과정이 없습니다.
- 들여다봐야 할 때 — 스크롤하고, 검색하고, 데이터의 모양을 훑어보기: 스트리밍으로 읽는 뷰어를 씁니다. Windows에서는 EmEditor, 어디서나
less, 파일이 휴대폰에 있다면 휴대폰 앱입니다. - 편집하고 다시 저장해야 할 때: 가장 어렵고 좋은 답도 가장 적습니다. 아래에서 다룹니다.
비교표
시간은 SSD가 달린 보통 16GB 노트북에서 1GB, 약 800만 행 파일을 열었을 때의 대략적인 값입니다. 벤치마크가 아니며, 열 구성과 디스크에 따라 달라집니다. 달라지지 않는 것은 마지막 열입니다.
| 도구 | 1GB를 열 수 있나? | 첫 행까지 시간 | 최대 RAM | 비용 |
|---|---|---|---|---|
| Excel | 불가 — 최대 1,048,576행 | — | — | 유료 |
| Excel + Power Query | 가능(로드 단계로) | 수 분 | 높음 | 유료 |
| Google Sheets | 불가 — 1,000만 셀, 업로드 약 100MB | — | — | 무료 |
| Numbers | 불가 — 100만 행, 그 전에 이미 느려짐 | — | — | 무료 |
| DuckDB | 가능 | 약 1초 | 약 200MB | 무료 |
| Python + pandas | 가능(chunksize 사용 시) | 30초 이상 | 순진하게 쓰면 5–10GB | 무료 |
| Python + Polars | 가능 | 약 5초 | 약 1.5GB | 무료 |
| EmEditor(Windows) | 가능, 여유롭게 | 약 5초 | 낮음 | 유료 |
| VS Code | 버거워함 | 30초 이상 | 높음 | 무료 |
less / head / awk | 가능 | 즉시 | 거의 0 | 무료 |
| OpenRefine | 가능, 느림 | 수 분 | 높음 | 무료 |
| 휴대폰 CSV 앱 | 가능(대용량용으로 만든 경우) | 수 초 | 자동 관리 | 무료 플랜 |
이 중 두 줄은 함정입니다. Google Sheets는 1,000만 셀을 내세워 꽤 가까워 보이지만, 20열짜리 파일은 50만 행에서 그 한도에 닿고, 업로드 제한이 그보다 훨씬 먼저 막아 버립니다. pandas는 파일을 선뜻 열어 주지만, 모든 텍스트 열을 Python 객체로 저장하기 때문에 파일 크기의 여덟 배나 되는 RAM을 씁니다. "열리긴 했는데 노트북이 죽었다"는 후기의 정체가 바로 이 스왑 폭주입니다.
실제로 하려는 일에 따라
답이 필요할 때
DuckDB가 압도적입니다.
duckdb -c "SELECT region, COUNT(*), SUM(amount) FROM 'big.csv' GROUP BY region"
파일을 병렬로 읽고, 통째로 올리지 않고 스트리밍으로 처리하며, 쿼리의 작업 영역을 크게 넘는 메모리를 쓰지 않습니다. 800만 행에 대한 GROUP BY도 몇 초면 끝납니다. 타입 지정, 두 파일 조인, 결과 내보내기까지 자세한 방법은 데이터베이스 없이 CSV에서 SQL 쿼리 실행하기에 있습니다.
Python을 계속 쓰고 싶다면 scan_csv를 쓰는 Polars(지연 실행으로, 읽기 전에 쿼리 전체를 계획합니다)나, chunksize와 dtype 매핑을 명시한 pandas를 쓰세요. 순진한 pd.read_csv('big.csv')는 피해야 합니다.
들여다봐야 할 때
Windows에서는 EmEditor. 대용량 파일 편집기 중 유일하게 제대로 버티며, 수 GB짜리 CSV를 정렬과 필터가 되는 그리드로 열어 줍니다. 유료지만 이 문제가 반복된다면 값어치를 합니다.
어디서나 셸. 큰 파일을 처음 5분 동안 다룰 때 과소평가되는 도구입니다.
head -5 big.csv # what are the columns
wc -l big.csv # how many rows really
awk -F, 'NR<=1000' big.csv > sample.csv # a slice you can open normally
less -S big.csv # scroll it, no line wrapping
1,000행짜리 샘플을 만들어 그것을 엑셀에서 여는 편이, 전체를 여는 어떤 도구보다 "이 파일에 뭐가 들었지?"에 빨리 답해 줍니다.
VS Code와 Notepad++는 안 됩니다. 둘 다 파일 전체를 텍스트로 메모리에 올립니다. 열기는 하지만 느리고, 경고가 뜨고, 끝에 가서도 쓸 만한 표 보기가 없습니다.
파일이 휴대폰에 있을 때
1GB는 여기서 어려운 경우입니다. 휴대폰은 노트북보다 RAM이 적고, 앱이 쥘 수 있는 양의 제한도 더 엄격합니다. 휴대폰에서 1GB 전체를 편하게 여는 앱은 없으니, 그렇다고 주장하는 앱은 믿기 전에 직접 시험해 보세요. 휴대폰 앱이 잘하는 것은 그 바로 아래 구간입니다. 휴대폰 스프레드시트가 조용히 잘라 버리는, 100–500MB에 수십만 행짜리 내보내기 파일입니다.
큰 파일을 자르지 않고 열고, SQL이나 일상 언어로 데이터에 대해 질문할 수 있습니다. 스크롤하기엔 너무 큰 파일에서 보통 원하는 것이 바로 이것입니다. iOS와 Android.
기능중요한 파일을 휴대폰 앱에 맡기기 전에, 이 글 마지막 섹션의 확인 방법을 따라 해 보세요.
편집하고 다시 저장해야 할 때
"편집"은 파일을 붙들고 있다가 다시 통째로 써야 한다는 뜻이라, 이 경우에는 정직한 답이 가장 적습니다.
- 몇 군데만 정확히 고칠 때 — 값 하나 수정, 열 하나 삭제: DuckDB나
awk로 새 파일을 만드세요. 어떤 대화형 도구보다 빠르고 원본도 그대로 남습니다. - Windows에서 본격적인 대화형 편집: EmEditor.
- 그 외 환경에서 본격적인 대화형 편집: 먼저 파일을 나누세요.
split -l 1000000 big.csv part_로 스프레드시트가 담을 수 있는 크기로 쪼갤 수 있지만, 나중에 다시 합쳐야 합니다(cat으로 되지만, 반복된 헤더 행은 지우세요). - 약 50만 행 이하라면 휴대폰 편집기로 바로 다룰 수 있습니다.
50만 행 파일을 스프레드시트처럼 편집하고, 저장할 때 모든 행을 다시 씁니다. 무료 버전도 같습니다. iOS와 iPadOS.
기능문제 자체를 변환해서 없애기
파일을 두 번 넘게 만질 거라면, CSV로 다루는 것을 그만두세요.
duckdb -c "COPY (SELECT * FROM 'big.csv') TO 'big.parquet'"
Parquet은 열 지향이고, 타입이 있고, 압축되어 있습니다. 1GB CSV가 100–200MB로 줄고, 몇 개 열만 훑는 쿼리는 5~20배 빨라지며, 씨름하던 타입도 이제 파일에 저장됩니다. DuckDB, Polars, pandas 모두 바로 읽을 수 있습니다. 이 글에서 가장 가성비 좋은 10초입니다.
도구가 정말 전부 열었는지 확인하기
대용량 CSV를 일부만 열고도 어디까지인지 알려 주지 않는 도구가 많습니다. 파일에서 결론을 내기 전에 확인하세요.
- 먼저 도구 밖에서 행 수를 세세요:
wc -l big.csv. 헤더 몫으로 1을 뺍니다. - 도구에서 마지막 행으로 이동해서 개수를 비교합니다.
- 마지막 행의 내용을
tail -1 big.csv와 비교합니다.
일치하지 않으면 그 도구가 잘라낸 것입니다. 그렇게 얻은 결론(합계, 최댓값, "그 지역 주문은 없다")은 화면 어디에도 표시가 없는 채로 틀린 값이 됩니다. 대용량 파일에서 진짜 위험은 충돌보다 이 조용한 잘림입니다. 충돌은 적어도 정직하니까요.
실패한 것이 특히 Excel일 때
헷갈리기 쉬운 이웃한 두 문제가 있습니다. Excel이 파일을 거부했거나 일부만 보여 줬다면 행 수 한도 문제이고, 우회 방법은 Excel에서 열리지 않는 대용량 CSV 파일 여는 방법에서 다룹니다. Excel이 파일을 열긴 했는데 멈추거나 응답 없음이 되거나 꺼졌다면 원인이 다른 별개의 문제이며, Excel이 대용량 파일에서 죽는 이유에서 설명합니다.