AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

라라벨 큐 시스템: 백그라운드 작업 처리 가이드

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • 대상자: Laravel 웹 애플리케이션 개발자
  • 난이도: 중간 ~ 고급 (큐 시스템 구축 및 최적화 기술 필요)

핵심 요약

  • 큐 시스템의 주요 목적: 시간 소요 작업을 백그라운드로 이전하여 응답 속도 향상
  • 예: 이메일 전송, 이미지 처리, 결제 처리
  • 큐 구성 요소:
  • QUEUE_CONNECTION=database 또는 redis 설정
  • php artisan make:job ProcessPayment 명령으로 Job 클래스 생성
  • php artisan queue:work 명령으로 큐 워커 실행
  • 고급 기능:
  • Job 배치 처리: Bus::batch() 사용
  • 미들웨어 적용: RateLimited 클래스로 레이트 제한 처리

섹션별 세부 요약

1. 큐 설정 및 구성

  • .env 파일에서 QUEUE_CONNECTION 설정:
  • QUEUE_CONNECTION=database 또는 redis
  • 데이터베이스 큐 사용 시 마이그레이션 실행:
  • php artisan queue:tablephp artisan migrate
  • 큐 드라이버별 성능 고려:
  • Redis: 고처리량, 데이터베이스: 간단한 구현

2. Job 클래스 생성 및 사용

  • php artisan make:job ProcessPayment으로 생성된 클래스 구조:
  • use Illuminate\Contracts\Queue\ShouldQueue;
  • public $payment; 속성 정의
  • handle() 메서드에서 비즈니스 로직 처리:
  • PaymentGateway::charge() 호출
  • Mail::to()로 이메일 전송
  • Job 디스패치 방법:
  • 즉시 실행: ProcessPayment::dispatch($payment)
  • 지연 실행: delay(now()->addMinutes(5))
  • 특정 큐에 할당: onQueue('payments')

3. 워커 실행 및 운영

  • 로컬 개발 환경:
  • php artisan queue:work → 기본 큐 실행
  • --queue=payments,emails로 특정 큐 실행
  • 생산 환경 운영:
  • Supervisor 사용:

```ini

[program:laravel-worker]

command=php /path/to/app/artisan queue:work --tries=3

numprocs=8

autostart=true

```

  • 워커 수 조정: numprocs 값 변경

4. 고급 기능 및 최적화

  • Job 배치 처리:
  • Bus::batch()로 여러 Job 동시 처리
  • then(), catch(), finally()로 상태 관리
  • 미들웨어 적용:
  • RateLimited 클래스로 Redis 레이트 제한
  • Redis::throttle('key') 사용
  • 에러 처리:
  • failed() 메서드로 실패 로그 기록
  • Log::error()payment_iderror 정보 기록
  • 실패 Job 재시도:
  • php artisan queue:retry all 또는 php artisan queue:retry 5

5. 성능 및 안정성 최적화

  • 타임아웃 설정:
  • config/queue.php에서 retry_after 값 설정
  • 메모리 관리:
  • 워커 주기적으로 재시작
  • Horizon 사용:
  • composer require laravel/horizon 설치
  • php artisan horizon:install으로 Redis 큐 관리

결론

  • 핵심 팁:
  • 큐 드라이버 선택: 개발 시 database, 운영 시 Redis 또는 SQS 사용
  • 타임아웃 설정: retry_after로 무한 루프 방지
  • 모니터링: Horizon으로 큐 상태 실시간 추적
  • 배치 처리: 관련 작업을 Bus::batch()로 그룹화하여 효율성 향상
  • 에러 처리: failed() 메서드로 사용자 알림 및 로그 기록 필수
  • 확장성: 워커 수(numprocs)를 트래픽에 따라 조정하여 성능 최적화