Flask 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
MVC 패턴과 flask blueprint(Python)
MVC 패턴과 flask의 blueprint를 예제를 통해 연습해보고자 한다.
MVC 패턴
MVC 패턴은 Model-View-Controller의 줄임말로 소프트웨어 공학에서 나온 아키텍쳐이다.
MVC 패턴대로 코드를 작성하면, 유지보수가 쉬워진다는 주장이 있지만 실제로는 그렇지 않은 경우가 많다. MVC 패턴은 하나의 기능을 구현하는데 각 기능이 여러파일에 쪼개져 있으므로, 코드이해 및 디버깅에 어려움이 있다.
또한, 코드 수정 시 MVC의 특정 부분만을 수정하기 보다는 전체적으로 연결된 기능의 코드를 수정하는 경우가 더 많기 때문에, 간단한 코드일 경우에는 오히려 MVC 패턴을 사용하면 코드 구현 및 확인을 위해 여러 소스파일을 참고해므로 오히려 시간이 많이 걸린다.
그럼에도 re-usability를 고려하여 대형 프로그램에서는 MVC 패턴을 사용하는 경우가 있다.
(한 파일에 모든 기능의 코드를 넣으면 복잡해지고 관리하기 어려움)
*기본 구조(MVC 패턴)
- Model : 응용 프로그램의 데이터를 나타냄(주로 데이터베이스)
- View : 텍스트, 버튼 등 사용자의 인터페이스를 나타냄(웹 페이지 : HTML)
- Controller : Model과 View를 제어하는 중간 역할(중간 제어 (파이썬)코드)
그 이외에도 static은 bootstrap 등 HTML 파일에서 필요로 하는 동일 서버내의 javascript 파일과 css 파일을 포함하며, templates는 flask 서버가 지원하는 HTML 파일을 포함한다.
*example
- flask 서버 : blog_abtest.py
- Model : db_model
- View : blog_view
- Control : blog_control
flask blueprint
flask의 blueprint는 여러 소스파일에서 flask의 코드를 작성할 수 있도록 만들어주는 기능이다. (MVC 패턴에 활용)
*기본 문법
- 메인 폴더(flask_blueprint)의 파이썬 파일(test_server.py) 소스 코드
from flask import Flask
from 하위폴더명 import 하위 폴더의 소스 파일명
app = Flask(__name__)
app.register_blueprint(하위 폴더의 소스 파일명.blueprint 객체이름, url_prefix = '기본 경로명(디폴트 값)')
참고로, url_prefix는 기본 경로명을 의미하며 하위 폴더의 소스파일에 있는 라우팅 경로는 URL/기본경로명/라우팅 경로 와 같이 설정해야 한다. (ex. http://localhost:8080/blog/blog1)
- 분리된 하위 폴더(sub_blueprint)의 파이썬 파일(blog_test.py) 소스 코드
from flask import Blueprint
blueprint 객체이름 = Blueprint('blog', __name__)
@blueprint 객체이름.route('라우팅 경로이름')
def 함수이름():
함수 실행코드
(참고)
*예제
# test_server.py [메인 폴더(flask_blueprint)의 파이썬 파일(test_server.py) 소스 코드]
from flask import Flask
from sub_blueprint import blog_test
app = Flask(__name__)
app.register_blueprint(blog_test.blog_ab, url_prefix='/blog')
if __name__ == '__main__':
app.run(host='0.0.0.0', port='8080')
# blog_test.py [분리된 하위 폴더(sub_blueprint)의 파이썬 파일(blog_test.py) 소스 코드]
from flask import Blueprint
blog_ab = Blueprint('blog', __name__)
# http://localhost:8080/blog/blog1
@blog_ab.route('/blog1')
def blog():
return 'TEST BLUEPRINT'
```
결과 :
```
이처럼 flask의 코드를 메인 폴더와 하위 폴더에 분리하여 작성할 수 있다. (이러한 기능을 MVC 패턴에 활용할 수 있음)
참고 내용
*MVP(Minimum Viable Product)
MVP(Minimum Viable Product)는 최근 스타트업에서 개발하는 방식으로 최소한의 기능을 구현한 제품을 만든 후에 고객의 피드백을 받아서 기능을 점차적으로 개선하는 개발 방식이다.
'Flask' 카테고리의 다른 글
Flask - flask 이해를 위한 파이썬 객체 지향 (0) | 2021.12.01 |
---|---|
Flask - flask의 다양한 기능 (0) | 2021.11.27 |
Flask - bootstrap·vue(axios)/flask로 REST API 구현 (0) | 2021.11.27 |
Flask - jinja2 template (1) | 2021.11.25 |
Flask - flask로 정적 웹 페이지 지원 (0) | 2021.11.25 |
댓글