Flask는 파이썬(Python)으로 웹 애플리케이션을 개발할 수 있는 가벼운 마이크로 웹 프레임워크입니다. Flask는 간단하고 유연한 구조를 제공하며, 확장성을 갖추고 있어 소규모 프로젝트부터 대규모 웹 애플리케이션까지 다양한 용도로 사용할 수 있습니다. 이번 포스팅에서는 Flask를 사용하여 간단한 웹 애플리케이션을 만드는 방법을 단계별로 설명하겠습니다.
1. Flask란?
Flask는 파이썬으로 작성된 마이크로 웹 프레임워크로, 최소한의 설정만으로 웹 애플리케이션을 개발할 수 있게 도와줍니다. Flask는 Django와 같은 풀스택 프레임워크보다 더 가볍고 유연한 구조를 가지고 있으며, 필요한 기능들을 플러그인 형태로 쉽게 확장할 수 있습니다.
2. Flask 설치
Flask를 사용하기 위해서는 먼저 Flask 패키지를 설치해야 합니다. 이를 위해 pip 명령어를 사용합니다.
pip install Flask
설치가 완료되면 Flask를 사용하여 웹 애플리케이션을 개발할 준비가 완료됩니다.
3. 간단한 Flask 웹 애플리케이션 만들기
3.1. Flask 애플리케이션 구조
Flask 애플리케이션은 간단한 파일 구조를 가집니다. 다음은 기본적인 Flask 애플리케이션의 디렉터리 구조입니다.
my_flask_app/
app.py
templates/
index.html
static/
style.css
- app.py: Flask 애플리케이션의 메인 파일.
- templates/: HTML 템플릿 파일이 저장되는 디렉터리.
- static/: CSS, JavaScript, 이미지 등의 정적 파일이 저장되는 디렉터리.
3.2. Flask 애플리케이션 코드 작성
먼저, app.py 파일을 생성하고 기본적인 Flask 애플리케이션을 작성합니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
위 코드에서는 Flask 애플리케이션을 생성하고, 루트 경로(/)에 대한 라우트를 정의했습니다. render_template 함수를 사용하여 templates 디렉터리에서 index.html 파일을 렌더링합니다.
3.3. HTML 템플릿 작성
templates 디렉터리에 index.html 파일을 생성하고, 간단한 HTML 페이지를 작성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Flask App</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>Welcome to My Flask App</h1>
<p>This is a simple Flask web application.</p>
</body>
</html>
위 코드에서는 기본적인 HTML 문서를 작성하고, url_for 함수를 사용하여 정적 파일(style.css)의 경로를 동적으로 생성합니다.
3.4. 정적 파일 작성
static 디렉터리에 style.css 파일을 생성하고, 간단한 스타일을 정의합니다.
body {
font-family: Arial, sans-serif;
text-align: center;
background-color: #f0f0f0;
margin-top: 50px;
}
3.5. Flask 애플리케이션 실행
app.py 파일이 있는 디렉터리에서 다음 명령어를 실행하여 Flask 애플리케이션을 실행합니다.
python app.py
출력 결과는 다음과 같습니다:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
이제 웹 브라우저에서 http://127.0.0.1:5000/에 접속하면, 방금 작성한 Flask 애플리케이션이 실행된 것을 확인할 수 있습니다.
4. 라우팅 및 URL 동적 처리
Flask의 라우팅은 URL 경로와 함수를 매핑하는 기능입니다. 여러 경로를 정의하여 다양한 페이지를 처리할 수 있으며, 동적 URL 매개변수를 사용하여 더 복잡한 요청을 처리할 수 있습니다.
4.1. 라우팅 예제
다음은 여러 경로를 처리하는 Flask 애플리케이션의 예제입니다.
@app.route('/about')
def about():
return "<h1>About Page</h1><p>This is the about page.</p>"
@app.route('/user/<username>')
def show_user_profile(username):
return f"<h1>User Profile</h1><p>Username: {username}</p>"
위 코드에서는 /about 경로와 /user/<username> 경로를 처리하는 두 개의 라우트를 정의했습니다. /user/<username> 경로에서는 동적 URL 매개변수 username을 사용하여 사용자 프로필 페이지를 생성합니다.
5. 폼 데이터 처리
Flask는 HTML 폼 데이터를 처리하는 기능도 제공합니다. POST 메서드를 사용하여 서버에 데이터를 전송하고, Flask에서 이를 처리할 수 있습니다.
5.1. 폼 데이터 처리 예제
다음은 폼 데이터를 처리하는 간단한 예제입니다.
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
return f"<h1>Welcome, {username}!</h1>"
return '''
<form method="post">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
'''
위 코드에서는 /login 경로에서 GET 요청으로 로그인 폼을 표시하고, POST 요청으로 폼 데이터를 처리하여 환영 메시지를 출력합니다.
6. 템플릿 엔진 Jinja2 사용
Flask는 Jinja2라는 템플릿 엔진을 사용하여 HTML 파일 내에서 파이썬 코드를 실행하고, 동적으로 콘텐츠를 생성할 수 있습니다.
6.1. Jinja2 사용 예제
다음은 Jinja2 템플릿 엔진을 사용하여 동적으로 데이터를 렌더링하는 예제입니다.
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
templates 디렉터리에 hello.html 파일을 생성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
위 코드에서는 name 변수를 템플릿에 전달하고, Jinja2 템플릿 엔진이 이를 렌더링하여 HTML 콘텐츠를 생성합니다.
7. 데이터베이스와의 연동
Flask는 SQLite와 같은 데이터베이스와 연동하여 데이터를 저장하고 조회하는 기능을 제공합니다. SQLAlchemy와 같은 ORM(Object-Relational Mapping) 라이브러리를 사용하면 더 편리하게 데이터베이스를 다룰 수 있습니다.
7.1. SQLAlchemy 설치
먼저, SQLAlchemy를 설치합니다.
pip install Flask-SQLAlchemy
7.2. 데이터베이스 설정 및 모델 정의
다음은 Flask 애플리케이션에 데이터베이스를 설정하고, 간단한 모델을 정의하는 예제입니다.
from flask_sqlalchemy import SQLAlchemy
# 데이터베이스 설정
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# SQLAlchemy 객체 생성
db = SQLAlchemy(app)
# 모델 정의
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
# 데이터베이스 초기화
db.create_all()
위 코드에서는 User 모델을 정의하고, SQLite 데이터베이스를 초기화합니다.
7.3. 데이터 삽입 및 조회
다음은 정의한 모델을 사용하여 데이터를 삽입하고 조회하는 예제
입니다.
# 데이터 삽입
@app.route('/add_user')
def add_user():
user = User(username='john', email='john@example.com')
db.session.add(user)
db.session.commit()
return f"User {user.username} added."
# 데이터 조회
@app.route('/users')
def users():
users = User.query.all()
return render_template('users.html', users=users)
templates 디렉터리에 users.html 파일을 생성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Users</title>
</head>
<body>
<h1>Users List</h1>
<ul>
{% for user in users %}
<li>{{ user.username }} ({{ user.email }})</li>
{% endfor %}
</ul>
</body>
</html>
위 코드에서는 /add_user 경로에서 새로운 사용자를 추가하고, /users 경로에서 모든 사용자를 조회하여 출력합니다.
8. Flask 애플리케이션 배포
개발이 완료된 Flask 애플리케이션은 배포를 통해 실제 서버에 올릴 수 있습니다. Flask 애플리케이션을 배포할 때는 WSGI(Web Server Gateway Interface) 서버를 사용하여 성능과 안정성을 높일 수 있습니다.
8.1. Gunicorn을 사용한 배포
Gunicorn은 파이썬 WSGI 서버 중 하나로, Flask 애플리케이션을 배포할 때 자주 사용됩니다.
pip install gunicorn
gunicorn -w 4 app:app
위 명령어를 실행하면 Gunicorn이 4개의 워커 프로세스를 사용하여 Flask 애플리케이션을 실행합니다.
결론
이번 포스팅에서는 파이썬과 Flask를 사용하여 간단한 웹 애플리케이션을 만드는 방법에 대해 알아보았습니다. Flask의 기본적인 구조와 라우팅, 템플릿 엔진, 데이터베이스 연동 등을 통해 웹 애플리케이션을 개발할 수 있습니다. Flask는 가볍고 유연한 프레임워크로, 빠르게 프로토타입을 만들거나 소규모 웹 애플리케이션을 개발하는 데 적합합니다. 실습을 통해 Flask의 기능을 익히고, 더 복잡한 애플리케이션으로 확장해 보세요.
이 글을 통해 파이썬과 Flask를 사용하여 웹 애플리케이션을 만드는 방법을 이해하고, 실습을 통해 이를 사용하는 방법을 익힐 수 있을 것입니다. Flask의 유연성과 간단한 구조를 활용해 다양한 웹 프로젝트를 성공적으로 개발해 보세요!
'PYTHON' 카테고리의 다른 글
파이썬에서의 XML 파싱 및 처리 (0) | 2024.08.15 |
---|---|
파이썬에서의 JSON 데이터 처리 (0) | 2024.08.15 |
파이썬의 requests 라이브러리를 이용한 HTTP 요청 (0) | 2024.08.15 |
파이썬에서의 CSV 파일 처리 방법 (0) | 2024.08.15 |
파이썬과 SQLite를 이용한 데이터베이스 처리 (0) | 2024.08.15 |