laravel에서 queue 처리하기

기존 운영중인 시스템에서 개선하기

JC
Museion
2 min readAug 22, 2019

--

왜 이렇게 만들었는지 모를 레거시 코드가 있다. laravel은 queue를 제공하는 데 이를 이용하지 않고 command를 이용해 queue 방식을 구현하고, cron으로 실행하도록 했다. 비동기도 아니고 동기도 아니고 이 부분은 코드를 이해하기가 어려웠다. 처음 얘기를 들으면서도 의아했는데 운영을 하다보니 점점 어렵다. 의도를 이해할 수가 없어서 이해가 더 어려웠던 것 같다. 지금은 이해하기보다는 그냥 그런 게 있나보다 하고 있다.

기존 방식이 그냥 돌아가고 있으니 더 급하고 문제 있는 것을 해결하느라 이 부분에 손을 대지 못했는데 외부 업체와의 논의 도중에 이 부분을 수정할 필요가 생겼다. 이왕 작업하는 것 깔끔하게 정리하자는 마음에 기존에 작동하던 command 방식을 버리는 것까지 생각이 나아갔다. 막상 해보려니 고민해야 할 것이 많아서 – 비동기와 동기와 사이가 가장 큰 고민이다 – 일단 필요한 부분부터 구현하고 나머지는 다른 작업으로 처리하려고 한다.

laravel에서 queue 작업 만들기

php artisan make:job className 을 입력하면 job이 추가된다. app/Job/className.php 파일이 생기고 여기에 코드를 추가하면 된다. 최대한 기존 구조를 건드리지 않고 처리 방식만 변경하기 위해 기존 class를 handle()에서 호출한다. queue를 추가할 때는 dispatch()를 호출하면 된다. 그러면 queue 테이블에 데이터가 쌓이고 시간이 지나면(거의 바로) 소진되어 사라진다.

php artisan queue:work를 실행하면 이제 알아서 작동한다. command 방식일 때는 끝나지 않은 작업이나 다른 문제가 발생해도 원인을 파악하기가 어렵다. queue 방식으로 개선하니 관리가 되고 실패한 queue도 쉽게 확인할 수 있다.

--

--

JC
Museion

책 읽는 개발자. 아빠. 생산성, 책, 개발에 관한 글을 남깁니다.