모벤MOVE BEYOND

콘솔·어드민

한도 초과를 막는 평가위원 배정 API

동시 요청이 몰려도 한도 초과 배정을 데이터베이스에서 막고, 끄고 켠 결과를 나란히 보여드립니다.

app-production-bd1e.up.railway.app
한도 초과를 막는 평가위원 배정 API 화면

열어 보시면 이런 걸 확인하실 수 있습니다

  • 가드 끔·켬 대조 화면에서 같은 요청의 초과 배정 건수를 나란히 비교
  • 배정 한 건을 눌러 동일 지역 → 인접 시·도 → 수동 대기 3단 경로 확인
  • 실험 기록 화면에서 요청 수·동시 스레드 수와 응답 시간 백분위 확인
  • 전일·당일 표에서 날짜가 바뀌면 당일 슬롯이 비는 구조 확인

만들면서 풀어야 했던 것

  • 제약 없는 경로에 동시 20건을 보내, 하루 한도가 2인 위원 한 명에게 12건(초과 10건)이 배정되는 실패를 먼저 재현했습니다. 배정 테이블에 위원·배정일자·슬롯번호 복합 UNIQUE를 걸고 슬롯 1번부터 순차로 시도하는 방식으로 바꾼 뒤 같은 조건에서 초과 0건을 확인했습니다(가드를 끈 쪽의 초과 건수는 실행마다 달라지고, 켠 쪽은 구조적으로 항상 0입니다).
  • 데이터베이스 제품이 확정되기 전에 착수해야 할 수 있다고 보고, 제품마다 문법과 동작이 갈리는 잠금 절이나 upsert에 기대지 않았습니다. 어느 제품에나 표준으로 있는 복합 UNIQUE와 중복 키 에러 반환 두 가지로만 한도를 강제했고, 그 수단을 쓰지 않는다는 사실 자체를 검증 스크립트 어서션으로 고정했습니다.
  • 프로그램이 스스로 센 숫자는 근거가 되지 않는다고 보고, 실행 중에 세어 보고하지 않고 실험이 끝난 뒤 배정 테이블을 위원별로 다시 묶어 한도를 넘긴 행 수를 더하는 방식으로 산출했습니다. 경합이 실제로 일어났는지 확인할 수 있도록 중복 키 충돌 횟수도 함께 실었습니다.

비슷한 걸 만들어 보고 싶으시다면

구간 견적으로 규모를 먼저 가늠해 보시거나, 조건을 적어 보내 주시면 범위를 정리해 회신드립니다.