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

잔글 (Jmnote님이 라라벨 큐 문서를 라라벨 큐 이야기 문서로 이동했습니다)
(차이 없음)

2024년 5월 22일 (수) 00:50 판

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 }}