Post

엑셀에서 서비스로 — 헤이팸 팀 밸런스 시스템 개발기

엑셀에서 서비스로 — 헤이팸 팀 밸런스 시스템 개발기

반복되던 문제

스타크래프트 빠른무한 3:3 내전 모임 “헤이팸”을 운영하면서, 매번 같은 문제가 반복됐다.

  • 팀 밸런스가 맞지 않는다
  • 실력 차이에 대한 불만이 생긴다
  • 기록이 누적되지 않아 공정성이 흐려진다
  • 운영진이 수기로 관리하느라 피로도가 높다

이 문제를 풀어보려고 처음엔 기존 티어에 맞는 MMR을 설정해서 구글 스프레드시트로 관리하기 시작했다. 지금은 그게 헤이팸 커뮤니티에서 실제로 쓰이는 서비스로 발전했다.

시작: 엑셀 자동 팀 배정

가장 먼저 만든 건 엑셀 기반의 자동 팀 배정 시스템이었다. 그런데 기능이 하나둘 늘어나면서 깨달았다.

“이건 엑셀이 아니라 서비스로 만들어야 하는 영역이다”

프로젝트 목표

목표는 단순했다. 게임 커뮤니티를 위한 자동 팀 편성 + ELO + 통합 운영 플랫폼을 만드는 것. 특히 아래 네 가지에 초점을 맞췄다.

  • 내전 시 공정한 팀 배정
  • 경기 결과 기반 실력 반영
  • 운영 자동화
  • 통계 기반 재미 요소 강화

핵심 기능

1. 자동 팀 밸런스 (3v3)

참가자 6명을 선택하면, 나올 수 있는 모든 팀 조합의 경우의 수를 계산해서 MMR 기준 점수 차이가 가장 적은 조합을 자동으로 골라준다.

2. ELO 기반 MMR 시스템

기존 티어 기반 방식은 실력이 잘 반영되지 않고 계속 같은 결과가 나온다는 한계가 있었다. 그래서 이렇게 바꿨다.

  • 초기 MMR은 티어 기반으로 시작
  • 경기 결과를 입력하면 ELO 알고리즘으로 MMR을 자동 업데이트
  • 플레이할수록 점점 정확해지는 구조

3. 경기 입력 → 자동 반영

한 경기당 한 줄만 입력하면 된다. 팀 구성과 승리팀만 넣으면, MMR 업데이트 / 승·패 기록 / 통계 반영이 전부 자동으로 처리된다.

4. 개인 기록 시스템

플레이어별로 총 경기수, 승/패, 승률, 최근 10경기, 연승/연패, MMR 변화를 볼 수 있다.

5. 팀 조합 & 종족 통계

특정 3인 조합의 승률, PPP/PPT/PTZ 같은 종족 조합별 매치업 승률, 최근 경기 추세까지 분석한다. 여기에 개인 MMR 변화 그래프, 리그 평균 MMR 변화, 종족 승률 추세도 추가로 붙였다.

기술 스택

분야기술
FrontendReact, TypeScript, Next.js
BackendJava, Spring Boot
DatabaseSupabase (PostgreSQL)
배포Vercel (프론트), Render (백엔드)

데이터 구조

핵심 엔티티는 다섯 개로 정리했다.

  • User — 유저 정보 + MMR
  • Match — 경기 정보
  • MatchParticipant — 참가자 + 결과
  • MMRHistory — MMR 변화 기록
  • TeamStats — 팀 조합 통계

배운 점

1. 자동화보다 중요한 건 “운영 경험”이다. 처음엔 기능 위주로 만들었지만, 실제로 중요했던 건 운영진의 편의성이었다.

2. 데이터가 쌓이면 공정성이 생긴다. ELO 시스템을 적용하고 나서 체감 공정성이 확실히 올라갔다.

3. 엑셀은 시작일 뿐이다. 복잡한 로직과 확장성을 고려하면, 결국은 웹 서비스로 가야 한다는 걸 이번에 직접 느꼈다.

지금은 — 실제 커뮤니티에서 운영 중

이 프로젝트는 이제 계획 단계가 아니다. 헤이팸 커뮤니티에서 실제로 내전 때마다 이 시스템으로 팀을 짜고, 경기 결과를 입력하고, MMR과 통계를 쌓고 있다. 사용자(멤버들)의 피드백을 받아가며 계속 기능을 고치고 붙이는, 진짜 운영·유지보수 중인 서비스다.

남은 목표는 시즌 단위 리그 운영, 유저 피드백 기반 개선을 계속 쌓아가는 것이다.

단순한 토이 프로젝트가 아니라, 실제 문제를 해결하기 위해 시작된 서비스다. 엑셀에서 시작했지만 지금은 커뮤니티 멤버들과 함께 계속 발전시키는 중인 제품이다.

This post is licensed under CC BY 4.0 by the author.