블로그 목록으로
소프트웨어

엑셀 업로드 한 번에 시스템이 멈춘다: 대량 업로드·다운로드 기능의 검증과 성능 설계

엑셀 대량 업로드·다운로드는 가장 많이 쓰이면서도 타임아웃, 절반 반영, 중복 등록 사고가 가장 잦은 기능입니다. 검증과 반영의 분리, 작업 대기열, 다운로드 부하 분리, 개인정보·수식 주입 통제까지 설계 기준을 정리합니다.

POLYGLOTSOFT 기술팀2026-10-187분 소요2
엑셀 업로드대량 데이터 처리데이터 검증사내 시스템 개발비동기 처리

가장 많이 쓰이고 가장 자주 고장 나는 기능

업무 시스템을 아무리 잘 만들어도 엑셀 업로드·다운로드는 사라지지 않습니다. 거래처가 보내 준 자료, 기존 시스템에서 옮겨 온 데이터, 수백 건을 한 번에 고쳐야 하는 단가표는 화면 입력보다 엑셀이 훨씬 빠르기 때문입니다.

문제는 이 기능이 대개 "화면 하나에 딸린 버튼" 정도로 가볍게 만들어진다는 점입니다. 5만 행 × 20열 파일은 셀이 100만 개입니다. 이를 한 요청 안에서 통째로 메모리에 올리고 한 행씩 저장하면 30~60초인 웹 요청 제한 시간을 넘기거나 서버 메모리가 바닥납니다. 그 결과 다음과 같은 사고가 생깁니다.

  • 절반만 반영: 3만 행째에서 끊겼는데 어디까지 들어갔는지 아무도 모릅니다
  • 중복 등록: 응답이 없어 다시 올린 파일이 두 번 반영됩니다
  • 전체 지연: 업로드 한 건이 DB 연결을 붙잡아 다른 사용자의 화면까지 느려집니다
  • 업로드 설계: 검증과 반영을 분리하기

    핵심은 검증 단계와 반영 단계를 나누는 것입니다. 파일을 받으면 먼저 전체를 검사하고, 결과를 사용자에게 보여 준 뒤에 반영합니다.

    양식과 서식의 함정

  • 양식 버전: 양식 파일에 버전을 넣고, 헤더 이름과 필수 열을 먼저 확인합니다. 열 순서가 아니라 헤더 이름으로 매핑해야 열 하나가 추가되어도 값이 밀리지 않습니다
  • 날짜: 엑셀은 날짜를 일련번호로 저장합니다. 2023-03-15가 45000이라는 숫자로 읽힐 수 있습니다
  • 앞자리 0과 긴 숫자: 품목코드 `00123`이 `123`이 되고, 15자리를 넘는 숫자는 뒷자리가 0으로 바뀝니다. 코드류 열은 양식에서부터 텍스트 서식으로 지정합니다
  • 공백과 보이지 않는 문자: 복사해 붙인 값의 앞뒤 공백 때문에 같은 거래처가 다른 거래처로 판정됩니다
  • 오류를 돌려주는 방식

    "37행 오류"라는 메시지 한 줄로는 부족합니다. 원본 파일에 오류 사유 열을 덧붙인 오류 표시 파일을 내려 주면 사용자가 그 파일을 고쳐 그대로 다시 올릴 수 있습니다.

    전체 취소와 정상 행만 반영 중 무엇을 택할지는 데이터 성격으로 정합니다. 전표나 BOM처럼 행끼리 묶여야 의미가 있는 데이터는 전체 취소, 거래처·품목 마스터처럼 행이 독립적인 데이터는 정상 행만 반영이 적합합니다. 어느 쪽이든 화면에 미리 밝혀 두어야 합니다.

    대량 처리의 성능 설계

  • 작업 대기열: 업로드 요청은 파일만 받아 작업을 등록하고 바로 응답합니다. 실제 처리는 백그라운드 작업자가 맡고, 화면에는 진행률을 표시합니다
  • 스트리밍 파싱: 파일 전체를 올리지 않고 행 단위로 읽으면 메모리 사용량이 파일 크기와 무관하게 일정해집니다
  • 묶음 저장: 한 행씩 저장하지 않고 500~1,000행 단위로 묶어 저장하면 DB 왕복 횟수가 수백 분의 1로 줄어듭니다
  • 중복 판정 키: "거래처코드 + 품목코드 + 적용일"처럼 무엇이 같으면 같은 데이터인지를 명시하고, 겹칠 때 덮어쓸지 건너뛸지 오류로 볼지를 규칙으로 정합니다. 같은 파일을 두 번 올려도 결과가 같아야 합니다
  • 다운로드 설계: 조회 화면을 그대로 내려받게 하면 생기는 일

    조회 화면은 20건씩 보여 주지만 다운로드 버튼은 조건에 맞는 30만 건을 한꺼번에 읽습니다. 이 쿼리가 운영 DB에서 돌면 업무 시간대의 주문 입력까지 느려집니다.

  • 부하 분리: 대용량 조회는 읽기 전용 복제본이나 집계 테이블로 돌립니다
  • 비동기 생성: 파일은 백그라운드에서 만들고, 완료되면 알림과 함께 다운로드 링크를 제공합니다
  • 제한과 형식: xlsx 한 시트의 한계는 1,048,576행입니다. 즉시 다운로드는 1만 행 정도로 제한하고, 그 이상은 비동기 생성이나 분할 파일, CSV로 안내하는 식의 기준을 둡니다
  • 보안과 통제

  • 개인정보 다운로드: 사유 입력을 받고 누가·언제·어떤 조건으로·몇 건을 내려받았는지 기록합니다. 업무에 필요 없는 항목은 마스킹한 채로 내보냅니다
  • 수식 주입: `=`, `+`, `-`, `@`로 시작하는 값은 엑셀에서 수식으로 실행될 수 있습니다. 내보낼 때 이런 값은 텍스트로 처리합니다. 업로드 파일은 확장자뿐 아니라 실제 형식과 크기를 검사하고 매크로 포함 파일은 거부합니다
  • 승인과 되돌리기: 단가 1,000건 변경 같은 대량 변경은 승인 절차를 거치게 하고, 업로드 작업 단위로 변경 전 값을 남겨 한 번에 되돌릴 수 있게 합니다
  • POLYGLOTSOFT의 접근

    엑셀 기능을 화면마다 따로 만들면 검증 규칙도, 오류 메시지도, 성능 문제도 화면 수만큼 늘어납니다. POLYGLOTSOFT는 양식 검증, 오류 표시 파일, 작업 대기열, 진행률, 다운로드 이력을 공통 업로드·다운로드 모듈로 만들고, 화면별로는 열 정의와 검증 규칙만 추가하는 방식으로 구현합니다.

    이미 운영 중인 시스템의 느린 엑셀 기능도 개선할 수 있습니다. 타임아웃이 나는 업로드의 비동기 전환, 오류 표시 파일 추가, 대용량 다운로드 분리 같은 작업은 구독형 개발 범위 안에서 우선순위를 정해 단계적으로 진행할 수 있습니다. 엑셀 업로드 때문에 시스템이 멈춘 경험이 있다면 POLYGLOTSOFT에 문의해 주시기 바랍니다.

    기술 상담이 필요하신가요?

    스마트공장, AI, 물류자동화 분야의 전문 컨설턴트가 귀사의 요구사항을 분석해 드립니다.

    무료 상담 신청