피드로 돌아가기
Dev.toBackend
원문 읽기
Laravel Job Batching을 통한 10만 건 CSV 임포트 제어 및 가시성 확보
Scaling CSV Imports: Master Laravel Job Batching
AI 요약
Context
B2B SaaS 환경에서 10만 건 규모의 대량 CSV 데이터를 개별 Job으로 처리하며 발생한 추적 불가 문제 분석. 단순 Loop 기반 Dispatch 방식으로 인해 일부 작업 실패 시 알림 부재 및 전체 진행률 파악이 불가능한 Black Box 상태의 한계 직면.
Technical Solution
- Bus::batch() Facade 도입을 통한 수만 개의 독립 Job을 단일 추적 가능 엔티티로 그룹화
- Memory-safe Generator 활용 및 데이터 Chunking 처리를 통한 메모리 오버플로우 방지
- allowFailures() 설정을 통해 개별 행의 데이터 오류가 전체 배치 프로세스를 중단시키지 않도록 설계
- then, catch, finally Lifecycle Hook을 정의하여 전체 성공, 최초 실패, 최종 완료 시점의 비즈니스 로직 분리
- Batch ID 기반의 상태 폴링 API를 설계하여 프론트엔드에 실시간 진행률(0-100%) 제공
- 최종 단계에서 processedJobs와 failedJobs 수치를 집계하여 사용자에게 정밀한 임포트 리포트 전송
실천 포인트
1. 대량 데이터 처리 시 개별 Job의 단순 반복 대신 Batching 구조를 통한 상태 관리 검토
2. 부분적 실패가 허용되는 워크플로우인지 판단하여 allowFailures 설정 적용
3. 비동기 처리의 사용자 경험 개선을 위해 Batch ID 기반의 Progress Polling API 구현
4. 전체 작업 완료 후 단 한 번만 실행되어야 하는 Post-processing 로직을 finally 훅에 배치