From a4de9ba87bf1a9aacbfc80ea14d876cd9f8d19d4 Mon Sep 17 00:00:00 2001 From: joungmin Date: Tue, 16 Jun 2026 15:15:48 +0900 Subject: [PATCH] =?UTF-8?q?feat(admin):=20#356=20=ED=9B=84=EC=86=8D=20?= =?UTF-8?q?=E2=80=94=20verifyAllAsync=EB=A1=9C=20=EC=A6=89=EC=8B=9C=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 1244 링크 백필 동기 호출 시 HTTP 25~30분 hang (ingress 5분 timeout 초과) - @Async verifyAllAsync 추가, controller는 started/pending 즉시 응답 - 진행은 /api/admin/video-relevance/pending 폴링으로 확인 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 --- .../controller/AdminVideoRelevanceController.java | 8 +++++--- .../com/tasteby/service/VideoRelevanceService.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java b/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java index 8349ef6..37ca341 100644 --- a/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java +++ b/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java @@ -40,9 +40,11 @@ public class AdminVideoRelevanceController { @PostMapping("/all") public Map verifyAll(@RequestParam(defaultValue = "10") int batchSize) { var admin = AuthUtil.requireAdmin(); - log.info("[ADMIN] {} triggered video-relevance verifyAll(batchSize={})", admin.getSubject(), batchSize); - int processed = relevanceService.verifyAll(batchSize); - return Map.of("processed", processed); + int pending = restaurantService.countUnevaluatedLinks(); + log.info("[ADMIN] {} triggered video-relevance verifyAllAsync (batchSize={}, pending={})", admin.getSubject(), batchSize, pending); + // 비동기 트리거 — HTTP request는 즉시 응답. 진행은 /pending 폴링으로 확인. + relevanceService.verifyAllAsync(batchSize); + return Map.of("started", true, "pending", pending); } @PostMapping("/{linkId}/evaluate") diff --git a/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java b/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java index 3893e4f..e7e935e 100644 --- a/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java +++ b/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java @@ -63,6 +63,16 @@ public class VideoRelevanceService { restaurantService.updateLinkRelevance(linkId, result.relevance(), truncate(result.reason(), 120)); } + @Async + public void verifyAllAsync(int batchSize) { + try { + int n = verifyAll(batchSize); + log.info("[VideoRelevance] backfill done: {} processed", n); + } catch (Exception e) { + log.warn("verifyAllAsync failed: {}", e.getMessage()); + } + } + public int verifyAll(int batchSize) { int total = 0; List> batch;