[파이썬] 웹 프레임워크를 이용한 실시간 웹소켓 통신

웹소켓은 클라이언트와 서버 간 양방향 통신을 제공하는 프로토콜입니다. 이를 이용하면 실시간 데이터 전송이 가능하고, 실시간 채팅 애플리케이션, 주식 시장 업데이트, 게임 등 다양한 분야에서 활용될 수 있습니다.

Python에는 다양한 웹 프레임워크가 있지만, 이번 글에서는 Flask 웹 프레임워크와 Flask-SocketIO 라이브러리를 사용하여 웹소켓 통신을 구현하는 방법을 알아보겠습니다.

Flask 설치

먼저 Flask를 설치해야 합니다. 다음 명령어를 사용하여 Flask를 설치합니다.

pip install flask

Flask-SocketIO 설치

Flask-SocketIO는 Flask와 웹소켓을 통합하는 라이브러리입니다. Flask-SocketIO를 설치하려면 다음 명령어를 사용합니다.

pip install flask-socketio

서버 구현

다음은 Flask와 Flask-SocketIO를 사용하여 간단한 서버를 구현하는 예제 코드입니다.

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

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

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

@socketio.on('message')
def handle_message(message):
    emit('message', message, broadcast=True)

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

위 코드에서 app 객체는 Flask 애플리케이션을 초기화하고, socketio 객체는 Flask-SocketIO를 초기화합니다. / 경로는 기본 페이지로 설정되어 있으며, index 함수에서는 해당 템플릿을 렌더링합니다.

@socketio.on('message') 데코레이터는 클라이언트로부터 받은 message 이벤트를 처리합니다. handle_message 함수에서는 받은 메시지를 다시 message 이벤트로 보내줍니다.

클라이언트 구현

웹소켓 통신을 사용하는 클라이언트 코드는 JavaScript로 작성됩니다. 다음은 간단한 클라이언트 코드 예제입니다.

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.3/socket.io.js"></script>
    <script>
      var socket = io.connect('http://localhost:5000');
      
      socket.on('message', function(data) {
        var message = document.createElement('p');
        message.innerHTML = data;
        document.body.appendChild(message);
      });
      
      function sendMessage() {
        var message = document.getElementById('message').value;
        socket.emit('message', message);
      }
    </script>
  </head>
  <body>
    <input type="text" id="message" placeholder="Type a message...">
    <button onclick="sendMessage()">Send</button>
  </body>
</html>

위 코드에서 io.connect('http://localhost:5000') 부분은 서버의 주소와 포트를 설정합니다. 실제 배포 환경에서는 해당 부분을 수정해야 합니다.

socket.on('message') 함수는 서버로부터 받은 message 이벤트를 처리합니다. sendMessage() 함수는 입력된 메시지를 서버로 보내는 역할을 합니다.

실행

위의 서버 코드를 app.py 파일로 저장하고, 클라이언트 코드를 index.html 파일로 저장합니다. 다음 명령어를 실행하여 서버를 실행합니다.

python app.py

웹 브라우저에서 http://localhost:5000으로 접속하면 실시간 채팅이 가능한 페이지가 나타납니다. 입력한 메시지는 다른 클라이언트들에게도 전달됩니다.

이처럼 Flask 웹 프레임워크와 Flask-SocketIO 라이브러리를 이용하여 실시간 웹소켓 통신을 구현할 수 있습니다. 어플리케이션의 요구사항에 맞게 다양한 기능을 추가할 수 있고, 다른 라이브러리들과 연동하여 더욱 다양한 기능을 구현할 수 있습니다.

위의 예제는 간단한 기능을 보여주기 위한 것이며, 실제 애플리케이션 개발에는 보안 및 오류 처리 등 다양한 추가 작업이 필요할 수 있습니다.

Happy coding!