[파이썬] 웹 프레임워크를 이용한 실시간 주문 시스템

실시간 주문 시스템은 고객이 주문을 한 후에 실시간으로 주문 상태를 확인할 수 있는 시스템입니다. 이러한 시스템을 개발하기 위해서는 웹 프레임워크를 활용하는 것이 좋습니다. 웹 프레임워크를 이용하면 웹 어플리케이션을 쉽게 개발할 수 있으며, 실시간 업데이트와 상태 확인을 구현하는 것도 간편해집니다.

Python 언어를 기반으로 한 웹 프레임워크 중 하나인 Flask를 이용하여 실시간 주문 시스템을 개발해보겠습니다.

1. Flask 설치하기

Flask를 사용하기 위해서는 먼저 Flask를 설치해야 합니다. 아래의 명령어를 사용하여 Flask를 설치합니다.

pip install flask

2. 기본적인 Flask 앱 만들기

Flask를 이용하여 웹 애플리케이션을 개발하기 위해서는 먼저 기본적인 Flask 앱을 만들어야 합니다. 아래의 코드를 작성하여 app.py 파일에 저장합니다.

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('home.html')

if __name__ == '__main__':
    app.run(debug=True)

3. 주문 상태 확인 기능 구현하기

주문 상태 확인 기능을 구현하기 위해서는 데이터베이스를 사용해야 합니다. 본 예제에서는 간단한 SQLite 데이터베이스를 사용하겠습니다. 먼저 SQLite 데이터베이스를 생성하고, 아래의 코드를 작성하여 models.py 파일에 저장합니다.

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    customer_name = db.Column(db.String(100))
    order_status = db.Column(db.String(20))

    def __init__(self, customer_name):
        self.customer_name = customer_name
        self.order_status = '주문 완료'

    def to_dict(self):
        return {
            'id': self.id,
            'customer_name': self.customer_name,
            'order_status': self.order_status
        }

4. 실시간 업데이트 기능 구현하기

실시간 업데이트 기능을 구현하기 위해서는 WebSocket을 활용할 수 있습니다. Flask-SocketIO를 사용하여 WebSocket을 구현해보겠습니다. 아래의 코드를 작성하여 app.py 파일에 저장합니다.

from flask import Flask, render_template, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_socketio import SocketIO
from models import db, Order

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///orders.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
socketio = SocketIO(app)

@app.route('/')
def home():
    return render_template('home.html')

@app.route('/orders')
def get_orders():
    orders = Order.query.all()
    return jsonify([order.to_dict() for order in orders])

@socketio.on('order_update')
def update_order_status(data):
    order_id = data['order_id']
    new_status = data['new_status']
    order = Order.query.get(order_id)
    order.order_status = new_status
    db.session.commit()
    socketio.emit('order_updated', {'order_id': order_id, 'new_status': new_status}, namespace='/')

if __name__ == '__main__':
    app.run(debug=True)

5. 실시간 주문 상태 확인하기

주문 상태를 실시간으로 확인하기 위해서는 JavaScript를 사용하여 웹페이지를 업데이트해야 합니다. 아래의 코드를 작성하여 home.html 파일에 저장합니다.


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>주문 상태 확인</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function() {
            var socket = io.connect('http://' + document.domain + ':' + location.port);
            socket.on('order_updated', function(data) {
                var order_id = data.order_id;
                var new_status = data.new_status;
                $('#' + order_id + '_status').text(new_status);
            });
        });
    </script>
</head>
<body>
    <h1>주문 상태 확인</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>고객명</th>
            <th>주문 상태</th>
        </tr>
        {% for order in orders %}
        <tr>
            <td>{{ order.id }}</td>
            <td>{{ order.customer_name }}</td>
            <td id="{{ order.id }}_status">{{ order.order_status }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

위의 코드를 실행하면 주문 상태를 실시간으로 확인할 수 있는 웹 페이지가 생성됩니다. 주문이 업데이트되면 해당 주문의 상태가 자동적으로 업데이트되어 화면에 표시됩니다.

이와 같이 웹 프레임워크를 이용하여 실시간 주문 시스템을 구현할 수 있습니다. Flask를 사용한 방법을 예로 들었지만, 다른 웹 프레임워크를 이용해도 비슷한 방식으로 개발할 수 있습니다.