라이믹스에서 기본으로 제공하는 비동기 처리를 위한 간단한 Queue 기능과 비동기 처리를 활용한 작업 예약 기능을 보다 간단하게 활용할 수 있는 방법을 소개합니다.
** 주의 **
본 팁은 공식에서 안내하는 방식이 아닙니다.
본 코드는 의도치 않은 동작을 할 수 있습니다.
아래와 같이 Controllers/Cron/Tasks에 메소드를 넣는것만으로 라이믹스에서 기본으로 제공하는 Cron 기능을 활용할 수 있습니다.
기본 구조는 아래와 같습니다.
cronexample
ㄴ conf
ㄴ controllers
ㄴ cron
ㄴ Register.php : 크론을 관리하는 파일입니다.
ㄴ tasks : job들을 모아두는 폴더입니다.
ㄴ CronInterface.php : 크론잡의 규격 인터페이스입니다.
ㄴ ExampleCacheQueue.php : 크론잡의 예시입니다.
ㄴ Install.php : Cronjob을 등록하고 관리하기 위한 트리거를 넣어두었습니다.
Install.php 파일에 있는 moduleInstall, checkUpdate, moduleUpdate 메소드에 Cron을 등록하는 기능을 넣었습니다.
이를 통해 Cron 변경사항이 생길경우 관리자 대시보드에서 [업데이트] 버튼을 통해 빠르게 등록/수정이 가능합니다.
다음으로는 예시 크론잡인 ExampleCacheQueue.php 입니다.
위와같이 isEnabled, tasks 메소드가 필수로 포함되며, 그 아래는 실행하고자 하는 함수를 static으로 선언합니다.
라이믹스에서는 static이 아니더라도 함수를 실행할 수 있으나 예시 모듈에서는 다루지 않았습니다.
원하는 시간을 crontab 시간 문법으로 작성하고, 그 뒤에 실행하고자 할 함수를 입력하면 실행됩니다.
실제로 저는 현재 제작중인 모듈에서 환불이나 당첨자를 뽑는데 해당 코드를 사용하고 있습니다.
코드는 아래 github 를 참고해주세요
https://github.com/Waterticket/rx-module-cronexample
만약 향후에 modules.xml에 cronjob을 등록할 수 있게 된다면 이런 복잡한 작업 없이 이용할 수 있게 될지도 모르겠네요 :D
다만 카페24같은 웹호스팅 환경에서는 cron을 적극적으로 활용하기가 쉽지 않다보니, 범용적으로 배포되는 모듈에서는 배치 코드를 넣기 고민이 되긴 합니다 ㅜㅜ

https://potatosoft.kr
댓글 3
예시 치고는 뭐가 꽤 많이 들어갔는데요? 네임스페이스에 인터페이스에... ㅎㅎ
참, 'renewCache'에 클래스명도 함께 넣어주어야 할 것 같습니다.
제가 제작하는 모듈에서 저 부분만 분리한거라 본격적이긴 합니다 ㅎ..
그리고 tasks 함수 안에 있는 'renewCache'는 Register.php 파일에서 등록할때 클래스를 앞에 자동으로 붙여줍니다.
ex) 'renewCache' -> '\Rhymix\...\ExampleCacheQueue::renewCache'
의도가 각 파일에서는 자신의 파일에 있는 메소드만 실행할 수 있도록 관심사를 분리하고자 함이라, 별도로 다른 클래스에 있는 메소드를 실행할 수 있는 기능은 넣지 않았습니다.
기능을 단순화하기 위함이기도 하고요.
복잡한 모듈을 만들 때는 그런 장치가 들어 있다면 편리하겠지만
그럴수록 예제로서의 가치에는 의문이 들지요.
라이믹스에서 task 사용하는 법이 아니라, 리버스의 커스텀 모듈을 사용하는 법이 되어 버리니까요. ㅎㅎ