시즌 등록이 열리는 날이 제일 조마조마하다. 열여덟 팀, 정원을 합치면 247자리. 이게 며칠 안에 채워진다. 문제는 누가 채우느냐다.

등록하는 사람은 두 부류다. 지난 시즌을 마치고 이어서 오는 기존 멤버와 처음 오는 신규 멤버. 우리는 재등록 기간을 먼저 두고 그 다음에 일반 등록을 연다. 기존 멤버를 먼저 챙기는 게 맞다고 봤다.

여기에 함정이 있었다. 인기 팀은 재등록 기간에 다 찬다. 그러면 일반 등록이 열렸을 때 신규 멤버에게 남은 건 인기 없는 팀들이다. 처음 오는 사람이 가장 나쁜 선택지를 받는 구조다. 이건 서서히 독이 된다. 신규가 줄면 몇 시즌 뒤에 기존 멤버만 남고 그 다음엔 자연 감소만 남는다.

절반만 열고 나중에 푼다

재등록 기간에는 각 팀 정원의 절반만 열기로 했다. 정원이 스물이면 열 자리만 판다. 재등록 마감 시각에 나머지를 일괄로 푼다. 기존 멤버는 여전히 먼저 고르고, 신규에게도 인기 팀 자리가 남는다.

만들면서 신경 쓴 건 복원 방식이다. 절반으로 줄였다가 원래 숫자로 되돌리면 안 된다. 그 사이 팔린 자리가 되살아난다. 정원 20을 10으로 줄이고 8자리가 팔려 2가 남았다고 하자. 여기서 20으로 덮어쓰면 총 수용이 28이 된다.

그래서 되돌릴 양을 미리 적어두고, 복원할 때 덮어쓰지 않고 그만큼을 더한다. 남은 2에 10을 더해 12. 팔린 8을 합치면 정확히 20이다.

마감을 내 노트북에 맡기지 않는다

마감 시각을 정확히 닫으려면 그 시각에 뭔가 실행돼야 한다. 처음엔 예약 실행으로 하려 했는데, 노트북이 절전이면 그 시각이 그냥 지나간다. 지나간 예약은 깨어나도 다시 안 돈다.

그래서 마감 시각 자체를 판매 시스템에 미리 걸었다. 판매 종료 시각을 상품에 설정해두면 내 컴퓨터가 켜져 있든 말든 정확히 닫힌다. 그러고 나면 나머지 자리를 푸는 일은 급하지 않아진다. 이미 닫힌 구간이라 그 안에서 아무 때나 돌아도 멤버 눈에 차이가 없다.

한 번 아찔한 게 있었다. 팀 하나의 재고 조회가 실패했는데 오류가 아니라 이상한 값으로 돌아왔다. 그대로 두면 그 팀만 모르는 새 적게 복원된다. 아무도 모른다. 그 팀에 등록하려던 사람만 자리가 없다고 느낀다. 그래서 조회가 실패하면 실패로 멈추게 고쳤다. 위험한 건 실패하는 게 아니라 반쯤 성공하는 것이다.

따라 해보기

먼저 온 사람이 다 가져가는 구조가 있다면, 전부 열지 말고 절반만 열어보면 된다. 그리고 정확한 시각에 닫혀야 하는 일은 내 손이 아니라 시스템에 미리 걸어둔다.