본문 바로가기
모든 이야기 모든 이야기

대용량 엑셀(XLSX) 파일을 열 때 메모리가 폭증하는 이유: 압축된 XML 구조(OpenXML)의 DOM 트리 파싱 오버헤드

읽는 시간 약 8분

대용량 엑셀 파일이 왜 느려지고 메모리를 폭증시키는지 이해하기

엑셀 파일은 현대 비즈니스에서 가장 흔하게 사용하는 데이터 도구입니다. 하지만 파일 크기가 수십 메가바이트를 넘어가고 행이 수십만 줄에 달하는 이른바 대용량 파일을 열 때, 컴퓨터가 갑자기 멈추거나 메모리 부족 오류가 발생하는 경험을 한 번쯤 해보셨을 것입니다. 단순히 데이터가 많아서라고 생각하기 쉽지만, 그 이면에는 엑셀 파일이 데이터를 저장하는 독특한 기술적 방식이 숨어 있습니다.

엑셀의 .xlsx 파일 형식은 사실 하나의 압축 파일입니다. 파일 확장자 뒤에 .zip을 붙여서 압축을 풀어보면 내부에는 수많은 XML 파일이 들어있습니다. 이를 오픈 XML(OpenXML) 형식이라고 부릅니다. 엑셀 프로그램이 파일을 열 때, 이 수많은 XML 파일을 읽어 들여 컴퓨터 메모리 위에 하나의 거대한 트리 구조(DOM 트리)로 구축해야 합니다. 이 과정에서 발생하는 파싱 오버헤드가 메모리 폭증의 주범입니다.

오픈 XML 구조와 DOM 트리 파싱의 원리

엑셀 파일은 데이터를 표 형태로 저장하지 않고, 텍스트 기반의 XML 언어로 저장합니다. 예를 들어 A1 셀에 ‘사과’라는 값이 있다면, XML 내부에는 셀의 위치, 스타일, 데이터 타입, 글꼴 정보 등을 나타내는 복잡한 태그들이 감싸져 있습니다. 수십만 개의 셀이 있다면 이 태그의 개수는 수백만 개로 늘어납니다.

엑셀 프로그램은 이 파일을 열 때 다음과 같은 단계를 거칩니다.

  • 파일 압축 해제: 실제 데이터를 추출하는 과정입니다.
  • XML 파싱: 텍스트로 된 XML 내용을 해석하여 컴퓨터가 이해할 수 있는 객체로 변환합니다.
  • DOM 트리 구성: 변환된 객체들을 계층적 구조인 DOM 트리로 메모리에 올립니다. 이 과정에서 원래 파일 크기보다 수십 배 많은 메모리를 점유하게 됩니다.
  • 렌더링: 화면에 표 형태로 그려냅니다.

문제는 이 DOM 트리가 메모리를 매우 비효율적으로 사용한다는 점입니다. 각각의 셀마다 객체 정보가 생성되므로, 단순한 데이터 값보다 훨씬 큰 메모리 공간을 차지하게 됩니다. 10MB 크기의 엑셀 파일이 열릴 때 1GB 이상의 RAM을 요구하는 이유가 바로 여기에 있습니다.

대용량 파일을 다룰 때 흔히 하는 오해와 진실

많은 사용자가 대용량 파일을 다룰 때 잘못된 방법으로 문제에 접근하곤 합니다. 대표적인 오해와 사실 관계를 정리했습니다.

  • 오해: 엑셀 파일을 여러 번 저장하면 파일 크기가 줄어든다. 사실: 오히려 불필요한 스타일 정보나 ‘사용된 범위’가 꼬이면서 파일이 비대해질 수 있습니다.
  • 오해: 컴퓨터 사양만 높이면 해결된다. 사실: 엑셀의 단일 스레드 파싱 구조 때문에 고사양 PC에서도 성능 향상에는 한계가 있습니다.
  • 오해: CSV 파일은 엑셀보다 느리다. 사실: CSV는 단순 텍스트이므로 파싱 오버헤드가 거의 없어 대용량 처리에 훨씬 효율적입니다.

효율적인 데이터 처리를 위한 실용적인 전략

대용량 엑셀 파일을 다루기 위해 단순히 컴퓨터를 업그레이드하는 것은 비용 효율적이지 않습니다. 대신 다음과 같은 작업 방식을 적용해 보세요.

1. 파워 쿼리 활용하기

엑셀 자체의 데이터 기능을 사용하는 대신 ‘데이터 가져오기 및 변환(파워 쿼리)’ 기능을 사용하십시오. 파워 쿼리는 파일을 한 번에 메모리에 올리지 않고, 필요한 데이터만 단계적으로 처리하는 ‘스트리밍’ 방식을 사용합니다. 덕분에 메모리 사용량을 획기적으로 줄일 수 있습니다.

2. 파일 형식의 전환

데이터 분석이 목적이라면 .xlsx 파일 대신 .csv 형식을 사용하는 것이 좋습니다. .csv는 복잡한 XML 구조가 없는 단순 텍스트이므로, 파싱 오버헤드가 발생하지 않아 훨씬 빠르게 열리고 저장됩니다.

3. 불필요한 서식 제거

셀마다 적용된 조건부 서식, 복잡한 테두리, 병합된 셀은 XML 구조를 비대하게 만드는 주범입니다. 데이터만 남기고 서식을 모두 지운 파일은 그렇지 않은 파일보다 열리는 속도가 훨씬 빠릅니다.

4. 바이너리 형식 사용

.xlsx 대신 .xlsb(바이너리 통합 문서) 형식을 사용해 보세요. .xlsb는 XML 대신 이진 형식으로 데이터를 저장하여 압축 효율이 높고 파싱 속도가 훨씬 빠릅니다. 대용량 데이터를 다루는 전문가들이 가장 선호하는 방식입니다.

전문가가 제안하는 데이터 관리 팁

데이터의 양이 50만 행을 넘어간다면 엑셀만 고집하는 것은 위험합니다. 전문가들은 데이터의 규모에 따라 도구를 다르게 사용할 것을 권장합니다.

    • 10만 행 이하: 엑셀 사용이 적합합니다.
    • 10만 행에서 100만 행 사이: 엑셀의 파워 쿼리나 데이터 모델을 사용하거나, 파이썬의 판다스(Pandas) 라이브러리를 고려하십시오.
    • 100만 행 이상: 엑셀은 한계치에 도달합니다. SQL 데이터베이스나 빅데이터 분석 도구로 전환해야 합니다.

또한, 파일을 공유할 때는 원본 데이터가 포함된 파일과 결과값만 보여주는 파일을 분리하는 것이 좋습니다. 수식이 가득한 파일은 열 때마다 계산을 수행하므로, 결과값만 ‘값으로 붙여넣기’ 하여 별도의 파일로 저장하면 공유받는 사람의 컴퓨터 부하를 크게 줄일 수 있습니다.

자주 묻는 질문과 해결 방법

질문: 엑셀을 열기만 해도 ‘메모리 부족’ 메시지가 뜹니다. 어떻게 해야 하나요?

답변: 엑셀을 먼저 실행한 후 ‘파일 열기’ 메뉴를 통해 파일을 불러오십시오. 또한 파일을 열 때 Shift 키를 누른 상태에서 열면 자동 계산 기능을 잠시 멈출 수 있어 로딩 시간을 단축할 수 있습니다. 그래도 안 된다면 64비트 버전의 엑셀을 사용하고 있는지 확인하십시오. 32비트 버전은 사용할 수 있는 메모리 양에 물리적 제한이 있습니다.

질문: 파일 크기는 작은데 여는 데 너무 오래 걸립니다. 왜 그런가요?

답변: 파일 크기와 파싱 속도는 항상 비례하지 않습니다. 내부에 복잡한 수식이 많거나, 사용되지 않는 영역까지 서식이 적용되어 있는 경우(Ghost Cells) 파싱할 대상이 늘어나 속도가 느려집니다. Ctrl + End 키를 눌러 데이터가 끝나는 지점을 확인하고, 실제 데이터 이후의 행과 열을 모두 삭제한 뒤 저장해 보시기 바랍니다.

비용 효율적인 데이터 파이프라인 구축

기업 환경에서 대용량 엑셀 처리는 업무 생산성과 직결됩니다. 가장 비용 효율적인 방법은 ‘데이터와 뷰어의 분리’입니다. 원천 데이터는 데이터베이스나 CSV 형태로 저장하고, 엑셀은 이를 불러와서 보여주는 뷰어 역할만 하도록 구성해야 합니다. 이렇게 하면 엑셀 파일이 비대해지는 것을 근본적으로 막을 수 있습니다.

또한, 파이썬이나 R과 같은 오픈 소스 언어를 한두 명의 담당자가 익히게 하는 것만으로도 수천만 원 상당의 상용 솔루션 도입 비용을 절감할 수 있습니다. 파이썬의 ‘Openpyxl’이나 ‘XlsxWriter’ 같은 라이브러리는 엑셀 파일을 메모리에 올리지 않고도 효율적으로 읽고 쓸 수 있는 기능을 제공합니다. 이러한 기술적 접근은 단순한 속도 개선을 넘어, 데이터 처리의 안정성을 높여줍니다.

결국 엑셀은 훌륭한 도구이지만, 그 구조적 한계를 정확히 이해하고 상황에 맞는 도구를 선택하는 것이 스마트한 업무 방식의 핵심입니다. 대용량 파일 때문에 고민하고 있다면, 오늘부터 파일 형식을 .xlsb로 바꿔보거나 파워 쿼리를 활용해 보는 작은 변화부터 시작해 보시기 바랍니다.

seagreen33
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.