파이썬 Flask를 이용한 통계 서버 구조 및 설명
1. 기본 서버 구조
statistics_server/
├── app.py # Flask 서버 메인 파일
├── static/ # 정적 파일 (JS, CSS)
├── templates/ # HTML 템플릿 폴더
│ └── index.html # 기본 대시보드 페이지
├── data/ # 데이터 저장 (CSV, SQLite 등)
│ └── sales_data.db # SQLite 데이터베이스 파일
└── requirements.txt # 필요한 패키지 목록
2. 주요 파일 설명
app.py
Flask 서버를 초기화하고 라우트를 정의합니다.
from flask import Flask, render_template, request, jsonify
import sqlite3
app = Flask(__name__)
# DB 연결 함수
def get_db_connection():
conn = sqlite3.connect('data/sales_data.db')
conn.row_factory = sqlite3.Row
return conn
# 메인 대시보드
@app.route('/')
def index():
conn = get_db_connection()
sales_data = conn.execute('SELECT * FROM sales').fetchall()
conn.close()
return render_template('index.html', sales=sales_data)
# API: 특정 통계 제공 (예: 총 매출)
@app.route('/api/total_sales', methods=['GET'])
def total_sales():
conn = get_db_connection()
result = conn.execute('SELECT SUM(amount) as total FROM sales').fetchone()
conn.close()
return jsonify({"total_sales": result['total']})
if __name__ == '__main__':
app.run(debug=True)
데이터베이스 스키마 예시
SQLite로 테이블 구성
CREATE TABLE sales (
id INTEGER PRIMARY KEY AUTOINCREMENT,
product TEXT,
category TEXT,
amount REAL,
date TEXT
);
템플릿 파일: templates/index.html
데이터를 대시보드 형태로 표시합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>통계 대시보드</title>
<style>
body { font-family: Arial, sans-serif; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 8px; text-align: left; border: 1px solid #ddd; }
</style>
</head>
<body>
<h1>판매 통계 대시보드</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>제품명</th>
<th>카테고리</th>
<th>금액</th>
<th>날짜</th>
</tr>
</thead>
<tbody>
{% for sale in sales %}
<tr>
<td>{{ sale.id }}</td>
<td>{{ sale.product }}</td>
<td>{{ sale.category }}</td>
<td>{{ sale.amount }}</td>
<td>{{ sale.date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
3. 통계 서버 기능 구성
기능 설명
데이터 조회 | 데이터베이스에서 판매 데이터를 조회 |
통계 API 제공 | /api/total_sales 경로에서 총 매출 데이터를 JSON으로 반환 |
데이터 시각화 | HTML 템플릿에서 데이터를 표 형태로 렌더링 |
사용자 요청 처리 | Flask 라우트를 통해 사용자 요청 처리 |
4. 확장 아이디어
- 시각화 추가:
- Chart.js 또는 Plotly.js를 사용해 그래프 시각화
- 데이터 입력 API:
- @app.route('/api/add_sale', methods=['POST']) def add_sale(): data = request.json conn = get_db_connection() conn.execute('INSERT INTO sales (product, category, amount, date) VALUES (?, ?, ?, ?)', (data['product'], data['category'], data['amount'], data['date'])) conn.commit() conn.close() return jsonify({"status": "success"})
- 보안 강화:
- JWT 인증, API Rate Limiting 적용
- 데이터 분석 모듈:
- Pandas를 사용해 복잡한 통계 연산 추가
위 구조를 통해 Flask로 통계 서버를 구축하고 다양한 통계 데이터를 사용자에게 제공할 수 있습니다.
'마이크로 웹 프레임워크' 카테고리의 다른 글
[마이크로 웹 프레임워크] FastAPI 마이크로 웹 프레임워크 2 (2) | 2024.10.26 |
---|---|
[마이크로 웹 프레임워크] 플라스크 소개 및 예제 2 (2) | 2024.10.22 |
[마이크로 웹 프레임워크] 파이썬 Sanic 프레임워크란? (0) | 2024.10.20 |
[마이크로 웹 프레임워크] Falcon 고성능 웹 프레임워크 1 (4) | 2024.10.19 |
[마이크로 웹 프레임워크] FastAPI 마이크로 웹 프레임워크 1 (2) | 2024.10.18 |