Skip to content

SQL 채점 공정성과 시험 운영 안정성 개선 - #73

Merged
pwh9882 merged 2 commits into
devfrom
fix/fair-submission-lifecycle
Sep 7, 2026
Merged

SQL 채점 공정성과 시험 운영 안정성 개선#73
pwh9882 merged 2 commits into
devfrom
fix/fair-submission-lifecycle

Conversation

@pwh9882

@pwh9882 pwh9882 commented Sep 5, 2026

Copy link
Copy Markdown

목적

채점 서버 장애가 학생의 마지막 제출 기회를 소진하고, 마감 전에 접수한 정답도 처리 완료가 늦으면 점수가 저장되지 않았습니다. 숫자의 끝자리 0이나 정렬 동률은 오답이 되면서 SQL NULL과 문자열 NULL은 같게 처리됐습니다. 제출·비교·시험 운영의 관련 결함을 함께 수정해 한 번의 dev 검토·배포에서 확인할 수 있도록 묶었습니다.

변경

  • SQL 페이지·Test·Submit의 접근 검사를 통일합니다. 마감 전 접수한 답은 접수 시각으로 저장하고, 문제·시스템 장애와 저장 실패는 오답 횟수를 차감하거나 저장 완료로 표시하지 않습니다. 동시 실행·요청량 제한은 오답 허용 횟수와 별도입니다. 잘못된 마감 설정은 거절합니다.
  • 공개 비교 규약을 문제 설정에 저장하고 학생에게 같은 내용을 보여 줍니다. 기본은 행 순서 무관·중복 수 포함이며 숫자는 정밀도 손실 없이 정확한 값으로 비교합니다. NULL·문자열·숫자를 구별하고, 명시된 열만 표시 형식까지 평가합니다. 정렬 동률은 MySQL의 DENSE_RANK와 collation으로 판정합니다. 정답과 학생 SQL은 같은 초기 데이터와 서로 다른 읽기 전용 연결을 사용합니다.
  • 부분 문자열 차단을 구문 토큰 검사로 바꿔 profile 같은 정상 식별자와 문자열을 허용합니다. MySQL 권한 격리와 위험 함수·실행 시간 힌트 제한은 유지합니다. 문제 내보내기·일괄 검토 도구도 새 규약을 사용하며 임의 반올림으로 답 차이를 숨기지 않습니다.
  • 새 DB 연결은 RDS Secret의 AWSCURRENT를 사용합니다. 인증 오류 1045일 때만 Secret을 갱신해 한 번 재연결하며 SQL·트랜잭션은 재실행하지 않습니다. bootstrap·마이그레이션 연결에도 적용합니다. EC2 컨테이너가 기존 role을 사용하도록 IMDSv2 필수·hop limit 2를 설정합니다.
  • 행동 로그는 허용 필드·실제 텍스트 길이·서버 신원을 사용하고, 본문·메타데이터·이벤트 수를 제한합니다. 브라우저는 50개씩 순서대로 전송하고 재시도하며 영구 입력 오류가 후속 로그를 막지 않도록 배치를 분리합니다.
  • 기기 시계로 제출을 차단하지 않고 명시적 인증 상태를 확인합니다. SQL 오류는 텍스트로 표시합니다. Exam Mode는 기존 ban을 변경하지 않으며 성적 화면·CSV는 학생 행을 유지하고 Banned/Hidden 상태를 표시합니다. 배포용 정적 번들과 재생성 명령도 포함합니다.

검증

  • CTFd 관련 회귀 검사 280개 통과. 로컬 MySQL이 필요한 회전 검사 1개는 일반 실행에서 제외하고, 별도 임시 MySQL의 실제 비밀번호 변경·재연결을 포함한 5개 검사에서 통과했습니다.
  • 최종 입력 제한·DB migration·Secret 집중 검사 9개 통과(위 검사와 중복 포함). 기존 문제 데이터와 미확정 정책 상태를 보존하는 migration을 확인했습니다.
  • MySQL 8.4 및 빌드된 judge 컨테이너 통합 검사 통과: 숫자 scale·큰 정수·NULL·중복 수·명시적 표시·정렬 동률·공유 초기 데이터·비결정적 정답 거절. 실제 Redis 잠금 검사도 CTFd 검사에 포함됩니다.
  • JS 함수 검사 13개, 저장소 검사 29개, 정적 번들 빌드와 Terraform validate 통과. JS 검사는 최소 DOM/fetch 하네스이며 실제 브라우저·AWS 환경 검증은 dev에서 수행합니다.

검토·dev 확인

  • 기존 SQL 문제의 규약을 자동 추측하지 않습니다. migration은 nullable grading_policy만 추가합니다. 기존 미확정 문제는 판정 불가·횟수 차감 없음이며, 지문에 맞게 정렬·표시 형식을 확인하고 저장한 뒤 시험에 사용해야 합니다. 원본 아카이브와 과거 점수는 수정하지 않습니다.
  • dev 병합 승인 후 CTFd·judge를 같은 release로 빌드하고, plan 검토·apply 승인 후 SUBMISSION_REVIEW.md의 마감 경계·장애·비교 규약·Secret 접근·로그 수집·시험 허용 목록·CSV를 한 번에 검증합니다. 출제 기준은 AUTHORING.md에 있습니다.
  • 구버전 Exam Mode가 이미 변경한 ban은 관리자 기록과 대조해야 합니다. 프로세스 중단 후 제출을 자동 복구하는 영속 큐는 포함하지 않습니다. 행동 로그는 단독 부정행위 판정 근거가 아닙니다.

AWS apply·비밀번호 회전·dev/main 병합은 수행하지 않았습니다. main 병합은 dev 검증 이후에도 명시적 지시를 기다립니다.

@pwh9882 pwh9882 changed the title SQL 제출 장애·마감 경계와 시험 모드 성적 누락 수정 SQL 채점 공정성과 시험 운영 안정성 개선 Sep 5, 2026
@pwh9882
pwh9882 merged commit 3209a79 into dev Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant