플라스크는 정말 micro한 장점이 있다고 생각한다. 타 프레임워크에 비하면 구조나 세팅에 있어서 매우 자유롭다
즉 그만큼, 자동으로 해주는게 적다는 뜻이기도 하다(=내가 고생을 해야한다)
아무튼 Flask를 활용하다 보면 한 파일에 많은 양의 라우팅 함수가 모이는 경우를 볼 수 있다.
@app.route('/users/')
def show_users(page):
users = User.query.all()
return render_template('users.html', users=users)
@app.route('/')
def main():
return render_template('main.html')
@app.route('/report')
def report():
return render_template('report.html')
이런식으로, 지금 개발하고 있는 서버 코드가 라우팅 함수만 1000줄을 넘어간다. 이렇게 되면 한번에 볼 수 있다는 점은 좋으나,
1. 협업에 문제가 생긴다
= 깃을 통해 협업을 하는데, 특정 한 파일에 작업이 몰려있으면 병합시에 conflict가 날 경우가 많이 발생한다.
2. 한 파일에 소스가 방대해진다.
= 다들 알다시피 다방면의 문제의 소지가 커진다.
당연히 초반부터 라우팅함수를 나눠가며 써야했겠지만, 미루고 미루다 보니 여기까지 왔다. 이제와서 나누자니 테스트를 전체 다 돌려야 한다는게 문제가.. 크지만.. 아무튼 해야한다.
이러한 문제를 해결하는 것이 Flask 의 Blueprint 이다. 0.7 버전부터 도입됬다고 한다.
# main.py
from flask import Blueprint, render_template
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route("/")
def main():
return "Main"
@bp.route("/privacy")
def privacy():
return render_template("privacy.html")
해당 파일에는 Blueprint 인스턴스인 bp가 데코레이터를 통해 라우팅 처리를 한다. 기존 Flask 객체로 라우팅 처리하는 것과 유사하다.
이때 Blueprint의 name의 경우 유니크해야 하며, url_prefix는 말 그대로 url 앞에 프리픽스 처리를 할 값을 넣는다.
예를 들어 url_prefix='/user' 인 경우, 해당 블루프린트 라우팅 함수들에 대해서는 @bp.route("/privacy") 가 실제로 동작시에는 '/use/privacy' 라는 값으로 변경된다.
# app.py
import main
app = Flask(__name__, static_url_path='/static')
app.register_blueprint(main.bp)
이렇게 생성된 블루프린트 인스턴스는 import하여 Flask 객체의 register_blueprint 함수를 활용해 적용시킨다.
이런 형태로 한 파일에 모여있던 라우팅 함수들을 여러 파일로 쪼개 사용할 수 있고, 위에서 제기한 문제점들을 해결할 수 있다.
'컴퓨터 공학' 카테고리의 다른 글
👉 [CS] Layered Pattern 레이어드 패턴 구현 (0) | 2021.07.11 |
---|---|
👉 [CS] Docker 기반 Microservice 구현 (0) | 2021.07.06 |
👉 [Infra] 서버 상태 모니터링 하기 with Slack Webhook (0) | 2021.06.12 |
👉 [Flutter] 앱 아이콘 뱃지 만들기(iOS/Android) 방법론 삽질기 (3) | 2021.06.04 |
👉 [Flutter] FCM 사용시, iOS에서 백그라운드 작동이 안될 때 (0) | 2021.05.05 |