웹 개발
배치 작업이 제때 실행 안 될 때 대처
정기적인 백그라운드 작업이 제대로 동작하지 않을 때를 진단하고 해결하는 방법.
배치 작업은 화면에는 드러나지 않지만 데이터 무결성을 위해 중요하다. 배치가 실행되지 않으면 로그와 응답을 함께 봐야 한다. 화면 하나만 보고 판단하면 근본 원인을 놓칠 수 있다.
문제 상황 파악
배치 작업이 정상 동작하는 것처럼 보이지만 실제로는 실패했을 수 있다:
- 로그에는 "성공" 메시지가 있지만 데이터가 반영되지 않음
- 정해진 시간에 실행되지 않음
- 부분적으로만 실행됨
각 상황마다 확인할 포인트가 다르다.
로그 확인
애플리케이션과 시스템 로그를 함께 본다.
# 애플리케이션 로그
npm run build
# 시스템 로그 (cron 기준)
sudo journalctl -u cron -n 50
# 또는 cron 로그 직접 확인
grep CRON /var/log/syslog
로그에서 확인할 것:
- 배치 시작 시각
- 배치 종료 시각
- 처리된 레코드 개수
- 에러 메시지
설정 확인
배치 작업의 실행 조건을 점검한다.
현재 설정값:
- 실행 스케줄 (cron, 타이머 등)
- 타임존 설정
- 환경 변수
- 파일 권한
배포 후 설정이 제대로 적용됐는지 확인한다.
# cron 작업 확인
crontab -l
# 또는
sudo crontab -l -u www-data
작게 바꿔보기
일부만 수정해서 배치가 실행되는지 확인한다.
// 배치 코드에 진단 로그 추가
console.log('배치 시작:', new Date());
console.log('처리 아이템:', items.length);
console.log('배치 종료:', new Date());
이렇게 하면 배치가 실제로 실행되는지, 어느 단계에서 멈추는지 알 수 있다.
사용자 영향 확인
배치가 실패했을 때 얼마나 많은 사용자가 영향받는지 파악한다.
# 처리되지 않은 아이템 개수
psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM items WHERE processed = false AND created_at < now() - interval '1 day';"
영향 범위가 작다면 긴급 대응 우선순위를 낮출 수 있다. 영향이 크다면 다른 임시 방안을 찾아야 한다.
실패 후보 점검
배치가 실패하는 일반적인 이유들:
- 시간 문제: 타임존이 다르거나 서버 시간이 잘못됨
- 권한 문제: 데이터베이스 접근 권한 부족
- 리소스 문제: 메모리 또는 CPU 부족
- 의존성 문제: 필수 라이브러리 누락
- 코드 문제: 배포된 코드에 버그
1번부터 순서대로 점검한다.
다음 배치 전에 기록
배치 작업이 앞으로도 안정적으로 실행되려면:
- 이번에 실패한 정확한 이유
- 확인했던 모든 로그와 설정값
- 적용한 해결책
- 앞으로 같은 문제를 방지하는 방법
이 정보들을 문서로 남겨두면 다음 번에 디버깅 시간을 대폭 줄일 수 있다.