기술블로그
Flask의 기능 + Blueprint + Flask-Smorest 통한 작업섹션 구분
Chansman
2025. 4. 18. 18:49
Flask의 기능 + Blueprint + Flask-Smorest
- Flask: 애플리케이션을 만들고, 라우트와 뷰 함수를 정의하는 기본 기능.
- Blueprint: Flask 애플리케이션을 모듈화하여 여러 섹션(예: 책, 사용자 등)을 관리할 수 있도록 도와주는 기능.
- Flask-Smorest: RESTful API에 필요한 스키마 정의와 에러 처리, API 문서화 등을 더 쉽게 할 수 있게 도와주는 Flask 확장.
- **api.py**는 책이 만들어지는 곳이야. 이 파일에서 Blueprint를 정의하고, 그 안에 라우트와 뷰 함수(책 내용)를 설정해.
- **app.py**는 책을 읽는 곳이야. 이 파일에서 api.py에 정의된 Blueprint를 가져와서 실제로 Flask 애플리케이션을 실행하고 라우트와 뷰 함수를 사용할 수 있게 만드는 거지.
예시로 코드로 확인해보자면:
1. api.py (책 내용과 목차를 작성하는 곳)
# api.py
from flask import Blueprint
# Blueprint 정의 (책 제목처럼)
book_blp = Blueprint('books', __name__)
# 라우트와 뷰 함수 정의 (책의 내용)
@book_blp.route('/list')
def list_books():
return "Here is the list of books!"
2. app.py (책을 실제로 사용하는 곳)
# app.py
from flask import Flask
from api import book_blp # api.py에서 Blueprint를 가져옴
app = Flask(__name__)
app.register_blueprint(book_blp) # Blueprint를 등록
if __name__ == '__main__':
app.run(debug=True)
전체적인 흐름:
- **api.py**에서 Blueprint(책 제목)와 라우트(목차), 뷰 함수(책 내용)를 정의해.
- **app.py**에서는 api.py에서 정의한 Blueprint를 불러와서 애플리케이션에 등록하고 실행해.
핵심 포인트:
- 책을 만드는 곳 (책 내용과 목차 정의) → api.py
- 책을 사용하는 곳 (책을 읽고 실행하는 곳) → app.py
3. schemas.py (책의 규격과 형식을 정하는 곳)
비유: 책의 서식과 규격
- **schemas.py**는 책의 서식과 형식을 정하는 곳이야.
- 책이 출판되려면 서식이 있어야 하지? 글자 크기, 머리말과 본문, 글자의 색깔 같은 것들이 책의 규격에 해당돼.
- 마찬가지로, **schemas.py**는 데이터를 어떻게 구성하고 포맷할지 정의하는 파일이야. 예를 들어, 책 내용(데이터)을 어떤 형식으로 쓸지 규격을 설정해주는 거야.
예시:
# schemas.py
from marshmallow import Schema, fields
# 책의 내용(데이터) 형식을 정의하는 곳
class BookSchema(Schema):
title = fields.Str(required=True) # 책 제목
author = fields.Str() # 저자
published_year = fields.Int() # 출판 년도
여기서 BookSchema는 책 내용의 규격을 정의해. 책의 제목과 저자가 어떤 형식이어야 하는지 결정하는 거야. **schemas.py**는 책의 규격을 정의하는 파일이기 때문에 Blueprint에서 데이터를 어떻게 관리하고 출력할지 설정하는 데 사용돼.
4. abort.py (책을 읽을 때 발생할 수 있는 오류 처리)
비유: 책을 읽을 때 문제가 생길 경우 안내하는 부분
- **abort.py**는 책을 읽는 도중 문제가 생겼을 때 어떻게 처리할지 안내하는 부분이야.
- 예를 들어, 책을 읽다가 어떤 페이지를 찾을 수 없다면 어떻게 해야 할까? 그럴 때 책에 오류가 발생한 페이지 번호를 안내하는 페이지가 있을 거야.
- 마찬가지로 **abort.py**는 Flask에서 요청을 처리할 때 문제가 생겼을 때 (예: 잘못된 요청이나 인증 실패) 어떤 오류 메시지를 사용자에게 안내할지 정하는 역할을 해.
예시:
# abort.py
from flask import abort
# 잘못된 요청이 들어오면 오류 메시지와 함께 종료
def check_book(book_id):
# 만약 책이 없으면 오류를 발생시켜!
if book_id not in books:
abort(404, description="Book not found")
여기서 abort(404, description="Book not found")는 책이 존재하지 않으면 오류를 발생시키는 부분이야. **abort.py**는 이런 오류 처리를 Blueprint에서 요청을 받을 때마다 어떻게 할지 관리하는 파일이라고 할 수 있어.
전체적으로 비유를 정리하자면:
- **schemas.py**는 책의 서식과 규격을 정하는 곳.
- 데이터를 어떻게 구성하고 출력할지 형식을 정의해주는 파일.
- **abort.py**는 책을 읽을 때 오류가 생기면 안내하는 부분.
- 오류 처리와 문제가 생겼을 때 어떻게 할지 정의하는 파일.
예시로 정리된 흐름:
- api.py: 책을 만들고, 내용과 목차를 정하는 곳.
- schemas.py: 책 내용의 형식과 구성을 정의하는 곳.
- abort.py: 책을 읽는 동안 문제가 생기면 오류 메시지와 함께 책을 안내하는 곳.
- app.py: 책을 실행하는 곳, 즉 Flask 애플리케이션을 실행하고 책을 읽을 수 있게 만드는 곳.