[파이썬] Flask의 웹 소켓 통신

웹 소켓(WebSocket)은 실시간 양방향 통신을 위한 프로토콜입니다. 이를 통해 서버와 클라이언트 간에 효율적이고 실시간으로 데이터를 주고받을 수 있습니다. Flask는 파이썬에서 웹 애플리케이션을 개발하기 위한 마이크로 웹 프레임워크입니다. 이번 글에서는 Flask를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보겠습니다.

Flask-SocketIO 설치

Flask-SocketIO는 Flask와 웹 소켓 통신을 쉽게 구현할 수 있도록 도와주는 확장팩입니다. 다음은 Flask-SocketIO를 설치하는 방법입니다.

pip install flask-socketio

위 명령어를 실행하여 Flask-SocketIO를 설치합니다.

설정 및 초기화

Flask-SocketIO를 사용하기 위해 애플리케이션을 설정하고 초기화해야 합니다. 다음은 기본 설정과 초기화하는 예제 코드입니다.

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'YOUR_SECRET_KEY'
socketio = SocketIO(app)

FlaskSocketIO 모듈을 import 한 후, Flask 애플리케이션 객체를 생성하고 SECRET_KEY를 설정합니다. 설정된 애플리케이션 객체를 이용하여 SocketIO 객체를 초기화합니다.

이벤트 핸들링

Flask-SocketIO에는 클라이언트에서 발생한 이벤트에 대한 핸들링을 할 수 있는 기능을 제공합니다. 이벤트를 핸들링하기 위해서는 @socketio.on 데코레이터를 사용합니다. 다음은 이벤트를 핸들링하는 예제 코드입니다.

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

위 코드에서는 message라는 이름의 이벤트를 핸들링합니다. 클라이언트에서 message 이벤트를 발생시키면 핸들러 함수가 실행되고, 이벤트에 전달된 데이터를 받아와서 처리합니다. 그리고 response라는 이름의 이벤트를 클라이언트로 전송합니다.

클라이언트 구현

웹 소켓 통신은 클라이언트 사이드에서도 구현되어야 합니다. Flask-SocketIO는 클라이언트를 위한 JavaScript 라이브러리를 제공합니다. 이를 사용하여 클라이언트에서도 웹 소켓 통신을 할 수 있습니다. 다음은 클라이언트에서 Flask-SocketIO를 사용하는 예제 코드입니다.

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.socket.io/3.1.1/socket.io.min.js"></script>
    <script>
        var socket = io();
        
        socket.on('connect', function() {
            console.log('connected');
        });
        
        socket.on('response', function(data) {
            console.log('received response: ' + data);
        });
        
        function sendMessage() {
            var message = document.getElementById('message').value;
            socket.emit('message', message);
        }
    </script>
</head>
<body>
    <input type="text" id="message" placeholder="Enter a message">
    <button onclick="sendMessage()">Send</button>
</body>
</html>

위 코드에서는 클라이언트에서 connect 이벤트를 수신하면 로그에 connected를 출력하고, response 이벤트를 수신하면 로그에 받은 데이터를 출력합니다. sendMessage 함수는 입력된 메세지를 서버로 보냅니다.

실행

Flask-SocketIO 애플리케이션을 실행하기 위해서는 socketio.run() 함수를 호출해야 합니다. 다음은 애플리케이션을 실행하는 예제 코드입니다.

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', debug=True)

위의 코드에서는 애플리케이션을 localhost5000번 포트에서 실행하며, 디버그 모드로 실행합니다.

결론

이번 글에서는 Flask를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보았습니다. Flask-SocketIO를 활용하면 간편하게 실시간 통신 기능을 구현할 수 있으며, 다양한 웹 애플리케이션 개발에 유용하게 활용할 수 있습니다. Flask-SocketIO의 자세한 사용 방법은 공식 문서를 참고하시기 바랍니다.

참고 자료: Flask-SocketIO 공식 문서