Flask는 유연하고 간결한 웹 애플리케이션 프레임워크로서, Python을 기반으로 한다. 하지만 작은 규모의 프로젝트에서는 Flask 앱을 개발하는 데 큰 문제가 없지만, 규모가 큰 프로젝트에서는 코드 구조와 패턴을 잘 구축해야 한다.
이 블로그 포스트에서는 Flask 앱을 구조화하고 중요한 패턴을 소개할 것이다.
프로젝트 구조
Flask 앱을 개발할 때 좋은 프로젝트 구조는 코드의 유지 보수성과 확장성을 향상시킬 수 있다. 이는 다음과 같은 일반적인 구조를 따르는 것이다:
myapp/
├─ app/
│ ├─ templates/
│ │ └─ ...
│ │
│ ├─ static/
│ │ └─ ...
│ │
│ ├─ models.py
│ ├─ views.py
│ └─ ...
│
├─ config.py
└─ run.py
app/
: 실제 Flask 앱이 위치하는 디렉토리templates/
: HTML 템플릿 파일들을 포함하는 디렉토리static/
: CSS, JavaScript, 이미지 등 정적 파일들을 포함하는 디렉토리models.py
: 데이터 모델 클래스들을 포함하는 모듈views.py
: Flask 앱의 뷰와 라우트 함수들을 포함하는 모듈- 기타 필요한 모듈들
config.py
: Flask 앱의 설정을 포함하는 모듈run.py
: Flask 앱을 실행하는 엔트리 포인트
이 구조는 Flask의 best practice에 따른 것이며, 코드를 더 쉽게 구성하고 작업을 분리할 수 있도록 도와준다.
MVC 패턴
Flask 앱에서 일반적으로 사용되는 패턴 중 하나는 MVC (Model-View-Controller) 패턴이다. 이 패턴은 코드의 재사용성과 유지 보수성을 향상시켜준다.
-
Model: 데이터를 나타내는 클래스 또는 객체이다. 예를 들면, 사용자, 게시물, 댓글 등이 될 수 있다.
models.py
파일에 정의된다. -
View: 사용자에게 보여지는 화면을 구성하는 HTML 템플릿과 뷰 함수를 포함한다.
templates/
디렉토리에 템플릿 파일들이 위치하며,views.py
파일에 뷰 함수들이 정의된다. -
Controller: HTTP 요청과 응답을 처리하고, 모델과 뷰를 연결하는 역할을 한다. 라우트 함수들이 Controller의 역할을 하며,
views.py
파일에 정의된다.
MVC 패턴을 사용하면 코드를 더 구조화하고 재사용 가능한 모듈로 분할할 수 있다.
블루프린트
Flask는 블루프린트라는 기능을 제공하여 앱을 모듈화하고 코드를 더 잘 구성할 수 있게 한다. 블루프린트를 사용하면 앱을 여러 개의 모듈로 분할하고 각 모듈을 독립적으로 개발할 수 있다.
예를 들어, 회원 인증, 블로그 게시물 관리, 관리자 패널 등의 기능을 별도의 블루프린트로 분리할 수 있다. 각 블루프린트는 별도의 뷰와 라우트 함수를 가지며, 앱에 등록될 때 URL 접두사를 가지게 된다.
from flask import Blueprint, render_template
blog_bp = Blueprint('blog', __name__, url_prefix='/blog')
@blog_bp.route('/')
def index():
return render_template('blog/index.html')
@blog_bp.route('/post/<int:post_id>')
def show_post(post_id):
# 게시물 조회 등의 로직
return render_template('blog/post.html', post_id=post_id)
위의 예제에서 blog_bp
는 블루프린트를 나타내는 객체이다. url_prefix
를 통해 /blog
로 시작하는 URL을 가지게 된다. 따라서 index
함수는 /blog/
URL에서, show_post
함수는 /blog/post/{post_id}
URL에서 호출될 것이다.
블루프린트를 사용하면 앱을 일부분씩 개발하고 테스트할 수 있으며, 기능을 확장하거나 변경하는 데 매우 편리하다.
결론
Flask 앱을 구조화하고 적절한 패턴을 사용함으로써 큰 규모의 프로젝트에서도 유지 보수 가능하고 확장 가능한 코드를 작성할 수 있다. MVC 패턴을 따르고 블루프린트를 사용함으로써 코드를 모듈화하고 관리하기 쉽게 할 수 있다.
올바른 구조와 패턴을 사용하여 Flask 앱을 개발하면 향후 유지 보수 및 기능 추가에 용이하며, 뛰어난 사용자 경험을 제공할 수 있다. Flask의 강력한 기능을 활용하여 효율적이고 품질 높은 웹 애플리케이션을 개발해보자!