과제

Flask practice blog 구축 app.py, db.yaml (1/3)

Chansman 2025. 4. 22. 18:13

📌 app.py - Flask 애플리케이션 설정 및 초기화

app.py는 Flask 애플리케이션의 핵심 설정 파일입니다. 이 파일은 전체 애플리케이션의 구동에 필요한 설정과 초기화 작업을 수행합니다.

1. 주요 라이브러리 임포트

from flask import Flask
from flask_mysqldb import MySQL
from flask_smorest import Api
from flask import render_template
from posts_routes import create_posts_blueprint
import yaml
  • Flask: Flask 애플리케이션을 생성하는 데 사용됩니다.
  • MySQL: MySQL 데이터베이스 연결을 위한 flask_mysqldb를 사용합니다.
  • Api: OpenAPI 문서화와 API 관리에 사용됩니다.
  • render_template: 템플릿 렌더링을 위해 사용됩니다.
  • create_posts_blueprint: posts_routes.py에서 정의된 게시글 관리 블루프린트를 가져옵니다.
  • yaml: db.yaml 파일에서 설정을 불러오기 위해 사용됩니다.

yaml: db.yaml

mysql_host: 'localhost'
mysql_user: 'root'
mysql_password: '7722'
mysql_db: 'oz'

2. Flask 애플리케이션 초기화

app = Flask(__name__)

Flask 애플리케이션 객체를 생성합니다. __name__은 현재 모듈을 나타내며, Flask가 이 파일을 시작점으로 삼습니다.

3. 데이터베이스 설정 (MySQL)

db_info = yaml.load(open('db.yaml'), Loader=yaml.FullLoader)

app.config['MYSQL_HOST'] = db_info['mysql_host']
app.config['MYSQL_USER'] = db_info['mysql_user']
app.config['MYSQL_PASSWORD'] = db_info['mysql_password']
app.config['MYSQL_DB'] = db_info['mysql_db']

mysql = MySQL(app)
  • yaml.load()를 사용하여 db.yaml 파일에서 MySQL 설정 정보를 불러옵니다.
  • app.config를 통해 MySQL 연결 설정을 Flask 애플리케이션에 적용합니다.
  • MySQL(app)을 호출하여 MySQL 객체를 초기화하고 Flask 애플리케이션에 연결합니다.

4. API 설정 및 Swagger UI

app.config["API_TITLE"] = "My API"
app.config["API_VERSION"] = "v1"
app.config["OPENAPI_VERSION"] = "3.1.3"
app.config["OPENAPI_URL_PREFIX"] = "/"
app.config["OPENAPI_SWAGGER_UI_PATH"] = "/swagger-ui"
app.config["OPENAPI_SWAGGER_UI_URL"] = "https://cdn.jsdelivr.net/npm/swagger-ui-dist/"

api = Api(app)
  • OpenAPI 문서화와 관련된 설정입니다.
  • flask_smorest 라이브러리를 사용하여 API의 문서화를 쉽게 관리합니다.
  • Swagger UI를 통해 API의 시각적 인터페이스를 제공합니다.

5. 블루프린트 등록

posts_blp = create_posts_blueprint(mysql)
api.register_blueprint(posts_blp)
  • create_posts_blueprint() 함수로 게시글 관련 기능을 다루는 블루프린트를 생성합니다.
  • 생성된 블루프린트를 api에 등록하여 API로서 사용할 수 있게 합니다.

6. 루트 URL 설정

@app.route('/blogs')
def manage_blogs():
    return render_template('posts.html')
  • /blogs 경로에서 블로그 관리 페이지를 렌더링합니다.
  • posts.html 템플릿을 렌더링하여 사용자에게 블로그 페이지를 제공합니다.

7. 애플리케이션 실행

if __name__ == '__main__':
    app.run(debug=True)
  • app.run(debug=True)를 호출하여 Flask 애플리케이션을 디버그 모드로 실행합니다. 이를 통해 애플리케이션 개발 중 발생할 수 있는 에러를 실시간으로 확인하고 수정할 수 있습니다.

from flask import Flask
from flask_mysqldb import MySQL
from flask_smorest import Api
from flask import render_template
from posts_routes import create_posts_blueprint
import yaml

app = Flask(__name__)

db_info = yaml.load(open('db.yaml'), Loader=yaml.FullLoader)

app.config['MYSQL_HOST'] = db_info['mysql_host']
app.config['MYSQL_USER'] = db_info['mysql_user']
app.config['MYSQL_PASSWORD'] = db_info['mysql_password']
app.config['MYSQL_DB'] = db_info['mysql_db']

mysql = MySQL(app)

# Blueprint 설정
app.config["API_TITLE"] = "My API"
app.config["API_VERSION"] = "v1"
app.config["OPENAPI_VERSION"] = "3.1.3"
app.config["OPENAPI_URL_PREFIX"] = "/"
app.config["OPENAPI_SWAGGER_UI_PATH"] = "/swagger-ui"
app.config["OPENAPI_SWAGGER_UI_URL"] = "https://cdn.jsdelivr.net/npm/swagger-ui-dist/"

api = Api(app)
posts_blp = create_posts_blueprint(mysql)
api.register_blueprint(posts_blp)

@app.route('/blogs')
def manage_blogs():
  return render_template('posts.html')

if __name__ == '__main__':
    app.run(debug=True)

🚦 동작 원리 및 코드 흐름

  1. 애플리케이션 초기화: Flask 객체가 생성되고, MySQL 및 flask_smorest API가 설정됩니다.
  2. 데이터베이스 연결: db.yaml에서 MySQL 설정을 불러와서 MySQL 데이터베이스와 연결합니다.
  3. 블루프린트 등록: 게시글과 관련된 API 기능을 create_posts_blueprint()를 통해 생성하고, 이를 api에 등록하여 API 엔드포인트를 만듭니다.
  4. 템플릿 렌더링: /blogs URL을 통해 posts.html 템플릿을 렌더링하여 사용자에게 블로그 관리 페이지를 제공합니다.