Context
커뮤니티 내전을 준비할 때 운영진은 Discord 참가 명단과 실제 참여자를 대조하고, 역할과 티어를 고려해 두 팀을 구성한 뒤 결과를 다시 공유해야 합니다. 참가자 정보와 운영 메모가 여러 곳에 흩어져 있어 경기마다 같은 정리 작업을 반복하고 있었습니다.
Decisions
실사용 중인 OWKR Balance는 Discord 명단을 읽거나 참가자를 직접 입력한 뒤, 실제 참여자와 대조해 팀 조합을 만듭니다. 선호 역할, 비선호 역할, 미배치 상태, 탱커 격차, 마이크 사용 여부를 함께 평가합니다. 운영자는 여러 대안 중 하나를 선택하거나 선수를 직접 교체할 수 있습니다.
공유 유저 시트와 개인 운영 메모는 저장 범위를 분리했습니다. Discord OAuth와 관리자 목록으로 내부 접근을 제한했고, 여러 운영자가 함께 쓰는 데이터는 Upstash Redis에 저장합니다. 완성된 대진표는 이미지로 복사해 Discord에 바로 붙여넣을 수 있습니다.
별도로 Gather Bot도 개발했습니다. 모집 순서, 대기열, 티어 수집, 재시작 복구를 구현하고 동시 참여 시나리오까지 검증했지만 실제 커뮤니티에는 도입하지 않았습니다. 봇의 테스트 결과는 운영 성과가 아니라 개발 검증 기록으로만 구분합니다.
Outcome
OWKR Balance는 현재 운영진의 내전 준비와 결과 공유에 사용되고 있습니다. Gather Bot은 구현과 검증을 마쳤지만 도입하지 않았습니다. 두 프로젝트의 상태를 분리해, 이 사례에서는 실사용 중인 밸런싱 도구의 결과만 중심으로 설명합니다.
근거
OWKR 내부 밸런싱 도구의 제품 설계, 팀 구성 알고리즘, 운영 화면과 데이터 구조 구현
Live operations · Constraint matching · Admin workflow · Shared roster
React 19 · Vite · TypeScript · Vercel Functions · Upstash Redis · Discord OAuth · Vitest