Flask는 Python으로 작성된 가볍고 유연한 웹 프레임워크로, 단순한 웹 사이트에서부터 복잡한 웹 애플리케이션까지 손쉽게 구축할 수 있도록 해줍니다. Flask는 최소한의 코드로 웹 애플리케이션을 만들 수 있는 마이크로 프레임워크로, 다음과 같은 특징을 가집니다.
  • 간결성: 복잡한 설정이나 대규모 구조 없이 간단한 코드로 서버를 시작할 수 있습니다.
  • 확장성: 필요한 기능만 확장해서 사용할 수 있습니다.
  • Jinja2 템플릿 엔진: HTML 템플릿을 쉽게 관리하고 데이터와의 연동을 편리하게 해주는 템플릿 엔진을 제공합니다.

Flask 설치

Flask는 Python 패키지 관리자인 pip를 통해 설치할 수 있습니다.
bash
pip install Flask

기본 Flask 애플리케이션 작성

다음은 가장 간단한 Flask 애플리케이션 예제입니다.
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" if __name__ == "__main__": app.run(debug=True)

주요 설명

  • Flask 객체 생성: app = Flask(__name__)는 Flask 애플리케이션 객체를 만듭니다.
  • 라우트 설정: @app.route("/")는 URL 경로를 지정하여 특정 경로로 들어온 요청에 대해 함수를 실행합니다.
  • 서버 실행: app.run()을 통해 Flask 서버를 실행합니다.

Flask 주요 기능

1. 라우팅

라우팅은 URL과 함수를 연결하는 것으로, 다양한 URL 경로에 따라 서로 다른 페이지나 데이터를 보여줄 수 있습니다.
@app.route("/hello") def hello(): return "Hello, Flask!" @app.route("/user/<username>") def show_user_profile(username): return f"User: {username}"

2. 템플릿 렌더링

Flask는 Jinja2 템플릿 엔진을 사용하여 HTML 템플릿에 동적으로 데이터를 전달할 수 있습니다. 템플릿 파일을 templates/ 폴더에 작성합니다.
  • templates/index.html 예제:
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Flask App</title> </head> <body> <h1>Hello, {{ name }}!</h1> </body> </html>
Flask에서 템플릿 렌더링:
from flask import render_template @app.route("/greet/<name>") def greet(name): return render_template("index.html", name=name) render_template() 함수는 templates/ 폴더 내의 index.html을 찾아 렌더링하며, name 변수를 템플릿으로 전달합니다.

3.요청 처리

Flask는 GET 및 POST 요청을 처리할 수 있습니다.
  • from flask import request @app.route("/submit", methods=["GET", "POST"]) def submit(): if request.method == "POST": name = request.form["name"] return f"Hello, {name}!" return ''' <form method="post"> Name: <input type="text" name="name"> <input type="submit" value="Submit"> </form>
  • request 객체를 통해 POST 데이터에 접근할 수 있으며, 사용자가 제출한 데이터를 서버에서 처리할 수 있습니다. '''

4. 리다이렉트 및 URL 생성

redirect()와 url_for() 함수를 사용하면 URL을 생성하고 리다이렉트할 수 있습니다.
from flask import redirect, url_for @app.route("/") def index(): return redirect(url_for("hello")) @app.route("/hello") def hello(): return "Hello, Flask!"
  • url_for("hello")는 hello 함수가 매핑된 URL로 이동하게 합니다.

5. Flask와 데이터베이스 연동

Flask는 SQLAlchemy와 같은 ORM(Object Relational Mapping) 라이브러리를 지원하여 데이터베이스와 연동할 수 있습니다. 예를 들어, SQLite와 연동하는 간단한 코드 예시는 다음과 같습니다.
from flask_sqlalchemy import SQLAlchemy app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db" db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) @app.route("/add_user/<name>") def add_user(name): user = User(name=name) db.session.add(user) db.session.commit() return f"Added user {name}."
  • SQLAlchemy를 사용하면 Python 객체와 데이터베이스 테이블을 매핑하여 데이터 관리를 쉽게 할 수 있습니다.

6. Flask 실행

일반적으로 다음 명령어로 Flask 애플리케이션을 실행합니다.
bash
python app.py
또는 FLASK_APP 환경 변수를 설정하여 실행할 수도 있습니다.
bash
export FLASK_APP=app.py flask run
이 명령어로 애플리케이션을 실행한 뒤, http://127.0.0.1:5000에서 접속하여 웹 애플리케이션을 테스트할 수 있습니다.