SPOTI-TIER 운영 로직

경기 진행, 한눈에

참가자 인원에 따라 어떻게 쪼개지고, 어떤 순서로 진행되는지 — 기획자용 시각 자료

1. 전체 흐름 2. 매치 유형 3. 풀리그 (라운드로빈) 4. 파트너 배정 5. 토너먼트 6. 순위 결정 7. 랭킹 / 티어 8. 자주 묻는 질문

1전체 흐름

방을 만들고 사람들을 모은 뒤 시작하는 비동기 모집 모델. 만들자마자 시작하는 게 아님.

📣 핵심 컨셉
"방 개설" = "리그 생성" = "매치 룸 만들기" (모두 같은 말)
"방장" = "그 리그의 관리자". 자기가 만든 방을 운영하는 일반 사용자.
방을 미리 만들어 두고 → 시간 두고 사람 모으고 → 인원 차면 그때 "시작" 누름.
전역 시스템 관리자(admin 계정)는 별개. 모든 방을 모니터링·강제 종료 가능.

전체 흐름 (방장 입장)

1
로그인 / 회원가입
이메일 + 비밀번호. 처음이면 회원가입.
2
메인 화면
일반 퀵매치랭크 퀵매치랭킹 보기방 입장 (코드)
3
옵션 선택
단/복식 → (복식이면) 성별 → 진행방식 → 세부옵션
4
방 개설 (= 리그 생성)
모집 인원 + 코트 수 입력 → 방 생성 → 입장 코드 발급 (예: ST-A1B2). 이 시점에 방이 만들어져 보관됨.
5
🕒 모집 중 (로비 단계 · 비동기)
이 단계가 핵심. 시간 제한 없이 무한정 대기 가능.
• QR / 코드 / 카톡으로 공유 → 참가자가 시간 두고 들어옴
• 강퇴(추방) 가능 · 파트너 배정 가능 (고정 모드)
• 방장이 화면 끄고 다른 일 해도 방은 그대로 유지
• 인원 충분해지면 그때 "리그 시작" 누름
6
리그 시작
방장이 "시작" 버튼 클릭. 시작 후에도 추가 입장 옵션 있음 (정책 기반).
7
경기 진행
자동 생성된 대진표대로 진행. 점수는 +/- 버튼으로 입력. 실시간 순위표 업데이트.
8
최종 순위
포디움(1·2·3등) + 전체 순위표. 랭크 매치면 ELO 반영.

참가자(게스트) 입장에서는?

1
방장이 공유한 QR / 코드 받음
카톡, 메신저, 직접 전달 등 자유롭게 공유 가능
2
로그인 후 자동 입장
QR 스캔하면 메인 → 코드 감지 → 자동으로 그 방 로비로
3
로비에서 대기
방장이 "시작" 누를 때까지 대기. 그 사이 자유롭게 들어왔다 나갔다 가능.
4
시작되면 경기 화면 자동 전환
자기가 출전하는 경기 대진표와 점수 입력 화면을 봄

방의 4가지 상태

상태의미가능한 행동
draft방금 만들어진 방로비로 자동 이동. 코드 공유 시작
모집 중로비에서 사람 모으는 중입장 / 강퇴 / 파트너 배정 / 시작 대기
active리그 시작됨, 경기 중점수 입력 / 실시간 순위 확인 / 추가 입장(옵션)
completed최종 순위 확정결과 조회만 가능. ELO 반영 완료 (랭크인 경우)

편의 기능 3가지

정원 도달 시 자동 시작
방 만들 때 체크박스 켜면, 참가자가 인원만큼 모이는 순간 자동으로 리그 시작. 방장이 매번 "시작" 버튼 누를 필요 없음.
🔄
방장 재진입 복원
방장이 잠시 앱 끄고 돌아와도 메인에 "내 진행 중 방" 카드가 떠 있어 "이어가기" 가능. 점수·대진표·순위 그대로 복원됨.
📡
참가자 실시간 보기
방장이 점수 입력하면 다른 참가자들 화면도 즉시 갱신. 점수는 방장만 입력 (실수 방지). 게스트는 보기 전용.

2매치 유형 — 선택지의 조합

유저는 4가지 축에서 선택한다. 조합에 따라 경기 방식이 결정됨.

매치 시작
유형 선택
단식 (1 vs 1)
진행 방식
풀리그
모두가 모두와
한 번씩
토너먼트
예선 조별
+ 본선 브라켓
복식 (2 vs 2)
성별
남복 · 여복 · 혼복
파트너
랜덤
매 경기
파트너 바뀜
고정
짝지은 팀이
끝까지 유지

4가지 축 요약

선택지의미
유형단식 / 복식1 대 1 또는 2 대 2
성별 (복식만)남복 / 여복 / 혼복혼복은 1팀에 남녀 1명씩
진행 방식풀리그 / 토너먼트전원 골고루 vs 토너먼트 형식
세부 옵션랜덤 / 고정 / 2~4팀per조풀리그면 파트너 방식, 토너먼트면 조 구성
경기 종류일반 / 랭크랭크만 ELO/티어에 반영

3풀리그 (라운드로빈)

모든 참가자가 골고루 경기하도록 자동 배정. 코트가 적으면 라운드를 나눠서 진행.

핵심 원칙 3가지

⚖️
경기 수 균형
모든 참가자의 경기 수가 비슷하게 맞춰진다. 차이는 최대 1경기.
🔄
파트너 중복 최소화
(복식) 같은 사람과 또 짝이 되는 일을 최대한 피한다.
🆚
상대 중복 최소화
같은 상대와 또 만나는 일도 최대한 피한다. 인원이 적으면 어쩔 수 없이 겹침.

인원별 예상 경기 수 (복식, 코트 2개 기준)

참가자총 경기수1인당 평균 경기예상 라운드
4명31.53 (1코트씩)
6명4–62–33–4
8명10–145–75–7
10명15–206–88–10
12명22–308–1011–15
16명40–5010–1320–25

※ 실제 숫자는 코트 수, 휴식 균형 알고리즘에 따라 유동적

예시 · 복식 8명 2코트
참가자: A·B·C·D·E·F·G·H
라운드 1 — 4명 경기, 4명 대기
코트1: A·B vs C·D
코트2: E·F vs G·H
라운드 2 — 새로운 파트너 조합
코트1: A·E vs B·F
코트2: C·G vs D·H
↑ 자동으로 1라운드에서 같이 한 사람과 다시 짝이 되지 않게 배정.

4파트너 배정 (복식 전용)

복식 풀리그에서 파트너를 어떻게 정할지 선택할 수 있다.

옵션 A

개인 로테이션 (기본)

  • 매 경기마다 파트너가 바뀜
  • 모든 사람과 한 번씩 짝이 되도록 배정
  • 실력 차이를 골고루 분산시키고 싶을 때
  • 가장 일반적인 선택
옵션 B

파트너 고정

  • 대기실에서 직접 짝을 지정
  • 그 팀이 끝까지 같이 경기
  • 친구끼리, 부부끼리 등 고정 팀 운영
  • 전원 짝지어진 후에야 시작 가능

파트너 고정 모드 흐름

1
로비에서 참가자 명단 확인
2
두 명을 차례로 클릭 → 파트너 등록
또는 "자동 배정" 버튼으로 임의 짝짓기
3
모든 참가자가 짝지어지면 시작 버튼 활성화
짝수 인원이어야 함. 4명·6명·8명·10명·12명 …
4
팀 간 라운드로빈
팀 단위로 모든 다른 팀과 한 번씩 경기

5토너먼트

예선(조별 풀리그) → 본선(브라켓) 2단계 구조.

1단계 · 예선 — 조 나누기

참가자를 무작위로 섞어서 조에 배정. 각 조 안에서 풀리그로 모두 한 번씩 맞붙는다.

조 구성1개 조 인원본선 진출 인원특징
2팀/조2명 (단식) 또는 2팀 (복식)조 1위만 (1명/조)예선이 짧음. 토너먼트 결과 빠름.
3팀/조3명조 1·2위 (2명/조)예선·본선 균형. 가장 일반적.
4팀/조4명조 1·2위 (2명/조)예선이 길다. 본선은 정상 크기.
예시 · 16명 토너먼트 (4팀/조)
16명을 4명씩 4개 조로 나눔. 각 조 풀리그(3경기/사람) → 상위 2명씩 진출 → 8강 토너먼트.
A조
A1 (1위)
A2 (2위)
A3 탈락
A4 탈락
B조
B1 (1위)
B2 (2위)
B3 탈락
B4 탈락
C조
C1 (1위)
C2 (2위)
C3 탈락
C4 탈락
D조
D1 (1위)
D2 (2위)
D3 탈락
D4 탈락
↓ 8명이 본선(8강) 진출

2단계 · 본선 — 브라켓 (한 번 지면 탈락)

진출자 수가 2의 거듭제곱(4·8·16·32명)이 아니면 부전승(bye) 자동 처리.

예시 · 8강 브라켓
8강
A1 21
D2 15
B2 21
C1 18
C2 21
B1 19
D1 21
A2 17
준결승
A1 21
B2 14
D1 21
C2 19
결승
A1 21
D1 18
우승
🏆 A1
예시 · 부전승 처리 (6명 → 8강 패딩)
6명 진출 시 8강을 채우기 위해 2명에게 부전승(자동 진출). 부전승 받은 사람은 1라운드 쉬고 준결승부터 경기.
1라운드
P1
P2
P3 부전승
P4
P5
P6 부전승
준결승
P1/P2 승자
P3
P4/P5 승자
P6
결승
준결승 1 승자
준결승 2 승자

인원별 토너먼트 시나리오

참가조 구성예선본선전체 단계
8명4명 × 2조3경기/사람4강 → 결승예선 + 4강 + 결승
12명4명 × 3조3경기/사람8강(2 부전승) → 4강 → 결승예선 + 8강 + 4강 + 결승
16명4명 × 4조3경기/사람8강 → 4강 → 결승예선 + 8강 + 4강 + 결승
16명2명 × 8조1경기/사람8강 → 4강 → 결승 (조 1위만)예선이 짧고 본선 위주
32명4명 × 8조3경기/사람16강 → 8강 → 4강 → 결승전 단계 풀하우스
⚡ 토너먼트 라운드 표기
결승에서 거꾸로 셈: 결승 ← 준결승 ← 8강 ← 16강 ← 32강 ← 64강. 예: 16명이면 첫 라운드가 "8강"이고, 32명이면 첫 라운드가 "16강".

6순위 결정 — 어떻게 등수가 매겨지나

풀리그와 토너먼트는 등수 매기는 방식이 다르다.

풀리그 — 5단계 정렬 기준

위에서부터 차례로 비교. 같으면 다음 기준으로.

1
승 수 (많을수록 위)
이긴 횟수가 많은 사람이 위.
2
무 (있을 경우)
동일한 점수로 끝났을 때.
3
패 수 (적을수록 위)
4
총 득점 (게임 점수 합)
5승 5패라도 점수 많이 낸 사람이 위.
5
가입 순서 (먼저 등록한 사람)
최후의 동률 → 명단 위쪽 사람이 위. (자의적 기준이긴 함)

토너먼트 — 라운드 깊이 기준

  1. 우승 — 결승에서 이긴 사람
  2. 준우승 — 결승에서 진 사람
  3. 3·4위 — 준결승에서 진 사람들
  4. 5~8위 — 8강에서 진 사람들 (예선 성적 순으로 세부)
  5. 9~16위 — 16강에서 진 사람들
  6. 마지막 — 예선 탈락자 (본선 진출 못함)

최종 화면

1·2·3등을 포디움(시상대)로 시각화: 가운데가 1등, 왼쪽이 2등, 오른쪽이 3등. 그 아래에 전체 순위표가 따라옴.

7랭킹 / 티어 시스템 (랭크 매치 전용)

"랭크 퀵매치"로 진행한 경기만 개인 랭킹/티어에 반영된다.

티어 단계

다이아
플래티넘
골드
실버
브론즈
?언랭크

ELO 레이팅

배치전 (Placement)

🎯 첫 10판은 "배치전"
처음 가입한 유저는 랭크 매치를 10판 해야 정식 티어가 결정된다. 그 전까지는 "언랭크" 상태로 표시.

랭킹 페이지

메인에서 "랭킹 보기" 클릭 시 전체 랭킹 + 내 위치 확인 가능. 유저 클릭하면 상세 프로필(전적·승률·연승) 모달이 뜬다.

8자주 묻는 질문

참가자가 홀수면 어떻게 되나?
단식 풀리그는 홀수여도 가능. 매 라운드마다 한 명이 쉬는 식으로 자동 배정.
복식 풀리그는 4의 배수 또는 짝수가 이상적. 인원이 안 맞으면 일부 유저가 더 자주 쉬게 됨.
파트너 고정은 반드시 짝수여야 시작 가능.
경기 도중 누가 빠지면?
현재는 경기 시작 후 참가자 변경 불가. 빠진 자리는 호스트가 다른 사람으로 대체하거나, 부전승으로 처리해야 함. (향후 개선 예정)
두 사람이 동점이면 누가 위?
풀리그: 승 → 무 → 패 → 총 득점 → 가입 순서 차례로 비교 (Section 6 참조).
토너먼트: 같은 라운드에서 탈락하면 예선 성적이 좋았던 사람이 위.
일반 매치와 랭크 매치 차이?
일반: 친선전. ELO·티어에 영향 없음. 부담 없이 진행.
랭크: 결과가 개인 ELO 점수에 반영. 티어 변동 가능. 진지한 경기.
토너먼트에서 본선 진출 인원은 어떻게 정해지나?
2팀/조: 조 1위만 (총 진출 인원 = 조 수).
3팀/조 · 4팀/조: 조 1·2위 (총 진출 인원 = 조 수 × 2).
진출 인원이 2의 거듭제곱(4·8·16·32)이 아니면 자동으로 부전승 추가.
복식에서 "혼복"은 정확히 뭐?
혼합복식. 한 팀에 남자 1명 + 여자 1명으로 구성하는 방식. 남복(남남)·여복(여여)과 구분되며, 파트너 배정 시 이 규칙이 자동 적용됨.
QR 코드는 어떻게 쓰나?
호스트가 방을 만들면 로비에 QR 코드와 입장 코드(예: ST-A1B2)가 표시됨.
참가자는 카메라로 QR을 스캔하면 자동으로 입장. 또는 코드를 직접 입력해서 들어올 수도 있음.
로그인 안 된 상태에서 스캔하면 로그인 후 자동으로 그 방에 들어가게 됨.
경기 끝나고 점수를 잘못 입력했는데?
경기 화면이 살아 있는 동안에는 점수 +/- 버튼으로 수정 가능. "최종 순위" 버튼을 누르고 나면 확정. 랭크 매치는 최종 순위 확정 시 ELO 반영.
관리자(어드민)는 뭘 할 수 있나?
"관리자"는 두 가지 의미가 있음:

1. 방장 (= 그 리그의 관리자)
일반 사용자가 방을 만들면 그 방의 관리자가 됨. 인원 모집·강퇴·파트너 배정·시작/종료 결정 등 그 리그의 모든 운영 권한.

2. 전역 시스템 관리자
admin 권한을 가진 계정. /admin/dashboard.html 접근 가능. 전체 사용자 목록 조회·역할 변경·삭제, 모든 방 조회·강제 종료, 매치 현황, 감사 로그 등을 본다. "리그를 직접 만든다"기보다는 일반 사용자가 만든 방/매치를 모니터링·관리하는 역할.
방 만들고 나중에 시작해도 되나? 시간 제한은?
네, 무한정 대기 가능. SPOTI-TIER 는 비동기 모집 모델이라 방 만들고 → 카톡으로 공유 → 사람들이 시간 두고 들어옴 → 인원 충분해지면 그때 "시작" 누름. 자동 마감 시간은 없음.

방장이 화면 꺼도 방은 그대로 살아있음. (단, 방장이 돌아왔을 때 자기 방 목록에서 "이어하기" UI는 현재 미구현 — 향후 추가 예정)
리그 시작 후에도 사람을 더 추가할 수 있나?
풀리그: 가능. 다음 라운드부터 새 참가자가 자연스럽게 편성됨. 다만 이미 진행된 경기와 형평성 차이는 발생 (참가자 본인이 이해해야 함).

토너먼트: 비권장. 예선 조 구성과 본선 대진표가 시작 시점에 확정되기 때문. 시작 전에 인원이 다 모이는 게 깔끔함.

강퇴 + 새 입장으로 빠진 자리를 채우는 운영도 가능.
모집 인원에 안 차면 시작할 수 없나?
"모집 인원"은 목표치(권장값)로 동작. 더 적게 시작도 가능 (최소 조건만 충족하면 됨):
• 단식: 2명 이상
• 복식: 4명 이상
• 파트너 고정: 짝수, 전원 짝지어짐
• 토너먼트: 조 구성에 맞는 인원

반대로 목표치 초과해서 더 받을 수도 있음.
방장이 시작 안 하고 잠수타면?
"정원 도달 시 자동 시작" 옵션을 켜두면 방장 없이도 인원 차면 자동 시작됨 (방 만들 때 체크박스).
자동 시작 옵션 안 켜고 방장 잠수타면 그 방은 "모집 중"으로 남음. 전역 시스템 관리자가 어드민 대시보드에서 강제 종료 가능.

(향후: 일정 시간 활동 없으면 자동 만료 처리 예정)
방장이 앱 잠깐 끄면 진행 중인 경기는 어떻게 되나?
걱정 X. 점수·순위·대진표는 방장의 디바이스에 자동 저장됨.
메인 화면에 "내 진행 중 방" 카드가 떠 있어서 클릭하면 그대로 이어가기 가능.

⚠️ 주의: 디바이스를 바꾸거나 브라우저 데이터를 지우면 복원 안 됨 (현재 한정사항).
참가자도 점수 입력 가능한가?
아니요. 점수는 방장만 입력 가능.
참가자 화면에서는 점수 영역이 비활성화돼있고, 방장이 입력하면 모든 참가자 화면에서 실시간으로 갱신됨.
실수나 분쟁 방지를 위한 설계.
참가자가 방장보다 먼저 입장하면?
방을 만든 사람이 방장이라서 "먼저"는 불가능. 흐름은:
① 방장이 방 만듦 → ② 입장 코드 발급 → ③ 코드를 다른 사람들과 공유.
코드 받은 사람이 늦게 들어오거나 빨리 들어오는 건 자유.
모바일 앱에서도 똑같이 작동?
네. Capacitor 기반으로 iOS/Android 앱으로도 빌드 가능. 화면·기능은 웹과 동일. 실시간 동기화(Socket)도 똑같이 작동.