Active Job Continuations의 핵심은 작업을 ‘중단 가능한’ 형태로 정의하는 것입니다. 이를 위해 Job 클래스에 ActiveJob::Continuable
모듈을 포함해야 합니다. 작업은 step
블록으로 구성되며, 각 step
블록이 성공적으로 완료될 때마다 자동으로 진행 상황이 저장되는 체크포인트가 생성됩니다. 만약 step
블록 내에서 반복문처럼 세분화된 진행 상황을 추적해야 한다면 advance
메서드를 호출하여 명시적으로 체크포인트를 설정할 수 있습니다.
작업 실행 중 서버 재시작 등으로 인해 SIGTERM
시그널(정상적인 종료 요청)이 발생하면, Active Job은 큐 어댑터가 중단 중인지 확인합니다. 중단이 감지되면, 현재 작업의 진행 상황(완료된 단계 및 현재 커서 위치 등)이 직렬화되어 저장됩니다. 이 데이터는 일반적으로 Redis와 같은 백엔드에 보관됩니다. 이후 해당 작업이 다시 인큐되어 실행될 때, 저장된 진행 상황을 불러와 마지막 체크포인트부터 작업을 이어서 처리하게 됩니다. 이는 Heroku와 같이 24시간마다 프로세스가 재시작되거나 빈번한 배포가 이루어지는 환경에서 장시간 작업의 견고성을 크게 높이는 중요한 메커니즘입니다. SIGTERM
은 프로세스에게 종료를 위한 유예 기간을 주지만, SIGKILL
은 즉시 종료시키므로 Active Job Continuations는 SIGTERM
환경에서만 유효합니다. step
블록 외부에 정의된 로직은 작업 재개 시에도 항상 실행되므로, 필요한 초기화 작업을 이곳에 배치할 수 있습니다.