Flask는 Python 기반의 마이크로 웹 프레임워크로, 최소한의 코드로 강력한 웹 애플리케이션을 개발할 수 있도록 설계되었습니다. 2010년 Armin Ronacher에 의해 개발된 Flask는 단순함과 확장성을 동시에 제공하여 초보 개발자부터 숙련된 프로그래머까지 폭넓게 사용되고 있습니다. 이번 포스트에서는 Flask의 특징, 핵심 기능, 사용법 및 실용적인 예제까지 자세히 살펴보겠습니다.

1. Flask의 특징
Flask는 '마이크로 프레임워크'라고 불리지만, 이는 기능이 부족하다는 의미가 아닙니다. Flask는 핵심적인 기능만을 제공하고, 필요에 따라 확장할 수 있도록 설계된 프레임워크입니다. 주요 특징은 다음과 같습니다.
- 경량성: 기본적으로 최소한의 기능만 포함되어 있어 빠르게 웹 애플리케이션을 개발할 수 있습니다.
- 확장성: 다양한 확장(Extensions) 라이브러리를 통해 데이터베이스, 인증, 폼 처리 등 필요한 기능을 추가할 수 있습니다.
- 유연성: 개발자가 원하는 방식으로 애플리케이션을 구성할 수 있어 구조적인 제약이 적습니다.
- Jinja2 템플릿 엔진: HTML 페이지를 동적으로 생성할 수 있도록 지원합니다.
- Werkzeug WSGI 라이브러리 사용: WSGI(Web Server Gateway Interface)를 통해 웹 서버와의 상호작용을 돕습니다.
- RESTful API 지원: 간단한 API부터 복잡한 RESTful 서비스를 개발하는 데 적합합니다.
2. Flask의 핵심 기능
Flask는 웹 개발에 필요한 기본적인 기능을 제공합니다.
2.1 라우팅 (Routing)
웹 애플리케이션에서 특정 URL을 특정 함수에 매핑하는 기능을 제공합니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
위 코드에서 @app.route('/')는 루트 경로('/')에 접속했을 때 home() 함수를 실행하도록 지정합니다.
2.2 요청과 응답 (Request & Response)
사용자의 요청을 처리하고, 적절한 응답을 반환할 수 있습니다.
from flask import request
@app.route('/greet', methods=['GET'])
def greet():
name = request.args.get('name', 'Guest')
return f'Hello, {name}!'
위 예제에서는 GET 요청을 받아 URL 파라미터(name)를 추출한 후 응답을 생성합니다.
2.3 템플릿 렌더링
Flask는 Jinja2 템플릿 엔진을 사용하여 HTML을 동적으로 생성할 수 있습니다.
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
👓 템플릿(hello.html):
<!DOCTYPE html>
<html>
<head><title>Flask Example</title></head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
템플릿을 사용하면 재사용성과 유지보수성이 증가합니다.
2.4 데이터베이스 연동
Flask는 SQLAlchemy 같은 ORM(Object Relational Mapping) 라이브러리를 통해 데이터베이스와 쉽게 연동할 수 있습니다.
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.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)
def __repr__(self):
return f'<User {self.username}>'
3. Flask 애플리케이션 구조
Flask 프로젝트는 간단한 구조에서부터 대규모 애플리케이션까지 다양한 형태로 설계할 수 있습니다. 일반적으로 다음과 같은 디렉토리 구조를 따릅니다.
/my_flask_app
├── app.py # 애플리케이션 엔트리 포인트
├── static/ # CSS, JS, 이미지 파일 등 정적 파일 보관
├── templates/ # HTML 템플릿 파일
├── models.py # 데이터베이스 모델 정의
├── forms.py # 폼 처리 (Flask-WTF 사용 가능)
├── config.py # 설정 파일
├── requirements.txt # 필요한 패키지 목록
└── venv/ # 가상 환경 (선택사항)
4. 확장 기능
Flask는 다양한 확장 기능을 통해 보다 강력한 웹 애플리케이션을 개발할 수 있습니다.
- Flask-SQLAlchemy: ORM을 통한 데이터베이스 연동
- Flask-WTF: 폼 유효성 검사 및 CSRF 보호
- Flask-Login: 사용자 인증 및 세션 관리
- Flask-Mail: 이메일 전송 기능
- Flask-RESTful: REST API 개발을 위한 도구
- Flask-Migrate: 데이터베이스 마이그레이션 지원
5. 실용적인 예제: RESTful API 개발
Flask는 RESTful API를 개발하는 데 적합합니다. 간단한 API 예제를 살펴보겠습니다.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/data', methods=['GET'])
def get_data():
sample_data = {'name': 'Flask', 'type': 'Framework'}
return jsonify(sample_data)
if __name__ == '__main__':
app.run(debug=True)
위 코드에서처럼 jsonify()를 사용하여 JSON 응답을 반환하는 간단한 API를 생성할 수 있습니다.
'PROGRAMMING' 카테고리의 다른 글
DQN(Deep Q-Network) 개념 및 핵심 요소, 그리고 한계 (0) | 2025.03.15 |
---|---|
대규모 언어 모델(LLM)개요와 발전, 한계점과 미래 전망 (0) | 2025.03.08 |
프로그래머의 미래 전망과 갖춰야 할 기술 및 전략 (0) | 2025.03.01 |
파이썬(python) - 파이썬의 특징과 유용성, 그리고 미래 전망 (0) | 2025.02.27 |
자바(Java)의 유용성 - 자바의 다양한 특징과 미래 전망 (0) | 2025.02.25 |