[Flask] Flask 애플리케이션 팩토리
- 웹 프로그래밍
- 2022. 3. 28. 21:23
참조
소개
- 앞에서 플라스크 앱을 간단히 알아 보았습니다.
- 실제로 플라스크 앱은 아래 코드에서 보듯 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
'웹 프로그래밍' 카테고리의 다른 글
[Flask] 모델로 데이터 처리하기 - SQLAlchemy 설치 (0) | 2022.03.29 |
---|---|
[Flask] Flask 블루프린트로 라우트 함수 관리하기 (0) | 2022.03.28 |
[플라스크] 플라스크 기초 (0) | 2022.03.28 |
[Flask] 플라스크 개발 환경 준비 - 가상 환경 설정 (0) | 2022.03.28 |
[Flask] 플라스크 프로젝트 생성하기 (0) | 2022.03.27 |
이 글을 공유하기