웹 소켓(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)
Flask
와 SocketIO
모듈을 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)
위의 코드에서는 애플리케이션을 localhost
의 5000
번 포트에서 실행하며, 디버그 모드로 실행합니다.
결론
이번 글에서는 Flask를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보았습니다. Flask-SocketIO를 활용하면 간편하게 실시간 통신 기능을 구현할 수 있으며, 다양한 웹 애플리케이션 개발에 유용하게 활용할 수 있습니다. Flask-SocketIO의 자세한 사용 방법은 공식 문서를 참고하시기 바랍니다.
참고 자료: Flask-SocketIO 공식 문서