본문 바로가기

항해99

항해 6일차 TIL - app.py가 점점 복잡해지고 있어요!(FEAT - blueprint)

What : 어떤 문제가 있었는지

How : 어떻게 해결했는지

So : 그래서 뭘 알았는지

 

WHAT

항해99 1주차에는 미니 프로젝트를 진행하게 되는되요 

주요 개발 환경으로는 python언어와  웹 프레임워크로flask를 사용합니다.

 

어노테이션 기반의 스프링으로 웹 개발 공부를 하다가 flask를 사용하니 답답한 부분이 있었어요!

바로 컨트롤러가 분리되지 않는다는 점입니다.

 

컨트롤러가 분리되지 않으면 아래와 같이 한 파일에 수 많은 route 들이 생기게 됩니다.

# app.py

@app.route('/select', methods=['GET'])
def select():
	logic
@app.route('/read', methods=['GET'])
def read():
	logic
@app.route('/order', methods=['GET'])
def order():
	logic
@app.route('/login', methods=['POST'])
def login():
	logic
@app.route('/sign', methods=['POST'])
def sign():
	logic

 

app.py에서 모든 route를 처리하게 된다면?

1. 복잡해집니다.

추후 기존 코드를 사용하거나 변경이 필요할 때, 해당 기능이 어디있는지 찾기 힘들 것 같네요.

2. 만약 프로젝트를 여렷이서 한다면 한 파일에서 공동 작업이 일어지기에 충돌 가능성이 발생합니다.

git confilct 그만 보고 싶어요! 

 

HOW

위 문제를 해결하기 위해서는 Blueprint 클래스를 활용할 수 있습니다. 

  1. Blueprint 생성
  2. Blueprint 등록

 

1. Blueprint 생성

 

1) route들을 담을 controller디렉토리를 만듭니다. (디렉토리 명이 controller일 필요는 없습니다.)

 

2) Blueprint 객체 생성

Blueprint 객체를 생성하는 가장 간단한 방법입니다. 파라미터로 name. import_name을 받습니다.

import_name에는 __name__ 을 써주면 됩니다. __name__ 은 Blueprint가 시작되는 python 파일의 이름을 말해줍니다.

__name__에 대해 더 깊은 이해가 필요해지게 된다면 따로 정리하겠습니다. 

# /controller/__init__.py

routes = Blueprint('routes', __name__)

 

Blueprint 객체를 생성할 때 url_prefix를 정할 수 있습니다.

api를 만들 때 url에 '/members'가 공통적으로 들어간다면 효과적일 수도 있을 것 같네요!

routes = Blueprint('routes', __name__, '/members')

 

2. Blueprint 등록

 

Blueprint를 등록은 register_blueprint로 합니다. 인자로 Blueprint를 받으면 됩니다.

# app.py

app = Flask(__name__)
app.register_blueprint(routes)

routes 라는 Blueprint를 등록했습니다. 이제 app.py에서 모든 route를 등록할 필요 없이

분할하여 route를 올릴 수 있습니다.

 

# login_route.py
@routes.route('/login', methods=['GET'])
def login():
    return render_template('login.html')
    
# select_route.py
@routes.route('/select', methods=['GET'])
def select():
    return render_template('idealSelect.html')

# sign_route.py
@routes.route('/sign', methods=['GET'])
def sign_get():
    return render_template('/sign.html')

 

SO

프로젝트가 커질수록 협업하는 인원이 많을수록 프로젝트는 복잡해질 것 같다는 생각이 들어요. 그럴수록 소스코드를 어떻게 하면 효율적으로 관리할 수 있을지 고민하는 자세가 필요하다고 생각합니다.

 

저의 경우 의자에 앉아 모니터를 바라보고 있으면

눈앞에 보이는 문제를 해결해야 된다는 압박감? 같은게 생기더라구요.

 

다른 사람들과 얘기를 나누거나 혹은 블로그나 혼자만의 시간을 가지면서

어떻게 프로젝트를 관리해야할지, 왜 이런 코드를 짜게됐는지 고민해 볼 필요가 있다고 생각합니다.