[python] Flask와 연동하여 웹 소켓을 사용하는 방법

이번 포스트에서는 Flask 웹 프레임워크와 웹 소켓을 연동하여 실시간 통신을 구현하는 방법에 대해 알아보겠습니다.

웹 소켓이란?

웹 소켓(Web Socket)은 서버와 클라이언트 간의 양방향 통신을 제공하는 프로토콜입니다. HTTP와는 다르게 지속적인 연결을 통해 데이터를 주고받을 수 있어 실시간 채팅, 게임 등에 자주 활용됩니다.

Flask와 웹 소켓 연동하기

먼저, Flask에 웹 소켓을 추가하기 위해 Flask-SocketIO 라이브러리를 설치합니다.

pip install flask-socketio

다음으로, Flask 애플리케이션에 SocketIO를 초기화하고 웹 소켓 이벤트를 처리할 수 있는 라우팅을 추가합니다.

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)

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

@socketio.on('message')
def handle_message(message):
    print('received message: ' + message)
    socketio.emit('response', 'Server received your message: ' + message)

if __name__ == '__main__':
    socketio.run(app)

위 코드에서 / 경로로 요청이 들어오면 index.html을 렌더링하고, message 이벤트를 받으면 해당 메시지를 콘솔에 출력하고 클라이언트에 응답을 보냅니다.

클라이언트에서 웹 소켓 사용하기

웹 소켓을 사용하기 위해서는 클라이언트에서도 SocketIO 라이브러리를 추가해야 합니다.

<script src="https://cdn.jsdelivr.net/npm/socket.io-client/dist/socket.io.js"></script>
<script>
    var socket = io();
    socket.on('connect', function() {
        console.log('Connected to server');
    });

    socket.on('response', function(data) {
        console.log('Server says: ' + data);
    });

    function sendMessage() {
        var message = document.getElementById('messageInput').value;
        socket.emit('message', message);
    }
</script>

위 코드는 클라이언트에서 SocketIO를 초기화하고 서버에 메시지를 보내는 예시입니다.

결론

Flask와 웹 소켓을 연동하면 더 다양한 실시간 기능을 웹 애플리케이션에 추가할 수 있습니다. 이를 통해 실시간 채팅, 실시간 데이터 전송 등 다양한 실시간 기능을 구현할 수 있습니다.

참조: