Skip to content

[Fix] 업로드 접수와 인덱싱 완료를 문서 화면에 반영 - #235

Merged
Gimini-3 merged 2 commits into
developfrom
fix/231
Aug 18, 2026
Merged

[Fix] 업로드 접수와 인덱싱 완료를 문서 화면에 반영#235
Gimini-3 merged 2 commits into
developfrom
fix/231

Conversation

@Gimini-3

Copy link
Copy Markdown
Contributor

📌 배경

프론트에서 문서를 업로드하거나 새 버전을 올려도 화면이 갱신되지 않아 사용자가 직접 새로고침해야 했습니다. UploadModalonSuccess가 Toast 알림에만 연결돼 있어 갱신 신호가 화면까지 도달하지 않았습니다.

수정 전 네트워크 로그 — PATCH/DELETE는 재조회가 따라오는데 업로드 경로만 누락돼 있었습니다.

POST /api/documents             → 201   (이후 목록 재조회 없음)
POST /api/documents/14/versions → 201   (이후 상세 재조회 없음)
PATCH /api/documents/14         → 204 → 재조회 ✅
DELETE /api/documents/14        → 204 → 리다이렉트 + 재조회 ✅

여기에 더해 진행 상태 카드에 "실시간 조회" 배지가 있었지만 실제 폴링이 없었습니다. 20초 관찰 동안 /status 호출이 0건이었고, 인덱싱이 비동기라 사용자는 완료 시점을 볼 수 없었습니다.

🔧 변경 내용

1. 갱신 신호DocGridRouter가 접수 성공 횟수를 refreshKey로 들고 목록·상세에 전달합니다. 각 화면은 직전 처리값을 useRef로 기억해 신호가 실제로 바뀐 경우에만 다시 읽습니다. 의존성 배열에만 넣으면 조회 조건이 바뀔 때도 중복 요청이 나가고 exhaustive-deps가 경고합니다.

2. 조건부 폴링 — 처리 중 버전이 남아 있는 동안에만 2초 간격으로 /status를 읽고, 끝나면 현재 버전과 추출 본문까지 맞춥니다.

3. 판단 기준 — 진행 여부를 documentStatus가 아니라 processingVersion 으로 판단합니다. 재인덱싱 중에는 검색 가용성을 위해 문서가 INDEXED를 유지하므로(#230) 문서 상태만으로는 완료와 구분되지 않습니다. 백엔드가 UPLOADED·PARSING·CHUNKED·EMBEDDING Version만 processingVersion으로 반환하므로 INDEXED로 끝나든 FAILED로 끝나든 값이 사라지면서 폴링이 멈춥니다 — 실패해도 무한 폴링이 생기지 않습니다.

완료 시 재조회는 silent로 처리해 이미 떠 있는 화면에 Loading 표시가 끼어들지 않게 했고, 언마운트·documentId 변경 시 Interval을 정리하며 늦게 도착한 응답은 active 플래그로 막습니다.

✅ 검증

브라우저에서 실제로 조작해 확인했습니다.

  • 목록 자동 갱신 — 업로드 직후 새로고침 없이 총 8개 → 9개, 새 문서 즉시 표시
  • 상세 자동 갱신 — 새 버전 업로드 후 이동·새로고침 없이 v1 · INDEXED → v2 · INDEXED, 원본 파일명과 추출 본문까지 교체(V2 sentinel 등장, V1 sentinel 사라짐)

네트워크 트레이스가 전후 차이를 그대로 보여줍니다.

POST .../versions                 → 201
GET  detail/status/perm/content   ← 접수 직후 즉시 재조회 (기존에 없던 동작)
GET  status ×3                    ← 처리 중에만 폴링
GET  detail/perm/content          ← 완료 시 silent 갱신
(이후 15초 추가 대기 — /status 요청 0건)

폴링이 정확히 멈췄고 콘솔 에러도 없습니다.

빌드 성공, 테스트 17/17(기존 12 + 신규 5), lint에서 이 변경으로 인한 경고는 0건입니다. 남은 lint 에러 1건(useRagAnswerSocket.ts)과 tsc 에러는 기존 문제로 이 PR 범위 밖입니다.

closes #231

Gimini-3 and others added 2 commits August 18, 2026 19:19
업로드는 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>
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Important

Review available on request

  • 🔍 Trigger review

Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment @coderabbitai review to review the latest changes. For a full review, comment @coderabbitai full review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9270d7a3-e9ed-4f84-ac5f-59f1608114fa


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Gimini-3
Gimini-3 merged commit 5590aec into develop Aug 18, 2026
1 check passed
@Gimini-3 Gimini-3 changed the title fix: 업로드 접수와 인덱싱 완료를 문서 화면에 반영한다 (#231) [Fix] 업로드 접수와 인덱싱 완료를 문서 화면에 반영 Aug 18, 2026
@Gimini-3 Gimini-3 self-assigned this Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] 업로드·새 버전 업로드 후 화면이 갱신되지 않고 인덱싱 상태 폴링이 없음

1 participant