대용량 CSV, 엑셀로 열려다 세 번 실패한 뒤
대용량 CSV를 받았을 때 우리가 하는 행동은 늘 같아요. 더블클릭. 그리고 기다림. 정산 시스템에서 내려받은 파일 하나가 100MB를 넘어가면 엑셀은 응답 없음에 빠지죠.
재미있는 건 그다음이에요. 이 파일과 씨름하는 사람은 대체로 세 번 막힙니다. 그리고 세 번의 실패는 각각 다른 것을 알려줘요. 마지막 실패에 도달해서야 애초에 접근 방법이 틀렸다는 게 드러나고요.
- 대용량 CSV에서 겪는 세 증상의 원인을 각각 구분할 수 있어요.
- 엑셀로 열어 저장하면 왜 위험한지 근거와 함께 알 수 있어요.
- 여는 대신 뽑아내는 방식으로 바꾸는 법을 알 수 있어요.
첫 번째 실패: 열리기는 하는데 쓸 수가 없다
몇 분을 기다리면 열리기는 해요. 문제는 그때부터입니다. Ctrl+F 한 번에 또 한참을 멈추고, 열이 수십 개라 원하는 열을 찾으려면 옆으로 한없이 스크롤해야 하죠.
여기서 보통 "컴퓨터가 느린가" 하고 넘어가는데, 원인은 사양이 아니에요. 엑셀은 파일 전체를 화면에 올리는 도구거든요. 그래서 파일이 커질수록 느려지는 게 당연하고, 사양을 올려도 곡선의 기울기만 조금 완만해집니다. 필요한 건 서너 개 열과 조건에 맞는 몇천 행뿐인데, 백만 행을 통째로 올려놓고 그 안을 헤매고 있는 셈이에요.
두 번째 실패: 데이터가 중간에서 잘려 있다
이게 가장 위험한 실패예요. 앞의 것은 불편할 뿐이지만, 이건 모르고 지나갈 수 있거든요.
엑셀 워크시트에는 정해진 한계가 있어요. Microsoft 공식 문서 기준으로 최대 1,048,576행 × 16,384열이고, 구형 xls 형식은 65,536행입니다. CSV 파일 자체는 그냥 텍스트라 행 수 제한이 없으니, 한계를 넘는 파일이 실무에 흔히 돌아다녀요.
| 형식 | 표시 가능한 최대 행 |
|---|---|
| 엑셀 xls (구형) | 65,536행 |
| 엑셀 xlsx (현재) | 1,048,576행 |
| CSV 파일 자체 | 제한 없음 (텍스트) |
한계를 넘는 파일을 열면 104만 행까지만 로드되고 나머지는 화면에 없어요. 그런데 화면은 멀쩡해 보입니다. 여기서 무심코 저장하면 잘린 만큼 빠진 파일이 되고, 원본을 덮어썼다면 되돌릴 방법이 없어요.
원본 CSV에는 데이터가 그대로 남아 있어요. 잘린 건 화면에 올라온 사본뿐이죠. 그래서 규칙은 단순해요. 큰 파일은 열어서 저장하지 않고, 원본에서 필요한 것만 꺼냅니다. 확인이 필요하면 원본을 복사해 두고 작업하세요.
세 번째 실패: 한글이 외계어로 보인다
겨우 열었는데 이름과 주소가 전부 깨져 있으면 파일이 망가진 줄 알고 다시 내려받게 돼요. 그런데 다시 받아도 똑같죠.
파일이 손상된 게 아니라 글자를 해석하는 방식이 안 맞은 것이거든요. 한국어 환경은 UTF-8과 EUC-KR 계열이 섞여 쓰여서, 저장된 방식과 다른 기준으로 열면 깨져 보여요. 원본은 멀쩡하고 여는 쪽만 바꾸면 되는 문제예요.
다만 여기에 함정이 하나 더 있어요. 깨진 상태에서 저장해 버리면 그때는 진짜로 깨진 파일이 됩니다. 화면이 이상하면 저장 전에 인코딩부터 확인하세요.
대용량 CSV, 세 번 막히고 나서야 보이는 것
세 실패를 나란히 놓으면 공통점이 드러나요. 전부 "파일 전체를 열려고 해서" 생긴 문제입니다. 느린 것도, 잘리는 것도, 깨지는 것도 다 여는 과정에서 벌어지죠.
그래서 방향을 바꿉니다. 열지 않고 조건에 맞는 행이나 필요한 열만 골라 새 파일로 받는 거예요. 원본이 아무리 커도 결과물은 가볍고, 잘릴 일도 없습니다.
파워쿼리나 파이썬으로도 되지만 배우는 시간이 만만치 않죠. 급한 실무라면 대용량 CSV 데이터 추출에 파일을 올리는 쪽이 빠릅니다. 인코딩을 자동 감지하고, 데스크톱 기준 250MB까지 처리돼요. 모바일은 브라우저가 쓸 수 있는 메모리가 작아 30MB로 제한되니 큰 파일은 데스크톱에서 여시고요.
조건 컬럼과 값을 지정하면 일치하는 행만 뽑아냅니다. 주문 내역에서 특정 상품코드가 든 행만, 정산 내역에서 특정 가맹점 건만 골라내는 식이죠. 값을 비우면 전체 행이 대상이라 몇 건인지 세는 용도로도 쓸 수 있어요.
수십 개 열 중 필요한 것만 여러 개 골라 그 열들만 담긴 파일로 받습니다. 주문번호·금액·날짜만 뽑아 보고서에 붙이는 경우가 대표적이에요. 중복을 걷어낸 고유값만 뽑을 수도 있어서 어떤 값들이 들어 있는지 파악할 때도 유용하고요.
고객 정보가 든 파일이라면
주문·회원 데이터에는 이름·연락처·주소가 들어 있는 경우가 많아요. 파일을 서버로 업로드해 처리하는 서비스라면 그 데이터가 외부로 나가는 것이니, 올리기 전에 처리 방식을 확인하는 습관이 필요합니다. 브라우저 안에서만 처리되는지 여부가 판단 기준이에요. 여기서 소개한 추출 도구는 파일이 브라우저 밖으로 나가지 않아요.
추출한 결과를 서류로 제출해야 한다면 PDF 합치기로 다른 증빙과 한 파일로 묶는 방법도 있어요. 서류를 묶는 순서는 증빙 서류 PDF 글에 정리해 뒀고요.
한 줄로 정리하면
대용량 CSV 앞에서 우리가 실제로 원했던 건 "파일 열기"가 아니라 그 안의 몇 줄, 몇 열이었어요. 열려는 시도를 멈추고 필요한 것만 꺼내면, 세 가지 실패가 한꺼번에 사라집니다.
지금 열리지 않는 파일이 있다면 대용량 CSV 데이터 추출에 올려 보세요.
참고자료
- Microsoft, 「Excel specifications and limits」: 워크시트 최대 1,048,576행 × 16,384열. 문서 보기
- Microsoft, 「What to do if a data set is too large for the Excel grid」: 그리드보다 큰 데이터 처리 안내. 문서 보기