현대 웹 개발은 단순한 정적인 페이지를 넘어 동적인 데이터 처리, API 제공, 사용자 인증, 데이터베이스 연동 등의 복잡한 기능을 요구합니다. Python은 그 유연성과 강력한 라이브러리 지원 덕분에 웹 개발에서 중요한 역할을 차지하고 있으며, 그중에서도 Flask는 가볍고 강력한 웹 프레임워크로 많은 개발자들에게 사랑받고 있습니다.
Flask는 간단한 문법과 확장 가능한 구조를 갖추고 있어, 빠르게 웹 애플리케이션을 구축할 수 있습니다. 이번 글에서는 Flask의 핵심 개념, 라우팅, 템플릿 렌더링, 데이터베이스 연동 및 실전 활용법까지 자세히 살펴보겠습니다.
1. Flask란 무엇인가?
🔹 Flask의 특징
Flask는 Python 기반의 마이크로 웹 프레임워크로, 웹 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와줍니다. Flask의 주요 특징은 다음과 같습니다.
- 경량성: 불필요한 기능 없이 핵심 기능만 포함하고 있어 빠르고 간결함.
- 유연성: 프로젝트 구조를 자유롭게 구성할 수 있어 확장성이 뛰어남.
- 확장성: 플러그인과 외부 라이브러리를 활용하여 기능 추가 가능.
- 템플릿 엔진: Jinja2를 사용하여 동적 HTML 페이지를 쉽게 생성할 수 있음.
- REST API 개발 가능: Flask는 API 개발에도 적합하여, 백엔드 서비스 구축에 많이 활용됨.
2. Flask 설치 및 기본 실행
🔹 Flask 설치하기
Flask는 Python 패키지 관리자 pip
를 이용하여 간단하게 설치할 수 있습니다.
pip install Flask
🔹 "Hello, World!" Flask 웹 애플리케이션 만들기
다음은 가장 기본적인 Flask 애플리케이션 코드입니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
✅ 실행 방법
- 위 코드를
app.py
파일로 저장합니다. - 터미널에서
python app.py
실행. - 브라우저에서
http://127.0.0.1:5000/
에 접속하면"Hello, World!"
가 표시됩니다.
3. Flask 라우팅과 HTTP 요청 처리
웹 애플리케이션에서는 클라이언트가 특정 URL로 요청을 보낼 때, Flask가 해당 요청을 적절한 함수로 처리하도록 구성해야 합니다. 이를 라우팅(Routing) 이라고 합니다.
🔹 기본 라우팅
@app.route('/hello')
def say_hello():
return 'Hello, Flask!'
위 코드에서 /hello
경로로 요청이 들어오면 say_hello()
함수가 실행됩니다.
🔹 URL 동적 매개변수 사용
URL에 변수를 포함하여 동적으로 처리할 수도 있습니다.
@app.route('/user/<username>')
def greet_user(username):
return f'안녕하세요, {username}님!'
/user/Alice
→ "안녕하세요, Alice님!" 출력/user/Bob
→ "안녕하세요, Bob님!" 출력
🔹 HTTP 메서드 처리 (GET
, POST
)
웹 애플리케이션에서는 폼 데이터를 제출하거나 JSON 데이터를 전송할 때 POST
요청을 사용합니다.
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
data = request.form['data'] # HTML 폼에서 전송된 데이터 가져오기
return f'입력된 데이터: {data}'
이제 클라이언트는 /submit
경로로 POST
요청을 보내 데이터를 서버에 전달할 수 있습니다.
4. 템플릿 렌더링 (Jinja2)
Flask는 Jinja2 템플릿 엔진을 사용하여 HTML을 동적으로 생성할 수 있습니다.
🔹 HTML 템플릿 파일 (templates/index.html
)
<!doctype html>
<html>
<head><title>{{ title }}</title></head>
<body>
<h1>{{ heading }}</h1>
<p>{{ content }}</p>
</body>
</html>
🔹 Flask에서 템플릿 렌더링
from flask import render_template
@app.route('/')
def home():
return render_template('index.html', title='홈페이지', heading='Flask 웹 개발', content='이 페이지는 Flask로 생성되었습니다.')
✅ 실행 결과
웹 브라우저에서 http://127.0.0.1:5000/
로 접속하면 위의 HTML 파일이 렌더링됩니다.
5. Flask와 데이터베이스 연동 (SQLAlchemy)
대부분의 웹 애플리케이션은 데이터를 저장해야 하며, 이를 위해 Flask는 SQLAlchemy와 같은 ORM(Object Relational Mapping) 라이브러리를 제공합니다.
🔹 SQLAlchemy 설치
pip install flask-sqlalchemy
🔹 데이터베이스 모델 정의
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
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)
# 데이터베이스 생성
db.create_all()
위 코드는 SQLite 데이터베이스와 연결하고, User
테이블을 생성하는 코드입니다.
🔹 데이터 삽입 및 조회
@app.route('/add_user/<name>')
def add_user(name):
new_user = User(username=name)
db.session.add(new_user)
db.session.commit()
return f'사용자 {name}이(가) 추가되었습니다!'
@app.route('/users')
def list_users():
users = User.query.all()
return {user.id: user.username for user in users}
/add_user/Alice
→Alice
사용자 추가/users
→ 모든 사용자 목록 출력
6. REST API 개발 (JSON 응답)
Flask는 RESTful API 개발에도 적합합니다. JSON 데이터를 반환하는 API를 만들 수 있습니다.
🔹 JSON 응답 API
from flask import jsonify
@app.route('/api/users')
def get_users():
users = User.query.all()
return jsonify([{ "id": user.id, "username": user.username } for user in users])
/api/users
요청 시, JSON 형식으로 사용자 데이터를 반환합니다.
🔥 결론: Flask로 강력한 웹 애플리케이션 개발하기
Flask는 간단한 문법과 강력한 확장성을 제공하여, 웹 개발 초보자부터 전문가까지 다양한 프로젝트에 활용할 수 있습니다.
🎯 핵심 정리
- Flask는 경량 웹 프레임워크로 빠른 개발이 가능.
- 라우팅을 활용하여 동적 URL을 처리하고, HTTP 메서드를 활용한 요청 처리 가능.
- 템플릿 렌더링을 통해 동적인 HTML 페이지 생성.
- SQLAlchemy를 활용하여 데이터베이스 연동 가능.
- RESTful API를 구축하여 JSON 응답을 쉽게 반환 가능.
실제 프로젝트에서 Flask를 활용하면 웹 애플리케이션, REST API, 데이터 분석 대시보드 등 다양한 솔루션을 구축할 수 있습니다. 직접 실습하면서 Flask의 강력한 기능을 경험해 보세요! 🚀
'프로그래밍 > Python' 카테고리의 다른 글
데이터 과학 필수 라이브러리: NumPy 완벽 가이드 (0) | 2025.02.28 |
---|---|
Python 웹 개발: Django 완벽 가이드 (0) | 2025.02.28 |
Python HTTP 클라이언트 완벽 가이드: `requests` 라이브러리를 활용한 API 통신 (1) | 2025.02.28 |
네트워킹 기초: Python 소켓 프로그래밍 완벽 가이드 (0) | 2025.02.28 |
Python ORM 완벽 가이드: SQLAlchemy를 활용한 데이터베이스 처리 (0) | 2025.02.27 |