TL;DR — 인계받을 때 채점 워커→서버 결과 회신이 HTTP POST(3회 retry + API 키)로 남아 있었다. 워커 최적화 작업 중, 유실·의존·장애 전파 측면에서 Kafka가 낫다고 판단해
grading-result토픽 produce/consume로 바꿈. 워커 6종의 retry 로직·API 키·콜백 엔드포인트가 사라졌다(+58 / −222줄).
submission-* 토픽), 워커가 채점 결과를 서버로 회신한다/api/submit/result)로 남아 있었다 — 디스패치는 Kafka, 회신은 POST로 혼재RESULT_ENDPOINT)와 API 키(RESULT_API_KEY)를 알아야 함ApiKeyFilter 유지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);
}
제거된 것: SubmitController의 POST /api/submit/result, ApiKeyFilter의 RESULT_API_KEY 검증, 5개 K8s deployment의 RESULT_ENDPOINT/RESULT_API_KEY env, 워커 6종(python/c/cpp/cs/java)의 HTTP retry 로직