팁/튜토리얼

라이믹스에서 기본으로 제공하는 비동기 처리를 위한 간단한 Queue 기능비동기 처리를 활용한 작업 예약 기능을 보다 간단하게 활용할 수 있는 방법을 소개합니다.

 

** 주의 **
본 팁은 공식에서 안내하는 방식이 아닙니다.
본 코드는 의도치 않은 동작을 할 수 있습니다.

 

아래와 같이 Controllers/Cron/Tasks에 메소드를 넣는것만으로 라이믹스에서 기본으로 제공하는 Cron 기능을 활용할 수 있습니다.

 

스크린샷 2025-05-20 17-23-57.png

 

기본 구조는 아래와 같습니다.

 

cronexample

ㄴ conf

ㄴ controllers

     ㄴ cron

         ㄴ Register.php : 크론을 관리하는 파일입니다.

         ㄴ tasks : job들을 모아두는 폴더입니다.

             ㄴ CronInterface.php : 크론잡의 규격 인터페이스입니다.

             ㄴ ExampleCacheQueue.php : 크론잡의 예시입니다.

     ㄴ Install.php : Cronjob을 등록하고 관리하기 위한 트리거를 넣어두었습니다.

 

Install.php 파일에 있는 moduleInstall, checkUpdate, moduleUpdate 메소드에 Cron을 등록하는 기능을 넣었습니다.

이를 통해 Cron 변경사항이 생길경우 관리자 대시보드에서 [업데이트] 버튼을 통해 빠르게 등록/수정이 가능합니다.

 

다음으로는 예시 크론잡인 ExampleCacheQueue.php 입니다.

 

스크린샷 2025-05-20 17-26-48.png

 

위와같이 isEnabled, tasks 메소드가 필수로 포함되며, 그 아래는 실행하고자 하는 함수를 static으로 선언합니다.

라이믹스에서는 static이 아니더라도 함수를 실행할 수 있으나 예시 모듈에서는 다루지 않았습니다.

 

원하는 시간을 crontab 시간 문법으로 작성하고, 그 뒤에 실행하고자 할 함수를 입력하면 실행됩니다.

 

 

실제로 저는 현재 제작중인 모듈에서 환불이나 당첨자를 뽑는데 해당 코드를 사용하고 있습니다.

 

image.png

 

 

코드는 아래 github 를 참고해주세요

https://github.com/Waterticket/rx-module-cronexample

 

 

만약 향후에 modules.xml에 cronjob을 등록할 수 있게 된다면 이런 복잡한 작업 없이 이용할 수 있게 될지도 모르겠네요 :D

 

다만 카페24같은 웹호스팅 환경에서는 cron을 적극적으로 활용하기가 쉽지 않다보니, 범용적으로 배포되는 모듈에서는 배치 코드를 넣기 고민이 되긴 합니다 ㅜㅜ

리버스 Lv. 7
모듈만드는 대학생입니다.
https://potatosoft.kr

댓글 3

  • 5시간 전 #1907904

    예시 치고는 뭐가 꽤 많이 들어갔는데요? 네임스페이스에 인터페이스에... ㅎㅎ

    참, 'renewCache'에 클래스명도 함께 넣어주어야 할 것 같습니다.

  • 3시간 전 #1907911

    제가 제작하는 모듈에서 저 부분만 분리한거라 본격적이긴 합니다 ㅎ..

     

    그리고 tasks 함수 안에 있는 'renewCache'는 Register.php 파일에서 등록할때 클래스를 앞에 자동으로 붙여줍니다.

    ex) 'renewCache' -> '\Rhymix\...\ExampleCacheQueue::renewCache'

     

    의도가 각 파일에서는 자신의 파일에 있는 메소드만 실행할 수 있도록 관심사를 분리하고자 함이라, 별도로 다른 클래스에 있는 메소드를 실행할 수 있는 기능은 넣지 않았습니다.

    기능을 단순화하기 위함이기도 하고요.

  • 3시간 전 #1907915

    복잡한 모듈을 만들 때는 그런 장치가 들어 있다면 편리하겠지만

    그럴수록 예제로서의 가치에는 의문이 들지요.

    라이믹스에서 task 사용하는 법이 아니라, 리버스의 커스텀 모듈을 사용하는 법이 되어 버리니까요. ㅎㅎ