본문 바로가기
Flask

Flask - MVC 패턴과 flask blueprint

by DGK 2021. 11. 29.

 

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

 

MVC 패턴의 파일 구조

 

 

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'

 

```

결과 :

http://localhost:8080/blog/blog1

```

 

이처럼 flask의 코드를 메인 폴더와 하위 폴더에 분리하여 작성할 수 있다. (이러한 기능을 MVC 패턴에 활용할 수 있음)

 

 

참고 내용

*MVP(Minimum Viable Product)

 

MVP(Minimum Viable Product)는 최근 스타트업에서 개발하는 방식으로 최소한의 기능을 구현한 제품을 만든 후에 고객의 피드백을 받아서 기능을 점차적으로 개선하는 개발 방식이다.

 

 

댓글