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

아침에 출근하니 어젯밤 정산이 안 돌아 있다: 야간 배치 작업 운영·재처리·모니터링 설계

야간 배치는 실패해도 아무도 모르는 채로 다음 날 아침에야 드러납니다. 의존성 기반 스케줄링, 멱등성과 체크포인트 재시작, 미실행·지연·건수 이상 모니터링, 재처리 절차서까지 배치 운영 설계의 핵심을 정리합니다.

POLYGLOTSOFT 기술팀2026-10-117분 소요8
배치작업스케줄러재처리시스템운영SM

배치는 조용히 실패합니다

화면 오류는 사용자가 바로 알려 주지만, 새벽 2시에 도는 정산 배치는 실패해도 아무도 모릅니다. 다음 날 아침 영업팀이 "어제 매출이 안 보인다"고 물어 올 때에야 문제가 드러납니다.

원인은 대개 구조에 있습니다.

  • 흩어진 크론: 서버 3~4대의 crontab에 작업이 나뉘어 있어 전체 목록을 아는 사람이 없습니다.
  • 버려지는 실패 로그: 종료 코드가 1이어도 로그 파일에만 남고 누구에게도 전달되지 않습니다.
  • 문서에만 있는 선후행 관계: "주문 집계가 끝난 뒤 정산"이라는 규칙이 코드가 아니라 인수인계 문서에만 적혀 있습니다.
  • 스케줄링과 의존성 관리

    가장 흔한 사고는 시간으로 순서를 맞춘 경우에 생깁니다. 주문 집계를 01:00, 정산을 02:00에 걸어 두면 집계가 평소 40분에 끝나는 동안은 문제가 없습니다. 그러나 데이터가 늘어 집계가 70분 걸리는 날, 정산은 절반만 집계된 데이터로 돌아갑니다. 오류 없이 "성공"으로 끝나기 때문에 더 위험합니다.

  • 시간 기반 실행: 외부 마감 시각처럼 시각 자체가 조건인 작업에만 사용합니다.
  • 완료 기반 실행: 선행 작업이 성공으로 끝났을 때만 후속 작업을 시작합니다.
  • 중앙 스케줄러 도입은 작업이 20개를 넘거나, 선후행 관계가 3단계 이상이거나, 실행 서버가 2대 이상일 때 검토할 만합니다. 그 전에 할 일은 작업 목록 정리입니다. 작업명, 실행 시각, 선행 작업, 평소 소요 시간, 담당자를 한 표에 모으는 것만으로도 빠진 작업과 주인 없는 작업이 드러납니다.

    실패해도 안전한 배치 만들기

    배치는 반드시 실패한다는 전제에서 설계해야 합니다. 핵심은 다시 돌려도 안전한가입니다.

  • 멱등성: 같은 날짜로 두 번 실행해도 결과가 같아야 합니다. 단순 INSERT 대신 정산일과 거래처를 키로 한 UPSERT를 쓰거나, 해당 일자분을 지우고 다시 적재합니다.
  • 체크포인트 재시작: 3만 건을 1,000건 단위로 커밋하고 진행 위치를 기록합니다. 18,000건에서 실패하면 18,001번째부터 이어서 처리합니다.
  • 중복 실행 방지 잠금: 이전 회차가 끝나지 않았는데 다음 회차가 시작되지 않도록 잠금을 둡니다. 프로세스가 죽었을 때 잠금이 영원히 남지 않도록 만료 시간도 함께 정합니다.
  • 부분 실패 처리: 한 건의 데이터 오류로 전체가 멈추지 않게 실패 건을 별도 테이블에 격리하고, 실패 비율이 기준(예: 1%)을 넘을 때만 전체를 중단합니다.
  • 모니터링과 알림

    실패 알림만으로는 부족합니다. 서버가 꺼져 있었거나 크론 설정이 지워졌다면 실패조차 발생하지 않기 때문입니다. 감지해야 할 것은 네 가지입니다.

  • 실패: 종료 코드와 오류 메시지를 즉시 전달합니다.
  • 실행되지 않음: 02:00 시작 예정 작업의 시작 신호가 02:15까지 없으면 알립니다.
  • 평소보다 오래 걸림: 평소 40분인 작업이 1.5배인 60분을 넘기면 경고합니다.
  • 처리 건수 이상: 최근 7일 평균 3만 건 대비 ±30%를 벗어나면, 즉 2만 1천 건 미만이거나 3만 9천 건 초과이면 확인합니다. "성공했지만 0건 처리"가 가장 흔한 조용한 실패입니다.
  • 알림은 1차 담당자와 30분 무응답 시의 2차 담당자를 정해 두어야 합니다. 모두가 받는 채널에만 올리면 아무도 보지 않습니다.

    운영 이관과 인수인계

    배치를 만든 사람과 운영하는 사람은 대개 다릅니다. 작업마다 다음 내용을 담은 재처리 절차서가 있어야 합니다.

  • 재실행 명령과 필요한 인자(대상 일자 등)
  • 재실행해도 되는 조건과 안 되는 조건
  • 실패 시 영향 범위: 어떤 화면, 어떤 보고서, 어떤 후속 작업이 영향을 받는지
  • 업무 마감 전까지 복구해야 하는 시한
  • 배치 시간대 증가에도 미리 대비해야 합니다. 데이터가 해마다 30%씩 늘면 40분짜리 작업은 2년 뒤 약 68분이 됩니다. 거래처나 일자 범위로 4개 구간으로 나눠 병렬 처리하면 이론상 17분 안팎까지 줄어들지만, 실제로는 DB 부하 때문에 그보다 더 걸리므로 동시 실행 수를 측정하며 조정해야 합니다.

    POLYGLOTSOFT가 돕는 방식

    배치 운영은 한 번 구축하고 끝나는 일이 아니라 데이터와 업무가 바뀔 때마다 손봐야 하는 일입니다. POLYGLOTSOFT는 유지보수(SM) 계약 안에서 배치 작업 목록 정리, 멱등성·재시작 구조 재설계, 미실행·지연·건수 이상 모니터링 구축, 재처리 절차서 작성을 지속적으로 개선해 드립니다. 아침마다 정산 결과부터 확인하고 계신다면 POLYGLOTSOFT에 문의해 주시기 바랍니다.

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

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

    무료 상담 신청