Skip to content

Instantly share code, notes, and snippets.

@kimpro82
Created April 6, 2023 03:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kimpro82/b9e4e76b1dcc5e30dc074bbaa4a4a120 to your computer and use it in GitHub Desktop.
Save kimpro82/b9e4e76b1dcc5e30dc074bbaa4a4a120 to your computer and use it in GitHub Desktop.
by ChatGPT, not 100% accuracy guaranteed

Python Django Server에서 백그라운드 작업 가동

장고 서버에서 클라이언트와 무관하게 계속 작동하는 코드는 일반적으로 백그라운드 작업으로 처리합니다. 이를 위해 Python의 multiprocessing 라이브러리나 Django에서 제공하는 background_task 라이브러리 등을 사용할 수 있습니다.

예시 코드

아래는 background_task 라이브러리를 이용해 Upbit API로 비트코인 시세를 받아 DB에 저장하는 예시 코드입니다. 이 코드는 서버 실행 후 백그라운드에서 계속 작동하며, 1분마다 비트코인 시세를 업데이트하고 DB에 저장합니다.

# views.py

from django.views.decorators.csrf import csrf_exempt
from django_background_task import background
import requests
from .models import BitcoinPrice

@csrf_exempt
@background(schedule=60) # 1분마다 실행
def update_bitcoin_price():
    url = "https://api.upbit.com/v1/ticker?markets=KRW-BTC"
    response = requests.get(url)
    data = response.json()
    price = data[0]["trade_price"]
    BitcoinPrice.objects.create(price=price)

위 코드에서 background_task 라이브러리의 @background(schedule=60) 데코레이터는 해당 함수를 60초마다 실행하도록 합니다. 이 함수에서는 Upbit API로 비트코인 시세를 받아와 DB에 저장하도록 구현되어 있습니다.

# models.py

from django.db import models

class BitcoinPrice(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    price = models.FloatField()

위 코드에서 BitcoinPrice 모델은 시간과 비트코인 가격을 저장합니다. 이 모델에 데이터가 저장되면 Django 앱에서 해당 데이터를 사용할 수 있습니다.

추가 설명

views.py 파일에 작성된 코드는 일반적으로 클라이언트가 서버에 요청을 보낼 때 실행되는 함수를 정의하는 역할을 합니다. 따라서 views.py 파일에 작성된 코드는 클라이언트 요청이 없는 한 실행되지 않습니다.

하지만, 일부 모듈(예: schedule, celery 등)을 사용하여 Django 애플리케이션에서 백그라운드 작업을 수행하도록 할 수 있습니다. 이 경우에는 일정한 간격으로 코드를 실행하도록 설정하고, 이벤트가 발생할 때마다 함수를 호출하도록 지정해야 합니다. 그러면 클라이언트 요청과 관계없이 일정 주기로 코드가 실행됩니다.

따라서, 예시 코드에서 schedule 모듈을 사용하여 5초마다 비트코인 가격 정보를 가져와 데이터베이스에 저장하는 작업을 수행하도록 설정한 것입니다. 이 경우, 5초마다 upbit_price 함수가 실행되며, 이 함수에서는 Upbit API를 사용하여 비트코인 가격 정보를 가져와 데이터베이스에 저장합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment