안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask와 비동기 작업을 활용한 실시간 알림 시스템 구축 방법을 알아보겠습니다. 실시간 알림 시스템은 사용자 경험을 향상시키며, 특히 새로운 알림이나 업데이트가 즉시 사용자에게 전달되어야 할 때 유용합니다.
1. 실시간 알림의 필요성
실시간 알림 시스템은 다음과 같은 상황에서 유용하게 사용할 수 있습니다.
· 메시지 알림 (예: 채팅 시스템)
· 주문 상태 업데이트
· 사용자 활동 알림
2. 시스템 개요
이 시스템은 Flask와 Flask-SocketIO로 웹소켓을 이용해 실시간 알림을 처리하며, Celery와 Redis를 통해 비동기 작업을 처리합니다. 기본적으로 사용자 요청을 Celery로 보내 작업을 처리하고, 작업이 완료되면 웹소켓을 통해 클라이언트에게 실시간 알림을 보냅니다.
3. Flask-SocketIO 설치 및 설정
웹소켓을 위한 Flask-SocketIO를 설치합니다.
pip install flask-socketio
from flask import Flask, request, jsonify
from flask_socketio import SocketIO, emit
from celery import Celery
app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
socketio = SocketIO(app)
def make_celery(app):
celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
return celery
celery = make_celery(app)
4. 비동기 작업 정의
비동기 작업은 Celery로 처리하며, 작업 완료 시 웹소켓을 통해 클라이언트로 알림을 보냅니다.
@celery.task
def background_task(data):
# 예시 작업 (예: 파일 처리)
result = f"Data processed: {data}"
# 작업 완료 후 실시간 알림 전송
socketio.emit('task_complete', {'data': result}, broadcast=True)
return result
5. 클라이언트에서 웹소켓 연결
이제 클라이언트가 실시간 알림을 받을 수 있도록 웹소켓을 설정합니다. 클라이언트에서 Socket.IO 라이브러리를 사용하여 서버와 실시간으로 연결합니다.
<!DOCTYPE html>
<html>
<head>
<title>Real-time Notifications</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js"></script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", () => {
const socket = io.connect('http://localhost:5000');
socket.on('task_complete', (data) => {
alert(`알림: ${data.data}`);
});
});
</script>
</head>
<body>
<h1>실시간 알림 시스템</h1>
</body>
</html>
6. 알림 트리거 라우트
Flask에서 클라이언트 요청을 받아 비동기 작업을 실행하고 알림을 전송하는 라우트를 정의합니다.
@app.route('/start_task', methods=['POST'])
def start_task():
data = request.json.get('data')
task = background_task.delay(data)
return jsonify({"task_id": task.id, "status": "작업이 시작되었습니다."}), 202
7. Celery 워커와 SocketIO 서버 실행
Celery 워커와 Flask-SocketIO 서버를 동시에 실행합니다.
celery -A app.celery worker --loglevel=info
Flask 애플리케이션을 실행할 때는 socketio.run(app)을 사용하여 웹소켓을 활성화합니다.
if __name__ == '__main__':
socketio.run(app, debug=True)
다음 시간에는 Flask와 프론트엔드 연동을 통한 완성도 높은 웹 애플리케이션 구축을 다루겠습니다!
- 이전 수업 목록
'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 31강 - Flask로 만든 애플리케이션을 배포하고 최적화하는 방법 (1) | 2024.11.11 |
---|---|
[Python 강의] 30강 - Flask와 프론트엔드 연동을 통한 완성도 높은 웹 애플리케이션 구축 (1) | 2024.11.08 |
[Python 강의] 28강 - Flask를 이용한 비동기 작업 처리 (0) | 2024.11.06 |
[Python 강의] 27강 - Flask 애플리케이션을 위한 보안 최적화 (0) | 2024.11.05 |
[Python 강의] 26강 - Flask 애플리케이션에 대한 최적화 기법 (0) | 2024.11.04 |