Flask-SocketIO와 MySQL을 사용한 실시간 자원봉사자 동기화 엔진 구축
Source: Dev.to
핵심 개념
관리자는 자원봉사자의 물리적 QR ID를 스캔하고, 자원봉사자의 상태(Free / Busy / Assigned)가 조직 내 모든 연결된 대시보드에 즉시 업데이트됩니다—페이지를 새로 고침할 필요가 없습니다.
기술 스택
- 백엔드: Python & Flask
- 실시간 레이어: Flask‑SocketIO (WebSockets)
- 데이터베이스: MySQL + 커스텀 연결 풀링
- 인증: Werkzeug (해싱 & 단일 세션 강제)
- UI/UX: Vanilla JS & CSS (AI 모델 도움으로 완성)
기술 하이라이트
실시간 상태 동기화
프론트엔드가 업데이트를 폴링하는 대신, 서버는 데이터베이스 업데이트가 발생하는 순간 변화를 푸시합니다. Flask‑SocketIO를 사용해 전역 데이터 일관성을 100 ms 이내에 유지하도록 브로드캐스팅 로직을 구현했습니다.
자동 스키마 초기화
커스텀 초기화 레이어가 시작 시 MySQL 인스턴스를 검사하고, 필요한 테이블을 생성하며, 연결 풀을 자동으로 설정합니다. 이를 통해 환경을 “플러그‑앤‑플레이” 및 프로덕션 준비 상태로 만들 수 있어 수동 SQL 임포트가 필요 없습니다.
리소스 관리
상태를 유지하는 WebSocket 환경 내에서 MySQL 연결 풀을 관리하는 것이 가장 큰 도전 과제였습니다. 소켓이 끊어질 때 데이터베이스 연결이 누수되지 않도록 보장하는 방법을 익혀 세션 처리와 리소스 사용량을 개선했습니다.
소스 코드 및 기여
프로젝트는 완전 오픈소스입니다. 특히 브로드캐스팅 로직을 살펴보세요.
자원봉사자 관리 시스템
실시간 QR 기반 오케스트레이션 플랫폼으로, 이벤트나 조직에서 자원봉사자와 손님을 관리합니다. 물리적 ID 카드와 자원봉사자를 연결하고, 가용성을 추적하며, QR 코드 검증을 통해 도착하는 손님에게 배정하는 과정을 간소화합니다.
🚀 주요 기능
- 실시간 오케스트레이션 – Flask‑SocketIO 기반; 모든 터미널에 즉시 업데이트를 브로드캐스트합니다.
- QR ID 카드 연동
- 물리적 QR 코드를 자원봉사자 프로필에 안전하게 연결.
- 손님에게 자원봉사자를 빠르게 스캔하여 배정.
- 카메라 검증을 통한 언링크로 무단 변경 방지.
- 자원봉사자 관리
- 수동 등록 및 CSV 대량 업로드.
- 즉시 상태 추적 (Free / Busy).
- 이름, ID, 등록 번호별 검색 및 필터링.
- 손님 레지스트리
- 손님 도착 시간 및 배정 이력 추적.
- 자동 ID 생성 (예: G‑101, G‑102).
- CSV를 통한 손님 데이터 대량 import.
- 관리자 대시보드
- 사용자 관리를 위한 마스터 컨트롤.
- 보안 ID 생성 및 기타 관리 도구.

