on
185일차 백엔드 Flask - 데코레이터, MVP, MVC, Blueprint, 코드 구조...
185일차 백엔드 Flask - 데코레이터, MVP, MVC, Blueprint, 코드 구조...
//==========데코레이터==========
다양한 데코레이터
- before_first_request : 웹 어플리케이션 기동 이후 가장 처음에 들어오는 HTTP 요청에서만 실행
- before_request : HTTP 요청이 들어올 때마다 실행
# before_first_request, before_request는 인자를 전달할 수는 없음
- after_request : HTTP 요청 처리가 끝나고 브라우저에 응답하기 전에 실행
# response를 리턴해야 함
//==========MVP (Minimum Viable Product)==========
1. 최소한의 기능을 구현한 제품
2. 고객의 피드백을 받아서, 기능을 점차적으로 개선
3. 최근 스타트업이 개발하는 방식
//==========MVC 패턴==========
Model View Controller : 소프트웨어 공학 학문 분야에서 나오 아키텍쳐
1. Model : 응용 프로그램의 데이터를 나타냄 (주로 데이터베이스)
2. View : 텍스트, 버튼 등 사용자 인터페이스를 나타냄 (웹페이지)
3. Controlloer : Model과 View를 제어하는 중간 역할 (중간 제어 코드)
# MVC 패턴대로 코드를 작성하면, 유지보수가 쉬어진다는 주장을 한 것이다.
# 실제로는 그렇지 않은 경우가 많다.
1. MVC 패턴은 하나의 기능을 구현하는데, 각 기능이 여러 파일에 쪼개져 있으므로, 코드의 이해/디버깅이 어렵다.
2. 코드 수정 시, 결국 MVC 특정 부분만 수정하기 보다, 전체 연결된 기능 관련 코드를 수정하는 경우가 더 많아지는 경우도 많다.
# 기존 코드가 MVC 패턴이면, 기존 코드 구조에 맞게 작성하고, 그렇지 않으면 참고만 해라.
//==========MVC 패턴과 flask blueprint==========
1. 한 파일에 모든 기능 코드를 넣으면, 복잡해지고, 관리가 어렵다.
2. re-usability를 항상 생각해야 한다.
- 다만, 그렇다고 대형 프로그램에서 필요한 구조를 가져갈 필요는 없다.
//==========플라스크 백엔드 코드 구조==========
1. 기능별로 폴더/파일 구분 (blueprint를 사용해서, 기능별로 추가/삭제가 쉽도록 구성)
2. MVC에서 View에 해당하는 부분은 없다.(순수 Rest API 서버로, 추후 해당 API를 사용한 프론트엔드 별도 구축)
3. C는 API, M은 데이터베이스/데이터 모델로만 구성하면 됨
//==========기능별로 폴더를 나눠서 코드 구현==========
1. 간단한 코드일 경우, MVC 패턴을 사용하면, 코드 구현 및 확인을 위해 여러 소스파일을 참고해야 하므로 오히려 시간이 많이 걸린다.
- MVC 패턴은 매우 복잡한 기능을 가진, 큰 규모의 시스템에서 일부 유용할 수 있다.
2. 하지만, 기본적인 MVC 패턴 이해를 위해, 다음과 같이 구성
- flask 서버 : blog_abtest.py
- Model : db_model
- View : blog_view
- Control : blog_control
3. 이외에
- static은 부트스트랩 등, HTML 파일에서 필요로 하는 동일 서버 내의 javascript와 css파일
- templates는 flask서버가 지원하는 HTML 파일
//==========플라스크 blueprint==========
1. 여러 소스 파일 내에 플라스크 코드를 작성할 수 있도록 하는 기능
2. 메인 코드 파일 내
from flask import Flask
from 하위폴더명 import 하위폴더의소스파일명
app = Flask(__name__)
app.register_blueprint(하위폴더의소스파일명.블루프리느객체이름, url_prefix='/blog')
3. url_prefix=기본경로명
- 하위 폴더의 소스 파일에 있는 라우팅 경로는 URL/기본 경로명/라우팅 경로와 같이 설정됨
4. 분리된 하위 폴더의 소스 파일 내
- Blueprint(블루프린트이름, name)으로 작성
from flask import Blueprint
blog_abtest = Blueprint('blog', __name__)
@blog_abtest.route('/blog1')
def blog():
return "blueprint test login_google"
from http://kwonputer.tistory.com/208 by ccl(A) rewrite - 2021-03-17 21:26:49