ComTalk / matjongwon

(가칭)맛집 종합원(맛종원)
GNU General Public License v2.0
0 stars 1 forks source link

[backend] JSON data update 스케줄 구현 #17

Closed ksron closed 1 year ago

ksron commented 1 year ago

Django 프로젝트에서 주기적으로 command를 실행시키기 위한 방법 3가지:

  1. 스케줄링 도구 cron 사용한다.
    • 장점:
      • 제일 간단하게 스케줄링 실행 가능
      • 참고할 수 있는 자료 많음
    • 단점:
      • 별도의 도구 구성 및 유지보수 필요
  2. Third-party 라이브러리 APScheduler 를 사용하여 특정 주기마다 management command 실행
    • 장점:
      • 외부 스케쥴링 도구에 의존 없이 내부적으로 스케줄링 가능
      • APScheduler 에서 다양한 스케줄 옵션을 제공하여 편하게 customize 할 수 있음
    • 단점:
      • APScheduler 라이브러리 설치 필요
      • APScheduler 도입으로 인한 프로젝트 복잡성 증가
  3. Custom management command 구현하여 loadjson command 주기적으로 실행하도록 한다. 예를 들어, time, threading 모듈을 사용하여 loadjson command 를 실행하기 위한 interval 설정 가능.

    • 장점:
      • 외부 도구 / 라이브러리에 대한 의존 없이 스케줄링 가능
      • command만 주기적으로 실행시키는 거면 간단하게 스케줄링 구현 가능
    • 단점:

      • 별도 코드 작성 필요
      • APScheduler 만큼의 유연성은 없을 수 있음
      • 예시 코드:

        from django.core.management.base import BaseCommand
        import threading
        
        class Command(BaseCommand):
          def handle(self, *args, **options):
              def run_loadjson():
                  # Run the loadjson command every 24 hours
                  threading.Timer(86400, run_loadjson).start()
                  self.stdout.write(self.style.SUCCESS('Running loadjson command...'))
                  call_command('loadjson')
              run_loadjson()