TL;DR — 인계받을 때 채점 워커→서버 결과 회신이 HTTP POST(3회 retry + API 키)로 남아 있었다. 워커 최적화 작업 중, 유실·의존·장애 전파 측면에서 Kafka가 낫다고 판단해 grading-result 토픽 produce/consume로 바꿈. 워커 6종의 retry 로직·API 키·콜백 엔드포인트가 사라졌다(+58 / −222줄).

배경

문제 (기존 POST 구조의 약점)

판단 (왜 Kafka)

해결 (CQ-47, c37864b)

워커: HTTP POST(3 retry) → Kafka produce 단일 호출

// before: HttpURLConnection POST + for(attempt=1..3) retry, RESULT_ENDPOINT/RESULT_API_KEY 필요
// after: grading-result 토픽으로 produce
sendResult(producer, submitId, score, error, executionTime);

서버: POST 콜백 제거 → @KafkaListener 소비

@KafkaListener(topics = "grading-result", groupId = "submit-service")
public void handleGradingResult(String message) throws Exception {
    ReceiveResultForm form = objectMapper.readValue(message, ReceiveResultForm.class);
    receiveSubmitResult(form);
}

제거된 것: SubmitControllerPOST /api/submit/result, ApiKeyFilterRESULT_API_KEY 검증, 5개 K8s deployment의 RESULT_ENDPOINT/RESULT_API_KEY env, 워커 6종(python/c/cpp/cs/java)의 HTTP retry 로직

결과