Actions
이슈 #239
진행중
CP
RL
5-6. 에러 핸들링 (API 오류. 타임아웃)
이슈 #239:
5-6. 에러 핸들링 (API 오류. 타임아웃)
설명
재시도 로직. 사용자 친화적 에러 메시지
완료 내역¶
-
InterruptReason4가지 분류 (src/types/chat.ts:5):background | network | abort | error - 사용자 친화 에러 메시지 (
src/components/MessageBubble.tsx:18-23):- background: "백그라운드에서 연결이 끊겼어요."
- network: "네트워크 문제로 응답이 중단됐어요."
- abort: "응답을 중단했어요."
- error: "응답을 받지 못했어요."
- 원인별 아이콘 차등 (
MessageBubble.tsx:45-48): network/background → WifiOff, 그 외 → AlertCircle - 수동 재시도 버튼 +
retryMessage(conversationId, messageId)로직 (src/stores/chatStore.ts:348-396)- 대상 메시지 이후 잘라내기, HTML 첨부 파일 정리, 직전 사용자 메시지 기반 재생성
- 백그라운드 자동 중단 (
App.tsx:14-24): AppState 'background' 전환 시interruptGeneration(..., 'background') - 앱 재시작 고아 스트리밍 복구 (
chatStore.ts:403-414): rehydrate 시 streaming 상태 → interrupted + background 표시 - 오류 타입 감지 (
src/services/api/anthropic.ts:21-32): AbortError 분리 처리 - SDK 자동 재시도: Anthropic SDK 기본
maxRetries=2활용 (별도 설정 없음)
주요 파일¶
-
src/types/chat.ts—InterruptReason타입 -
src/components/MessageBubble.tsx— 에러 메시지/아이콘/재시도 UI -
src/stores/chatStore.ts—retryMessage(),interruptGeneration(), rehydrate 복구 -
src/services/api/anthropic.ts— AbortError 분리 -
App.tsx— AppState 백그라운드 감지
관련 커밋¶
-
3b6c46b(#237) — 콜백 인터페이스 (onError/onAbort 포함) - 재시도/에러 UI는 동일 커밋 범위에서 함께 추가됨
후속 처리 (하위 이슈 분리)¶
- 네트워크 오류 자동 분류 — fetch 실패 시
'network'interruptReason 설정 (NetInfo또는 error.name 기반) - 스트림 타임아웃 명시 설정 —
client.messages.stream()에timeout옵션 지정, 초과 시 사용자 친화 메시지
Actions