제 5 장
용병 구인 기능 개발
본 장은 팀 운영자가 부족한 인원을 채우는 경로 전체를 다룬다. 공고를 올리는 시점부터 참여가 확정되고 경기 후 기록이 남기까지가 범위이며, 확정된 참여자의 실력을 어떻게 검증하는지는 제 6 장에서 기술한다.
1) 모집 공고 등록
공고 항목
운영자가 입력하는 항목은 아래와 같다. 매칭에 직접 쓰이는 항목은 필수로 두어, 조건 없는 공고가 올라오는 것을 막는다.
| 항목 | 필수 | 설명 |
|---|---|---|
| 종목 | ● | 〔확인 필요: 1차 지원 종목 범위〕 |
| 일시 | ● | 경기 시작·종료 시각 |
| 장소 | ● | 구장명과 좌표. 좌표는 매칭의 거리 계산에 쓴다 |
| 모집 인원 | ● | 포지션별 인원 |
| 필요 포지션 | ● | 종목별 포지션 목록에서 선택 |
| 요구 실력대 | ● | 등급 구간으로 지정 |
| 마감 시각 | ● | 미지정 시 경기 시작 〔확인 필요: 기본 마감 여유〕 전으로 자동 설정 |
| 참가비 | ○ | 1인 기준 금액 |
| 비고 | ○ | 구장 조건, 유니폼 색상 등 |
등록 처리 흐름
- 운영자가 공고를 작성한다.
- 서버가 유효성 규칙을 검사한다. 하나라도 어긋나면 등록을 거부하고 사유를 함께 반환한다.
- 검사를 통과하면 공고를
모집중상태로 공개하고, 조건에 맞는 후보에게 알림을 보낸다.
유효성 규칙은 다음과 같다.
- 경기 일시는 현재 시각 이후여야 한다.
- 마감 시각은 경기 시작 시각보다 앞서야 한다.
- 포지션별 모집 인원의 합은 1명 이상이어야 한다.
- 동일 운영자가 같은 시간대에 올린 공고와 겹치지 않아야 한다.
공고 상태
공고는 아래 상태를 순서대로 지난다. 상태 전이는 서버가 소유하며, 클라이언트가 직접 상태를 바꾸지 못한다.
| 상태 | 진입 조건 | 다음 상태 |
|---|---|---|
모집중 |
등록 완료 | 마감, 취소 |
마감 |
마감 시각 도달 또는 정원 충족 | 확정, 취소 |
확정 |
운영자가 참여자를 확정 | 종료, 취소 |
종료 |
경기 종료 시각 경과 | — |
취소 |
운영자 취소 또는 정원 미달 | — |
종료로 넘어간 공고는 경기 기록 입력과 영상 업로드 대상이 되며, 업로드된 영상의 색인이 6장의 스탯 갱신 입력이 된다.
2) 지원 및 자동 매칭
지원 접수
지원 시점에 두 가지를 확인한다. 같은 공고에 대한 중복 지원을 막고, 지원자가 이미 확정된 다른 경기와 시간이 겹치는지 검사한다. 겹치면 지원을 거부한다. 이 검사가 없으면 한 명이 여러 경기에 확정되어 노쇼가 구조적으로 발생한다.
매칭 에이전트 호출
지원이 접수될 때마다 매칭을 다시 계산하지 않는다. 지원자가 들어올 때마다 모델을 호출하면 비용과 지연이 지원자 수에 비례해 늘어나기 때문이다. 대신 아래 두 시점에만 호출한다.
- 운영자가 후보 목록을 열람할 때
- 마감 시각에 도달했을 때
에이전트에 넘기는 입력은 공고 조건과 지원자 목록이며, 받는 출력은 순위가 매겨진 추천 목록과 각 추천의 근거 문장이다. 에이전트 구성과 도구 스키마는 제 4 장에 기술한다.
순위 산출 요소
| 요소 | 방향 | 근거 |
|---|---|---|
| 포지션 적합도 | 높을수록 우선 | 공고가 지정한 포지션 수행 가능 여부 |
| 실력대 근접도 | 가까울수록 우선 | 경기 수준의 편차를 줄인다 |
| 이동 거리 | 가까울수록 우선 | 좌표 간 직선거리 |
| 신뢰도 | 높을수록 우선 | 영상 근거가 쌓인 스탯을 우선한다 (6장) |
| 노쇼 이력 | 적을수록 우선 | 최근 〔확인 필요: 집계 기간〕 이내 이력 |
가중치는 〔확인 필요: 요소별 가중치 확정〕이며, 시험 결과에 따라 조정한 값을 제 7 장에 기록한다.
후보 부족 시 완화
조건을 모두 만족하는 후보가 모집 인원에 미치지 못하면, 아래 순서로 조건을 한 단계씩 완화하고 완화 사실을 운영자에게 함께 표시한다. 경기가 무산되는 것보다 조건을 낮춰 성사시키는 편이 낫지만, 무엇을 양보했는지는 반드시 드러내야 한다.
- 실력대를 인접 등급까지 확대한다.
- 이동 거리 상한을 확대한다.
- 부포지션 수행 가능자를 포함한다.
최종 선택은 운영자가 한다
에이전트는 순위와 근거만 제시하고, 참여자 확정은 운영자가 직접 누른다. 매칭 근거를 문장으로 함께 내보내는 것도 운영자가 판단을 검토할 수 있게 하기 위해서다. 자동 확정을 넣지 않은 이유는 잘못된 매칭의 책임 소재가 불분명해지고, 운영자가 아는 팀 사정을 반영할 방법이 사라지기 때문이다.
3) 참여 확정 및 노쇼 관리
확정과 취소
운영자가 참여자를 확정하면 해당 지원자에게 확정 알림을 보내고, 선택되지 않은 지원자에게는 마감 결과를 알린다. 확정된 참여자는 경기 시작 〔확인 필요: 취소 허용 기한〕 전까지 취소할 수 있으며, 취소가 발생하면 다음 순위 후보를 대기자로 승격시켜 운영자에게 알린다.
노쇼 판정
노쇼는 확정된 참여자가 경기에 나타나지 않은 경우를 말하며, 운영자의 신고와 함께 기록한다. 판정 기준과 제재 단계는 아래와 같다.
| 구분 | 기준 | 조치 |
|---|---|---|
| 사전 취소 | 허용 기한 이전 취소 | 이력만 기록 |
| 지각 취소 | 허용 기한 이후 취소 | 노쇼 0.5회로 집계 |
| 노쇼 | 무통보 불참 | 노쇼 1회로 집계 |
| 제재 | 〔확인 필요: 누적 기준〕 | 일정 기간 지원 제한 |
운영자의 일방적 신고만으로 제재가 확정되지 않도록, 신고에 대한 참여자의 이의 제기 경로를 둔다. 〔확인 필요: 이의 처리 주체와 절차〕
경기 기록 연계
경기가 종료 상태로 넘어가면 참여자별 기록 입력과 경기 영상 업로드를 요청한다. 결과는 두 곳으로 흘러간다. 하나는 참여 이력(노쇼 포함)으로 다음 매칭의 순위에 반영되고, 다른 하나는 영상 색인을 거쳐 제 6 장의 검증 입력이 된다.
영상 업로드는 강제하지 않는다. 다만 영상이 없는 경기는 근거가 남지 않아 참여자의 스탯이 갱신되지 않으므로, 검증된 스탯을 원하는 이용자일수록 업로드된 경기를 선호하게 된다.