From 8a21646031f98feb799cde59c2b8ddee0fd8ca3f Mon Sep 17 00:00:00 2001 From: joungmin Date: Mon, 15 Jun 2026 21:08:55 +0900 Subject: [PATCH] =?UTF-8?q?fix(admin):=20bulk-tabling/catchtable=20SSE=20t?= =?UTF-8?q?imeout=2010=EB=B6=84=20=E2=86=92=203=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 대량 백필(700+건 ≈ 100분) 시 10분 SSE timeout으로 중간 끊김 - emit() 실패 시 마지막 cache.flush + complete 누락 → 3시간으로 확장 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 4 ++++ .../java/com/tasteby/controller/RestaurantController.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02eb57f..3d9fd2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ ## 2026-06-15 +### ⏱️ bulk-tabling/catchtable SSE timeout 10분 → 3시간 (v0.1.48) +- 대량 백필(724건 ≈ 100분) 시 10분 SSE timeout으로 중간 끊김 → 3시간으로 확장 +- 백엔드 작업은 virtual thread로 별도 진행됐지만 emit() 예외로 마지막 cache.flush + complete 누락이슈 해소 + ### 🐛 #357 후속 — tabling-url validation에 www. 호스트 허용 (v0.1.47) - Naver/DDG 결과가 `https://www.tabling.co.kr/...` 형태인데 #290 validation은 `tabling.co.kr/`만 허용 → 단건 매핑 PUT 거부 - bulk-tabling SSE는 validation 없이 service.update 직접 호출이라 통과 → 단일/벌크 불일치 diff --git a/backend-java/src/main/java/com/tasteby/controller/RestaurantController.java b/backend-java/src/main/java/com/tasteby/controller/RestaurantController.java index 7462464..b4e25f5 100644 --- a/backend-java/src/main/java/com/tasteby/controller/RestaurantController.java +++ b/backend-java/src/main/java/com/tasteby/controller/RestaurantController.java @@ -175,7 +175,7 @@ public class RestaurantController { @PostMapping("/bulk-tabling") public SseEmitter bulkTabling() { AuthUtil.requireAdmin(); - SseEmitter emitter = new SseEmitter(600_000L); + SseEmitter emitter = new SseEmitter(10_800_000L); // 3h — 대량 백필 대응 executor.execute(() -> { try { @@ -309,7 +309,7 @@ public class RestaurantController { @PostMapping("/bulk-catchtable") public SseEmitter bulkCatchtable() { AuthUtil.requireAdmin(); - SseEmitter emitter = new SseEmitter(600_000L); + SseEmitter emitter = new SseEmitter(10_800_000L); // 3h — 대량 백필 대응 executor.execute(() -> { try {