Laravel 큐 시스템 활용: 확장 가능한 백그라운드 작업 처리 시스템 구축 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Laravel 프레임워크를 사용하는 중급 이상 개발자(특히 백그라운드 작업 처리 및 확장성 개선 필요자)
핵심 요약
- Laravel\Queueable, Redis, Horizon 등의 핵심 기술을 활용한 비동기 작업 처리 구현
- QUEUE_CONNECTION 설정을 통해 database, redis, sqs, sync 등 다양한 백엔드 지원
- Job 클래스에서
handle()
메서드를 통해 작업 로직 정의 및 에러 처리, 재시도, 타임아웃 설정 - Horizon을 통한 큐 모니터링 및 성능 분석 도구 활용
섹션별 세부 요약
1. 큐 백엔드 설정
- QUEUE_CONNECTION 환경 변수로 database, redis, sqs 등 설정 가능
- database 사용 시
php artisan queue:table
,php artisan queue:failed-table
명령어로 테이블 생성 - Redis 사용 시
sudo apt-get install redis-server
및composer require predis/predis
설치 필요
2. Job 클래스 생성 및 구성
php artisan make:job ProcessImageUpload
명령어로 생성- handle() 메서드 내 이미지 처리, 데이터베이스 업데이트, 이메일 전송 등 작업 로직 구현
- $timeout, $tries, $maxExceptions 등 작업 관련 설정 가능
3. Job 디스패치 방법
- 기본 디스패치:
ProcessImageUpload::dispatch($image)
- 지연 디스패치:
delay(now()->addMinutes(5))
- 특정 큐 지정:
onQueue('image-processing')
- 조건부 디스패치:
dispatchIf()
/dispatchUnless()
- 작업 체이닝:
withChain()
을 사용한 작업 순서 정의
4. 배치 처리 및 중간웨어 적용
Bus::batch()
를 통해 다중 이미지 처리 및 진행 상황 추적- RateLimited 중간웨어로 작업 속도 제한 설정 (예:
new RateLimited("image-processing:{$this->image->user_id}", 5, 60)
)
5. 에러 처리 및 로깅
failed()
메서드를 통해 에러 로깅, 이미지 상태 업데이트, 사용자 알림 처리- CriticalException 발생 시 Slack 알림 전송
6. 로드 밸런싱 및 모니터링
- Supervisor를 통해 큐 워커 자동화 및 실행 로그 관리
- Horizon 설치 후
config/horizon.php
에서 프로덕션 환경 설정 - Horizon을 통해 큐 성능 모니터링 및 커스텀 메트릭 추적
결론
- Horizon을 사용하여 큐 성능을 실시간으로 모니터링하고, Redis를 백엔드로 사용해 확장성을 극대화
- Job 클래스에서 에러 처리와 재시도 로직을 반드시 구현하여 시스템 안정성 확보
- Supervisor 설정을 통해 워커 자동 재시작 및 로그 관리로 고가용성 인프라 구축