Sidekiq에서 Solid Queue로의 마이그레이션은 여러 핵심 단계로 구성됩니다. 첫째, bundle add solid_queue
와 bin/rails solid_queue:install
명령을 사용하여 Solid Queue를 설치하고, config/queue.yml
및 database.yml
파일에 큐 관련 설정을 추가해야 합니다. 특히, 프로덕션 환경에서는 큐 데이터베이스를 별도로 구성하여 확장성을 확보하는 것이 중요하며, 클라우드 데이터베이스 제공업체를 사용하는 경우 수동으로 DB를 생성해야 할 수도 있습니다. 둘째, 작업 가시성과 관리를 위해 gem "mission_control-jobs"
를 설치하고 config/routes.rb
에 mount MissionControl::Jobs::Engine, at: "/jobs"
를 추가하여 작업 대시보드를 설정합니다. 이 URL은 보안에 유의하여 접근을 제한해야 합니다.
코드 변경 측면에서는 기존 Sidekiq 작업을 Active Job 형식으로 전환해야 합니다. 이는 include Sidekiq::Job
을 제거하고 ApplicationJob
을 상속받도록 변경하며, 큐 설정을 sidekiq_options queue:
에서 queue_as
로 업데이트하는 것을 포함합니다. 또한, 작업 파일의 위치를 /app/sidekiq
에서 Active Job의 기본 위치인 /app/jobs
로 이동하는 것이 권장됩니다. 작업 호출 방식도 perform_async
를 perform_later
로, perform_at
을 .set(...).perform_later
로, perform_inline
을 perform_now
로 변경해야 합니다. 대량 작업 처리는 Sidekiq의 perform_bulk
대신 ActiveJob.perform_all_later
를 사용하고, 대규모 데이터셋에서는 in_batches
헬퍼와 함께 사용하는 것이 효율적입니다.
사용자 정의 재시도 로직의 경우, Sidekiq의 sidekiq_retry_in
을 Active Job의 retry_on StandardError, wait: :polynomially_longer, attempts:
옵션으로 대체하여 지수 백오프(exponential backoff)를 구현할 수 있습니다. 특히 중요한 부분은 테스트 코드 업데이트입니다. Sidekiq의 jobs.size
와 같은 헬퍼 대신 ActiveJob::TestHelper
가 제공하는 assert_enqueued_jobs
, assert_no_enqueued_jobs
, enqueued_jobs
등을 사용하여 큐에 들어간 작업을 검증해야 합니다. 견고한 테스트 스위트는 마이그레이션 과정에서 문제점을 신속하게 파악하고 해결하는 데 결정적인 역할을 합니다.
모든 코드 변경 및 테스트가 완료되면, Redis 및 Sidekiq 관련 gem(bundle remove redis
, bundle remove sidekiq
)과 라우트를 제거할 수 있습니다. 마지막으로, Procfile
또는 서버 설정을 업데이트하여 워커 프로세스가 bundle exec rake solid_queue:start
를 통해 Solid Queue를 시작하도록 변경해야 합니다. 이 과정을 통해 Redis 의존성을 완전히 제거하고, 모든 백그라운드 작업이 Solid Queue를 통해 관계형 데이터베이스에서 처리되도록 할 수 있습니다.