
온라인 시험 답안 유실 방지를 위한 기술 도입기
두줄요약
온라인 시험 종료 시점의 저장·제출 요청 폭주와 답안 유실 위험을 분석했습니다. Kafka, 버전 제어, 상태 머신으로 안정적인 제출 처리를 구현했습니다.
문제 상황
- 시험 종료 정각에 약 100명 규모의 자동 저장·수동 제출·자동 제출 요청 집중
- 네트워크 재시도, 패킷 역전, 클라이언트 시계 오차로 인한 최신 답안 갱신 유실 및 마감 실패 위험
원인 분석
- 동기식 DB 쓰기 구조에서 커넥션 지연과 락 경합 가능성
- 동일 응시 세션을 향한 동시 제출 요청과 과거 패킷의 뒤늦은 도착
- 클라이언트 시계 기반 마감 판정에 따른 정상 요청 거절 가능성
해결 방법
- Kafka 비동기 자동 저장, attemptId 파티션 키, clientSeq 조건부 업데이트를 통한 순서 보장과 최신 답안 보호
- 서버 시간 단일 기준 및 3초 유예 시간으로 네트워크 지연 흡수
- CAS 기반 단방향 제출 상태 머신, 멱등성 응답, 최종 답안 동반 전송으로 중복 제출 수렴
성능/운영 포인트
- API 서버의 Kafka 이벤트 발행 후 빠른 응답으로 종료 시점 DB 병목 완화
- 지연된 자동 저장 이벤트와 제출 트랜잭션 간 버전 검증으로 최종 답안 보호
- 마감 후 IN_PROGRESS 세션을 스케줄러로 자동 마감 처리


