라라벨 큐 시스템: 백그라운드 작업 처리 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상자: 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:table
→php 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_id
및error
정보 기록- 실패 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
)를 트래픽에 따라 조정하여 성능 최적화