라라벨 큐 이야기 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
==개요==
==개요==
;Laravel queues
;Laravel queues
;라라벨 큐, 라라벨 대기열
;라라벨 큐
* 웹 애플리케이션을 빌드하는 동안 업로드된 CSV 파일의 구문 분석 및 저장과 같이 일반적인 웹 요청 중에 수행하는 데 시간이 너무 오래 걸리는 일부 작업이 있을 수 있다.
* 큐 시스템을 위한 통일된 API를 제공함
*라라벨을 사용하면 백그라운드에서 처리될 수 있는 대기 작업을 쉽게 생성할 수 있다.
* 백엔드로 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(처리) || worker가 큐에 있는 작업을 꺼내어 처리한다.
| work(처리) || 큐에 있는 작업을 꺼내어 처리함
|}
|}
* 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|
* [[라라벨 config/queue.php]]
* [[큐(queue)]]
* [[Laravel Horizon]]
* [[라라벨]]
* [[라라벨]]
* [[메시지 큐]]
* [[메시지 큐]]
* [[라라벨 ]]
* [[큐(queue)]]
* [[라라벨 config/queue.php]]
* [[Laravel Horizon]]
* [[라라벨 작업 스케줄링]]
* [[라라벨 큐 워커 상태 확인]]
}}


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


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

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)

이 문서에서 사용한 틀: