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