Laravel Queue

이하루·2024년 8월 5일

Laravel의 비동기 처리를 위해 꼭 필요한 개념인 Queue에 대해서 알아보고자 한다.

🔍 Queue?

CS에서의 queue란 개념은 컴퓨터에서의 작업 및 데이터를 처리하기 위한 기본적인 구조를 의미한다. 선입 선출(FIFO)방식으로 동작한다는 특징을 가지고 있다.

🔍 Laravel Queue

Laravel의 queue란 시간이 오래 걸리는 작업에 대해서 사용자가 해당 작업을 기다리지 않게끔 하기 위해서 백그라운드에서 처리(비동기 방식)를 할 수 있게끔 해주는 기능이다. 실제 queue를 이용한 비동기 처리를 할 때의 구조가 자료구조 queue를 기반으로 동작한다.

1. 사용방법

queue를 사용하기 위해서는 우선 queue의 설정을 하는 것이 필요한데, 해당 파일은 config/queue.php에서 설정이 가능하며, 주요 설정은 아래와 같다.

<?php
return [
 	// 기본 처리 설정
    'default' => env('QUEUE_CONNECTION', 'sync'),

	// 각 커넥트 설정
	'connections' => [
    	// 동기로 즉각 처리
        'sync' => [
            'driver' => 'sync',
        ],
		// DB에서 관리
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
            'after_commit' => false,
        ],
		// Laravel전용 queue서버인 Beanstalkd에서 관리
        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'retry_after' => 90,
            'block_for' => 0,
            'after_commit' => false,
        ],
		// AWS queue서비스인 sqs를 사용하여 관리
        'sqs' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => env('SQS_QUEUE', 'default'),
            'suffix' => env('SQS_SUFFIX'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'after_commit' => false,
        ],
		// Redis서버에서 관리
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
            'after_commit' => false,
        ],

    ],

	// 작업을 실패했을 때, 작업의 에러를 저장하기 위한 설정
	'failed' => [
        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

];
 

설정을 한 queue를 기반으로 처리하는 작업은 job클래스를 통해서 정의해야 하며, Job 클래스는 app\Jobs 디렉토리에서 관리된다.

apps:

  • name:
    script: artisan
    exec_mode: fork
    interpreter: php
    instances: 1
    args:
    • queue:work
    • --queue=a1,a2,a3,a4
    • --tries=1
    • --sleep=1
profile
어제보다 더 나은 하루

0개의 댓글