Zettelkasten

배치 시스템 설계

·수정 2026.04.23·수정 3

요약

  • 배치 시스템 구현

본문

스키마

  • Job
    • status: SUCCESS, PENDING, FAILED
    • success_time
    • fail_time
    • batch_id: 묶인 batch_id
    • max_retry_cnt: 최대 재시도 횟수
  • Batch
    • status: PENDING, SUCCESS, PROCESSING, S3_UPLOADED, RESULT_READY
    • 각 단계별 timestamp
    • batch_id: row 식별자 말고 관리할 수 있는 batch_id
    • fail_reason

시스템 구성 요소

  1. 일정시간에 한번 PENDING된 JOB을 하나의 Batch로 묶는 스케줄러
    • 한번에 돌때 지금 까지 쌓인 PENDING된 Job들을 batch 단위로 묶어서 실행
    • 배치 처리는 다양한 것들을 포함 할 수 있음
      • job들을 하나의 batch로 묶고(DB)
      • 어떤 데이터들을 전처리/ 외부 API 호출
      • 각 단계는 실패할 가능성이 있고, 각 단계가 중요하다면 큐로 처리하거나,
    • 배치에는 반드시 job_id들이 포함되어야 함
  2. 생성된 Batch를 처리하는 외부 워커
    • 처리된 결과가 다시 서버에 알려져야함
    • callback으로 서버에 알리거나/외부 저장소에 저장
      • 서버에 알리는 구현의 경우 작업은 완료되었지만 서버 상태에 따라 알림을 못받는 경우가 생김
      • 외부 저장소의 저장 구현의 경우도 동일하게 처리는 완료했지만 저장소 저장에 실패하는 케이스가 생길 수 있음
    • 큐에 넣어서 재처리하게끔 할 수 있음(하지만 여전히 처리 완료후 실패하는 케이스가 있을 수 있음)
    • 외부 워커는 job_id 별로 성공 및 실패 결과를 반환해야함
  3. TIMEOUT 처리를 위한 스케줄러
    • 처리 실패 후 서버에서 알림을 못 받는 케이스를 위한 처리를 위해 TIMEOUT을 확인/결과 확인 스케줄러를 두어 처리 기간이 오래된 배치들을 TIMEOUT 처리해줌