기술블로그

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)

전체적인 흐름:

  1. **api.py**에서 Blueprint(책 제목)와 라우트(목차), 뷰 함수(책 내용)를 정의해.
  2. **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에서 요청을 받을 때마다 어떻게 할지 관리하는 파일이라고 할 수 있어.

전체적으로 비유를 정리하자면:

  1. **schemas.py**는 책의 서식과 규격을 정하는 곳.
    • 데이터를 어떻게 구성하고 출력할지 형식을 정의해주는 파일.
  2. **abort.py**는 책을 읽을 때 오류가 생기면 안내하는 부분.
    • 오류 처리문제가 생겼을 때 어떻게 할지 정의하는 파일.

예시로 정리된 흐름:

  • api.py: 책을 만들고, 내용목차를 정하는 곳.
  • schemas.py: 책 내용의 형식구성을 정의하는 곳.
  • abort.py: 책을 읽는 동안 문제가 생기면 오류 메시지와 함께 책을 안내하는 곳.
  • app.py: 책을 실행하는 곳, 즉 Flask 애플리케이션을 실행하고 책을 읽을 수 있게 만드는 곳.