[엉박사] 1.7 apps.py

impala·2023년 1월 12일
0
post-thumbnail

1.7 apps.py

우리 프로젝트의 경우 학생들이 작성한 독후감을 평가하고 피드백할 때 자연어 처리 모델이 사용되는데 모델의 크기가 꽤 커서 모델을 피드백을 하는 시간보다 모델을 로드할 때 시간이 더 많이 소요되었다. 만약 피드백 요청이 올 때마다 모델을 올리고 피드백을 수행한다면 낭비되는 시간이 너무 많아 지나치게 비효율적이라고 생각되어서 서버가 켜질 때 한번만 모델을 로드하고 피드백 요청이 들어오면 이미 로드된 모델에서 피드백을 수행하는 메소드만 호출하는 방법으로 문제를 해결하고자 하였다.

방법을 찾던 중 어플리케이션을 구성하는 apps.py을 사용하여 우리가 원하는 작업을 수행할 수 있다는 것을 알게되었다.

apps.py에는 각 어플리케이션을 구성하는 여러 정보들이 들어간다.

AttributesMethods
.name.get_models()
.label.get_model()
.verbose_name.ready()
.path
.default
.default_auto_field
.module(read only)
.models_module(read only)

장고 서버가 시작되면 django.setup()메소드가 실행되는데 이때 settings,py의 INSTALLED_APPS를 보고 각 앱의 apps.py를 실행하여 앱을 실행할 때 필요한 구성정보들과 모델정보를 불러와 서비스의 초기화를 진행한다.

이 점을 이용하여 apps.py의 Config클래스에 클래스변수로 모델을 불러오고, 피드백 작업이 필요한 곳에서 apps.py의 Config클래스를 import하여 모델에 정의된 메소드를 실행시키는 방식으로 문제를 해결하였다.

# /report/apps.py
from django.apps import AppConfig
from .services import Feedback  # 자연어 처리 모델이 정의된 파일

class ReportConfig(AppConfig):
    model = Feedback()          # 자연어처리 모델을 불러와 클래스변수로 등록
    ...

# /report/serializers.py
from .apps import ReportConfig                          # Config클래스를 import

...

correct = ReportConfig.model.spellCheck(text.original)  # 모델의 메소드를 호출
text.correct = correct["correct"]

feedback = ReportConfig.model.getFeedBack(text.correct) # 모델의 메소드를 호출
text.feedback = feedback["feedback"]

...

0개의 댓글