"라라벨 큐 이야기"의 두 판 사이의 차이

 
(같은 사용자의 중간 판 20개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
;Laravel queues
;Laravel queues
;라라벨 큐
;라라벨 큐, 라라벨 대기열
* 큐 시스템을 위한 통일된 API를 제공함
* 웹 애플리케이션을 빌드하는 동안 업로드된 CSV 파일의 구문 분석 및 저장과 같이 일반적인 웹 요청 중에 수행하는 데 시간이 너무 오래 걸리는 일부 작업이 있을 수 있다.
* 백엔드로 RDB(예: MariaDB), Beanstalk, Amazone SQS, Redis 등 사용가능
*라라벨을 사용하면 백그라운드에서 처리될 수 있는 대기 작업을 쉽게 생성할 수 있다.
:[[config/queue.php]]의 connections에 설정<ref>1개 이상의 큐를 가질 수 있음. 특별히 명시하지 않으면 기본 큐 1개를 사용함</ref>
* 시간 집약적인 작업을 대기열로 이동함으로써 애플리케이션은 웹 요청에 빠른 속도로 응답하고 고객에게 더 나은 사용자 경험을 제공할 수 있다.
* 작업들을 큐에 넣고(예약), 순차 시작되도록 하는 용도
* Laravel 대기열은 [[Amazon SQS]], [[Redis]], 관계형 데이터베이스와 같은 다양한 대기열 백엔드에서 통합 대기열 API를 제공한다.
* Laravel의 대기열 구성 옵션은 애플리케이션의 config/queue.php 구성 파일에 저장된다.
* 이 파일에는 데이터베이스, [[Amazon SQS]], [[Redis]], [[Beanstalkd]] 드라이버를 포함하여 프레임워크에 포함된 각 대기열 드라이버에 대한 연결 구성과 작업을 즉시 실행하는 동기 드라이버(로컬 개발 용도). 대기열에 있는 작업을 삭제하는 <code>null</code> 대기열 드라이버도 포함되어 있다.
 
==요약==
* 큐 시스템을 위한 통일된 API를 제공한다.
* 드라이버(백엔드)로 RDB(예: MariaDB), Beanstalk, Amazone SQS, Redis 등 사용가능하다.
:[[config/queue.php]]의 connections에 설정<ref>여러 개의 큐를 가질 수 있다. 기본은 1개</ref>
:기본값은 sync(이것은 큐가 아니므로 비동기 작업 불가, 동기작업 1건만 처리가능)
* 작업들을 큐에 넣고(예약), 순차 시작되도록 하는 용도이다.
:작업의 예시: 대량 이메일 발송, 대용량 파일(예: 동영상 파일) 다운로드/업로드/변환
:작업의 예시: 대량 이메일 발송, 대용량 파일(예: 동영상 파일) 다운로드/업로드/변환
* 스케줄러는 아님. 수행시작시각 지정은 불가능<ref>직접 구현하거나 외부스케줄러를 사용하면 가능하겠지만, 기본적으로는 불가.</ref>
* 수행시작시각 지정은 불가능하다.
:언제 시작될지 모르지만 FIFO (단, 우선순위, 지연시간 지정가능)
:"큐"이므로 언제 시작될지 모르지만 FIFO (단, 우선순위, 지연시간 지정가능)
:시작시각을 지정하려면 "큐" 대신 "[[라라벨 작업 스케줄링]]" 이용하자.


==과정==
==과정==
* 과정을 간단하게 얘기하자면... 작업을 큐에 넣기(dispatch)와 처리하기(work) 2가지 단계 뿐이다.
* 과정을 간단하게 얘기하자면... 작업을 큐에 넣기(dispatch)와 처리하기(work) 2가지 단계이다.
{| class='wikitable'
{| class='wikitable'
| dispatch(배치) || 작업을 큐에 배치함
| dispatch(배치) || 작업을 큐에 배치한다.
|-
|-
| work(처리) || 큐에서 작업을 꺼내어 처리함
| work(처리) || worker가 큐에 있는 작업을 꺼내어 처리한다.
|}
|}
* dispatch는 웹상에서 또는 커맨드로 가능하다.
* work는 worker가 상시적으로 처리한다.
:worker 기동명령어: [[artisan queue:work]]
* 실패한 job을 [[failed_jobs 테이블]]에 보존할 수 있다.
* job 실패시 재시도하도록 할 수 있다. 기본값=0(회) = 재시도 안함
* 타임아웃 시간을 지정할 수 있다. 기본값=60(초)
==정리==
* 1) 작업을 큐에 배치(dispatch)하는 단계와, 2) worker가 큐에 있는 작업을 처리(work)하는 단계가 있다.
* 사용자/관리자는 웹 또는 커맨드를 통해 dispatch를 수행한다.
* 관리자는 artisan queue:work 명령어로 worker를 기동한다.
:단, worker는, 소스코드 상의 결함<ref>예: 잘못된 handle 코드</ref>, 시스템 상의 문제<ref>예: 작업 중 메모리 부족</ref>으로 죽을 수 있음
:worker의 죽음을 감지하고 다시 켜도록 하기 위해 [[supervisor]]를 설치하여 사용한다.


==같이 보기==
==같이 보기==
{{z컬럼3|
* [[큐(queue)]]
* [[라라벨]]
* [[메시지 큐]]
* [[라라벨 큐]]
* [[라라벨 config/queue.php]]
* [[라라벨 config/queue.php]]
* [[Laravel Horizon]]
* [[Laravel Horizon]]
* [[라라벨]]
* [[라라벨 작업 스케줄링]]
* [[메시지 큐]]
* [[라라벨 워커 상태 확인]]
* [[큐(queue)]]
}}


==참고==
==참고==
* (한국어) https://laravel.kr/docs/5.5/queues
* https://laravel.com/docs/master/queues
:(영어) https://laravel.com/docs/5.5/queues
* http://laravelcoding.com/blog/laravel-5-beauty-sending-mail-and-using-queues
* (영어) http://laravelcoding.com/blog/laravel-5-beauty-sending-mail-and-using-queues


[[분류: Laravel]]
[[분류: 라라벨 큐]]
[[분류: 큐]]

2024년 5월 22일 (수) 00:55 기준 최신판

1 개요[ | ]

Laravel queues
라라벨 큐, 라라벨 대기열
  • 웹 애플리케이션을 빌드하는 동안 업로드된 CSV 파일의 구문 분석 및 저장과 같이 일반적인 웹 요청 중에 수행하는 데 시간이 너무 오래 걸리는 일부 작업이 있을 수 있다.
  • 라라벨을 사용하면 백그라운드에서 처리될 수 있는 대기 작업을 쉽게 생성할 수 있다.
  • 시간 집약적인 작업을 대기열로 이동함으로써 애플리케이션은 웹 요청에 빠른 속도로 응답하고 고객에게 더 나은 사용자 경험을 제공할 수 있다.
  • Laravel 대기열은 Amazon SQS, Redis, 관계형 데이터베이스와 같은 다양한 대기열 백엔드에서 통합 대기열 API를 제공한다.
  • Laravel의 대기열 구성 옵션은 애플리케이션의 config/queue.php 구성 파일에 저장된다.
  • 이 파일에는 데이터베이스, Amazon SQS, Redis, Beanstalkd 드라이버를 포함하여 프레임워크에 포함된 각 대기열 드라이버에 대한 연결 구성과 작업을 즉시 실행하는 동기 드라이버(로컬 개발 용도). 대기열에 있는 작업을 삭제하는 null 대기열 드라이버도 포함되어 있다.

2 요약[ | ]

  • 큐 시스템을 위한 통일된 API를 제공한다.
  • 드라이버(백엔드)로 RDB(예: MariaDB), Beanstalk, Amazone SQS, Redis 등 사용가능하다.
config/queue.php의 connections에 설정[1]
기본값은 sync(이것은 큐가 아니므로 비동기 작업 불가, 동기작업 1건만 처리가능)
  • 작업들을 큐에 넣고(예약), 순차 시작되도록 하는 용도이다.
작업의 예시: 대량 이메일 발송, 대용량 파일(예: 동영상 파일) 다운로드/업로드/변환
  • 수행시작시각 지정은 불가능하다.
"큐"이므로 언제 시작될지 모르지만 FIFO (단, 우선순위, 지연시간 지정가능)
시작시각을 지정하려면 "큐" 대신 "라라벨 작업 스케줄링" 이용하자.

3 과정[ | ]

  • 과정을 간단하게 얘기하자면... 작업을 큐에 넣기(dispatch)와 처리하기(work) 2가지 단계이다.
dispatch(배치) 작업을 큐에 배치한다.
work(처리) worker가 큐에 있는 작업을 꺼내어 처리한다.
  • dispatch는 웹상에서 또는 커맨드로 가능하다.
  • work는 worker가 상시적으로 처리한다.
worker 기동명령어: artisan queue:work
  • 실패한 job을 failed_jobs 테이블에 보존할 수 있다.
  • job 실패시 재시도하도록 할 수 있다. 기본값=0(회) = 재시도 안함
  • 타임아웃 시간을 지정할 수 있다. 기본값=60(초)

4 정리[ | ]

  • 1) 작업을 큐에 배치(dispatch)하는 단계와, 2) worker가 큐에 있는 작업을 처리(work)하는 단계가 있다.
  • 사용자/관리자는 웹 또는 커맨드를 통해 dispatch를 수행한다.
  • 관리자는 artisan queue:work 명령어로 worker를 기동한다.
단, worker는, 소스코드 상의 결함[2], 시스템 상의 문제[3]으로 죽을 수 있음
worker의 죽음을 감지하고 다시 켜도록 하기 위해 supervisor를 설치하여 사용한다.

5 같이 보기[ | ]

6 참고[ | ]

  1. 여러 개의 큐를 가질 수 있다. 기본은 1개
  2. 예: 잘못된 handle 코드
  3. 예: 작업 중 메모리 부족
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}