Sidekiq는 Redis를 기반으로 하는 Ruby 백그라운드 잡 처리 라이브러리다. 멀티스레드 아키텍처로 높은 동시 처리 성능을 제공하며, Rails와 긴밀하게 통합된다.
기본 사용법
ruby
# Gemfile
# gem 'sidekiq'
# config/sidekiq.yml
:concurrency: 10
:queues:
- [critical, 3] # 가중치 3 (더 자주 처리)
- [default, 2]
- [low, 1]
# app/workers/email_worker.rb
class EmailWorker
include Sidekiq::Worker
sidekiq_options(
queue: :default,
retry: 5,
dead: false # 최종 실패 시 DLQ에 넣지 않음
)
def perform(user_id, template)
user = User.find(user_id)
UserMailer.send_template(user, template).deliver_now
end
end
# 잡 큐에 추가
EmailWorker.perform_async(user.id, 'welcome') # 즉시
EmailWorker.perform_in(5.minutes, user.id, 'reminder') # 5분 후
EmailWorker.perform_at(Date.tomorrow.noon, user.id, 'digest') # 특정 시각
Sidekiq Pro/Enterprise 기능
ruby
# Batch (여러 잡 일괄 처리 + 콜백)
batch = Sidekiq::Batch.new
batch.description = "사용자 일괄 처리"
batch.on(:success, BatchCallbacks, user_ids: [1, 2, 3])
batch.jobs do
[1, 2, 3].each { |id| ProcessUserWorker.perform_async(id) }
end
# Rate Limiting (처리율 제한)
class ApiCallWorker
include Sidekiq::Worker
sidekiq_options limiter: {
name: 'external_api',
limit: 100,
period: 60 # 분당 100회
}
def perform(endpoint); end
end
# Periodic Jobs (스케줄)
Sidekiq::Cron::Job.create(
name: 'Daily Report',
cron: '0 9 * * *', # 매일 오전 9시
class: 'DailyReportWorker'
)
Sidekiq vs 경쟁 제품
| 항목 | Sidekiq | Delayed::Job | Resque |
|---|
| 브로커 | Redis | DB (ActiveRecord) | Redis |
| 동시성 | 멀티스레드 | 단일 프로세스 | 멀티프로세스 |
| 성능 | 높음 | 낮음 | 중간 |
| 스케줄링 | Pro 기능 | 기본 지원 | resque-scheduler |
| 모니터링 | Web UI 내장 | 없음 | Web UI 있음 |
관련 문서