파이썬 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. 확장 아이디어

  1. 시각화 추가:
    • Chart.js 또는 Plotly.js를 사용해 그래프 시각화
  2. 데이터 입력 API:
  3. @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"})
  4. 보안 강화:
    • JWT 인증, API Rate Limiting 적용
  5. 데이터 분석 모듈:
    • Pandas를 사용해 복잡한 통계 연산 추가

위 구조를 통해 Flask로 통계 서버를 구축하고 다양한 통계 데이터를 사용자에게 제공할 수 있습니다.

+ Recent posts