Conversation
업로드는 UploadModal에서 끝나고 onSuccess가 Toast 알림에만 연결돼 있어서, 접수에 성공해도 DocumentsPage와 DocumentDetailPage가 다시 읽지 않았다. 그 결과 새 문서가 목록에 나타나지 않고, 새 버전을 올려도 상세는 이전 버전을 계속 보여줘 사용자가 직접 새로고침해야 했다. PATCH와 DELETE는 각 화면에서 직접 호출해 이미 갱신되고 있었으므로 업로드 경로만 누락된 상태였다. DocGridRouter가 접수 성공 횟수를 refreshKey로 들고 두 화면에 내려준다. 각 화면은 직전에 처리한 값을 useRef로 기억해 신호가 실제로 바뀐 경우에만 다시 읽는다. 의존성 배열에만 넣으면 조회 조건이 바뀔 때도 중복 요청이 나가고 exhaustive-deps가 불필요한 의존성으로 경고한다. 접수 직후 한 번 읽는 것만으로는 부족하다. 인덱싱이 비동기라 "실시간 조회" 배지가 붙은 진행 상태 카드가 실제로는 갱신되지 않고 있었다. 처리 중 버전이 남아 있는 동안에만 2초 간격으로 상태를 다시 읽고, 끝나면 현재 버전과 추출 본문까지 맞춘다. 진행 여부는 documentStatus가 아니라 processingVersion으로 판단한다. 재인덱싱 중에는 검색 가용성을 위해 문서가 INDEXED를 유지하므로(#230) 문서 상태만으로는 완료와 구분되지 않는다. 백엔드는 UPLOADED·PARSING·CHUNKED· EMBEDDING Version만 processingVersion으로 반환하므로, INDEXED로 끝나든 FAILED로 끝나든 값이 사라지면서 재조회가 멈춘다. 실패해도 무한 조회가 생기지 않는다. 완료 시점의 재조회는 silent로 처리해 이미 떠 있는 화면에 Loading 표시가 끼어들지 않게 했다. 언마운트와 documentId 변경 시 Interval을 정리하고, 응답이 늦게 도착한 경우 active 플래그로 상태 반영을 막는다. refreshKey와 폴링은 DocumentsPage.tsx 한 파일에 함께 들어가 커밋을 파일 단위로 더 나눌 수 없어 하나로 묶었다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
isDocumentProcessing이 재조회를 계속할지 판단하는 유일한 기준이므로 단위 테스트로 고정했다. 재인덱싱처럼 문서가 INDEXED를 유지하는 경우를 처리 중으로 인식하는지, 그리고 FAILED로 끝난 경우 재조회를 멈춰 무한 조회가 생기지 않는지가 핵심 케이스다. 기존 프론트 테스트와 같은 node --test 방식이라 실행 목록에 파일을 추가했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Important Review available on request
Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 배경
프론트에서 문서를 업로드하거나 새 버전을 올려도 화면이 갱신되지 않아 사용자가 직접 새로고침해야 했습니다.
UploadModal의onSuccess가 Toast 알림에만 연결돼 있어 갱신 신호가 화면까지 도달하지 않았습니다.수정 전 네트워크 로그 —
PATCH/DELETE는 재조회가 따라오는데 업로드 경로만 누락돼 있었습니다.여기에 더해 진행 상태 카드에 "실시간 조회" 배지가 있었지만 실제 폴링이 없었습니다. 20초 관찰 동안
/status호출이 0건이었고, 인덱싱이 비동기라 사용자는 완료 시점을 볼 수 없었습니다.🔧 변경 내용
1. 갱신 신호 —
DocGridRouter가 접수 성공 횟수를refreshKey로 들고 목록·상세에 전달합니다. 각 화면은 직전 처리값을useRef로 기억해 신호가 실제로 바뀐 경우에만 다시 읽습니다. 의존성 배열에만 넣으면 조회 조건이 바뀔 때도 중복 요청이 나가고exhaustive-deps가 경고합니다.2. 조건부 폴링 — 처리 중 버전이 남아 있는 동안에만 2초 간격으로
/status를 읽고, 끝나면 현재 버전과 추출 본문까지 맞춥니다.3. 판단 기준 — 진행 여부를
documentStatus가 아니라processingVersion으로 판단합니다. 재인덱싱 중에는 검색 가용성을 위해 문서가INDEXED를 유지하므로(#230) 문서 상태만으로는 완료와 구분되지 않습니다. 백엔드가UPLOADED·PARSING·CHUNKED·EMBEDDINGVersion만processingVersion으로 반환하므로INDEXED로 끝나든FAILED로 끝나든 값이 사라지면서 폴링이 멈춥니다 — 실패해도 무한 폴링이 생기지 않습니다.완료 시 재조회는
silent로 처리해 이미 떠 있는 화면에 Loading 표시가 끼어들지 않게 했고, 언마운트·documentId변경 시 Interval을 정리하며 늦게 도착한 응답은active플래그로 막습니다.✅ 검증
브라우저에서 실제로 조작해 확인했습니다.
총 8개 → 9개, 새 문서 즉시 표시v1 · INDEXED → v2 · INDEXED, 원본 파일명과 추출 본문까지 교체(V2 sentinel 등장, V1 sentinel 사라짐)네트워크 트레이스가 전후 차이를 그대로 보여줍니다.
폴링이 정확히 멈췄고 콘솔 에러도 없습니다.
빌드 성공, 테스트 17/17(기존 12 + 신규 5), lint에서 이 변경으로 인한 경고는 0건입니다. 남은 lint 에러 1건(
useRagAnswerSocket.ts)과tsc에러는 기존 문제로 이 PR 범위 밖입니다.closes #231