ํ๋ก์ ํธ์์ ๋งค์ผ ์ค์ 9์์ ๋ฐ์๋ฒ์ API๋ก๋ถํฐ ๋ฐ์ ์ด์ ์ ๋ฐ์๋ฒ์์ ์ฌ์ฉ์์๊ฒ ์ด๋ฉ์ผ๋ก ์ ์กํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ ์ค์ ์์๋ค.
ํ์ฌ ํ๋ก์ ํธ์์ ์ด 3๊ฐ์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ๋ฉ์ผ์ ์ก ์ค์ผ์ค๋ฌ๋ง ์ ๋๋ก ๋์์ ํ์ง ์์๋ค. ์๋ฌ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ์ด์ฌํ ๊ตฌ๊ธ๋ง ํ ๊ฒฐ๊ณผ ์ฐ๋ ๋ ๊ด๋ จ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์๋ฐ ์์ง Flask ์์ ์๋ฌ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ํด๊ฒฐํ๋ ์ค๋ ฅ์ด ๋ถ์กฑํด์ ๊ฑฐ์ ํฌ๊ธฐ์ํ์๋ค..
์ผ๋จ ์๋จธ๋ฆฌ๋ฅผ ์กฐ๊ธ ๊ตด๋ ค๋ณด๊ธฐ๋ก ํ๋ค. ์ผ๋จ ๊ฒฐ๊ณผ๋ถํฐ ๋งํ์๋ฉด ์ ๋์ํ๋๋ก ์์ ํ๋ค.
์ฒ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ์ ๊ทผ๋ฐฉ๋ฒ์ APScheduler
์ Job์ผ๋ก ๋ฉ์ผ์ ์ ์กํ๋ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ๋ฃ์ ๋ฐฉ์์ด๋ค. ์ฌ์ค ๋น์ฐํ ์ด๋ ๊ฒ ํด์ ๋์์ด ๋์ด์ผ ํ๋ค. ๊ทผ๋ฐ ์ผ๋จ ์๋ฌ๋ฅผ ๋ฑ์ด๋ด๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
[ ์ฒซ๋ฒ์งธ, ์๋ฌ๋ฅผ ๋ฐ์์ํจ ๋ฐฉ๋ฒ ]
from apscheduler.schedulers.background import BackgroundScheduler, BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
def ๋ฉ์ผ๋ณด๋ด๊ธฐ_๋ฉ์๋():
...
cron = "๋ถ ์ * * *"
scheduler = BackgroundScheduler(daemon=True)
scheduler.add_job(๋ฉ์ผ๋ณด๋ด๊ธฐ_๋ฉ์๋, CronTrigger.from_crontab(cron))
scheduler.start()
ํด๊ฒฐํ ๋ฐฉ์์ด๋ค. ๋ฉ์ผ์ ๋ณด๋ด๋ ๋ฉ์๋๋ฅผ API๋ก ๋งคํ์ํค๊ณ ์ค์ผ์ค๋ฌ์ Job์์๋ ํด๋น API๋ฅผ ๋ถ๋ฅด๋ ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
[ ๋๋ฒ์งธ, ์ค์ผ์ค๋ฌ ์ ์ ๋์ ]
@app.get('/api/mail')
def ๋ฉ์ผ๋ณด๋ด๊ธฐ_๋ฉ์๋():
...
def start_send_mail_job():
print('์๋ฆผ ๋ฉ์ผ ์ ์ก ์ค์ผ์ค๋ฌ Start')
requests.get('http://localhost:5000/api/mail')
print('์๋ฆผ ๋ฉ์ผ ์ ์ก ์ค์ผ์ค๋ฌ End')
return "ok"
cron = "13 14 * * *"
scheduler = BlockingScheduler(daemon=True)
scheduler.add_job(start_send_mail_job, CronTrigger.from_crontab(cron))
scheduler.start()
EC2์ ์ค์ผ์ค๋ฌ๋ค์ ๋ชฐ์์ ๋ฐฐํฌํ๊ฒฝ์์ ์ฌ์ฉ ์ค์ธ๋ฐ BackgroundScheduler
์ฌ์ฉ์ Job์ด 2๋ฒ์ฉ ์ํ๋๋ ๋ฌธ์ ๊ฐ ์๊ฒจ์ BlockingScheduler
๋ก ๋ณ๊ฒฝํ๋ค.