BidArena — e스포츠 실시간 경매 시스템 개발기
숨고를 통해 의뢰받은 e스포츠 팀 드래프트 실시간 경매 시스템입니다. 참가자들이 동시에 접속하여 선수를 입찰하고, 팀을 구성하는 긴장감 넘치는 경험을 온라인으로 구현했습니다.
숨고를 통해 의뢰받은 e스포츠 팀 드래프트 실시간 경매 시스템입니다.
참가자들이 동시에 접속하여 선수를 입찰하고, 팀을 구성하는 긴장감 넘치는 경험을 온라인으로 구현했습니다. 서버 주도 타이머와 실시간 WebSocket 통신으로 모든 참가자가 같은 순간을 공유합니다.
주요 기능
실시간 경매
WebSocket 양방향 통신으로 실시간 입찰
서버 주도 타이머 (1초 브로드캐스트)
Heartbeat 온라인 추적 (1초 간격)
입찰, 유찰, 재입찰 — 실제 경매장 긴장감 구현
대회 운영
경매방 다중 세션 관리
선수 큐/순서 시스템 (유찰 시 재입찰)
팀별 포인트 관리
배너 관리 (8개 포지션)
인증/보안
JWT 인증 (24시간)
다중 역할 시스템 (관리자/입찰자/선수)
Optimistic locking으로 입찰 정합성 보장
기술 스택
Backend: Python, Flask, Flask-SocketIO
Frontend: Vanilla JavaScript, Socket.IO Client
Database: SQLite
Infra: Docker, Nginx
도메인: cheeseburger.co.kr
개발 과정
가장 공을 들인 부분은 실시간 동기화입니다. 경매라는 특성상 모든 참가자가 정확히 같은 타이머를 보고, 같은 순간에 입찰 결과를 받아야 합니다. 서버에서 1초마다 브로드캐스트하는 서버 주도 타이머 방식을 채택해 클라이언트 간 시간 오차를 최소화했습니다.
두 번째 도전은 입찰 정합성이었습니다. 동시 입찰이 발생할 수 있는 구조에서 Optimistic locking과 서버 측 검증으로 중복 입찰과 데이터 불일치를 방지했습니다.
세 번째는 유찰/재입찰 시스템입니다. 선수가 유찰되면 큐에 다시 추가되어 재경매가 진행되는 로직을 안정적으로 구현했습니다.
회고
1. WebSocket 기반 실시간 시스템은 연결 관리가 핵심입니다 — Heartbeat로 연결 상태를 추적하고, 재연결 로직을 꼼꼼히 구현해야 합니다
2. 서버 주도 타이머는 클라이언트 타이머보다 신뢰도가 높지만, 네트워크 지연을 고려한 보정이 필요합니다
3. SQLite는 소규모 서비스에 충분히 실용적입니다 — 별도 DB 서버 없이 빠르게 배포할 수 있습니다
BidArena의 전체 구조와 스크린샷은 포트폴리오 상세 페이지에서 확인할 수 있습니다.
이 프로젝트는 CodeLune에서 개발했습니다.
실시간 경매, 웹 개발이 필요하시다면 편하게 문의해주세요.