[Flask] Flask 애플리케이션 팩토리

참조


소개

  • 앞에서 플라스크 앱을 간단히 알아 보았습니다.
  • 실제로 플라스크 앱은 아래 코드에서 보듯 Flask 클래스로 만든 객체를 말합니다.
app = Flask(__name__)
  • 플라스크는 app 객체를 사용해 여러 가지 설정을 진행합니다.
  • 그런데 이와 같은 방식으로 app 객체를 전역으로 사용하면 프로젝트 규모가 커질수록 문제가 발생할 확률이 높아집니다.
  • 순환 참고(circular import) 오류가 대표적입니다.

애플리케이션 팩토리 사용하기

  • app 객체를 전역으로 사용할 때 발생하는 문제를 예방하려면 애플리케이션 팩토리를 사용하면 됩니다.
  • 애플리케이션 팩토리는 쉽게 말해 app 객체를 생성하는 함수를 의미합니다.

1. pybo.py를 init.py 파일로 변경하기

  • 앞에서 만든 myproject/pybo.py 파일을 myproject/pybo/__init__.py 파일로 대체합니다.
  • 먼저 명령 프롬프트에서 아래 명령어로 myproject/pybo 디렉터리 생성합니다.
(myproject) C:\venvs\myproject>mkdir pybo
  • move 명령어를 통해 pybo.py 파일을 pybo/init.py 파일로 대체하고 플라스크 서버를 실행합니다.
(myproject) c:\venvs\myproject> move pybo.py pybo/__init__.py
         1개 파일을 이동했습니다.

myproject) C:\venvs\myproject>set FLASK_APP=pybo

(myproject) C:\venvs\myproject>set FLASK_ENV=development

(myproject) C:\venvs\myproject>flask run
 * Serving Flask app 'pybo' (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 547-193-509
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

flask run 명령은 반드시 C:/venvs/myproject 디렉터리 안에서 실행되어야 합니다. 다른 곳에서 실행하면 실행은 되지만 정상으로 동작하지 않습니다.

  • 실행 결과, 플라스크 서버가 정상적으로 실행되는 것을 확인할 수 있습니다.

2. 애플리케이션 팩토리 사용하기

  • init.py 파일을 열고 create_app 함수를 선언하는 코드를 추가합니다.
  • [파일명: C:\projects\myproject\pybo_init_.py]
from flask import Flask

def create_app():
    app = Flask(__name__)

    @app.route('/')
    def hello_pybo():
        return 'Hello, Pybo!'

    return app
  • create_app 함수가 app 객체를 생성해 반환하도록 코드를 수정했습니다.
  • 이때 app 객체가 함수 안에서 사용되므로 hello_pybo 함수를 create_app 함수 안에 포함 했습니다.
  • 여기서 사용된 create_app 함수가 애플리케이션 팩토리 입니다.

    함수명으로 create_app 대신 다른 이름을 사용하면 정상 동작하지 않습니다. create_app은 플라스크 내부에서 정의된 함수 명입니다.


실행 결과

  • 실행 결과 정상 동작하는 것을 확인할 수 있습니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY