Flask는 Python으로 작성된 웹 프레임워크로서, RESTful API를 만들기에 매우 유용합니다. 하지만, Flask-RESTful은 기본적으로 요청/응답 모델을 사용하고 있으므로 실시간 데이터 전송을 위해선 다른 방법이 필요합니다. 이때 소켓 통신을 이용하면 서버와 클라이언트간에 실시간으로 데이터를 주고받을 수 있습니다.
소켓 통신 설정
먼저, Flask를 위한 소켓 통신 기능을 추가해야 합니다. flask-socketio
패키지를 사용하면 간편하게 소켓 통신을 설정할 수 있습니다. 아래와 같이 명령을 통해 flask-socketio
를 설치합니다.
pip install flask-socketio
또한, 소켓 통신을 위한 클라이언트 라이브러리인 socket.io-client
도 설치해야 합니다. 필요한 경우, 아래와 같이 명령을 통해 설치할 수 있습니다.
npm install socket.io-client
Flask 소켓 통신 설정
Flask에서 소켓 통신을 사용하기 위해서는 flask-socketio
패키지를 초기화해야 합니다. 먼저, Flask 애플리케이션을 생성한 후, 아래와 같이 소켓 통신을 초기화합니다.
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
SocketIO 객체를 사용하여 이벤트를 처리하기 위한 데코레이터를 정의하고, 해당 이벤트가 발생했을 때 실행할 함수를 작성합니다. 예를 들어, 클라이언트에서 ‘message’ 이벤트가 발생하면 서버에서 ‘response’ 이벤트를 전송하는 코드는 다음과 같습니다.
@socketio.on('message')
def handle_message(message):
# do something with the received message
response = "Received message: " + message
socketio.emit('response', response)
위의 코드는 클라이언트에서 ‘message’ 이벤트를 발생시키면, 해당 메시지를 받아 ‘response’ 이벤트를 전송하는 기능을 구현한 예시입니다.
클라이언트 소켓 통신 설정
클라이언트 측에서도 소켓 통신을 사용하기 위해 socket.io-client
를 사용합니다. 클라이언트에서 소켓 통신을 설정하는 방법은 다음과 같습니다.
import io from 'socket.io-client'
const socket = io('http://localhost:5000')
// handle response event
socket.on('response', (response) => {
console.log(response)
})
// send message event
socket.emit('message', 'Hello, Server!')
위의 코드는 서버에 연결한 후 ‘response’ 이벤트를 받아 처리하고, ‘message’ 이벤트를 전송하는 기능을 구현한 예시입니다.
결론
Flask-RESTful에서 소켓 통신을 이용하여 실시간 데이터 전송을 구현하는 방법에 대해 알아보았습니다. Flask-RESTful과 flask-socketio
를 사용하여 소켓 통신을 설정하고, 클라이언트에서는 socket.io-client
를 사용하여 소켓 통신을 구현할 수 있습니다. 이를 통해 실시간으로 데이터를 주고받을 수 있는 환경을 구축할 수 있습니다.
참고 문서:
- Flask: https://flask.palletsprojects.com/
- Flask-SocketIO: https://flask-socketio.readthedocs.io/
- Socket.IO: https://socket.io/