Skip to content

fix(mindrecord): 서버 실패가 빈 화면·기술 원문·무음으로 수렴 — 목록·작성·삭제 복구 수단 부재 #716

Closed

Description

@OnlyReadOneBook

📜 Overview (Required)

마음기록의 서버 실패·지연이 빈 정상 화면, 기술 원문 또는 무음 상태로 수렴한다. develop 20d7d10d debug APK를 Pixel 7 API 35에서 정상·오프라인·무응답 조건으로 실측하고 정적 상태 전이를 함께 확인했다.

  • 데일리질문·일기·주간리포트 목록: 조회 실패 뒤 콘텐츠가 사라진 화면만 남고 명시적 Retry가 없다. 일부 오류는 e.message를 우선해 timeout 같은 기술 문구를 그대로 표시한다.
  • 정식 데일리질문·일기 삭제: 실패 분기가 없어 항목이 남는 것 외에는 안내·진행·재시도가 없다.
  • 일기 작성의 수신인 조회 실패: 실제 수신인 0건으로 확정해 “등록된 수신자가 없습니다”를 표시한다.
  • 임시저장 prefill 실패: 빈 폼을 노출한 채 기존 draft id는 유지해, 다시 작성하고 저장하면 보지 못한 기존 내용을 PATCH로 덮을 수 있다.
  • 이미지 업로드 실패: null로 흡수해 안내하지 않으며, 업로드 진행 상태가 제출 가능 여부에 포함되지 않아 이미지 없이 기록이 먼저 저장될 수 있다.
  • 저장 요청 대기: 액션은 잠기지만 진행 표시가 없어 사용자는 무반응으로 인식한다.

정상 빈 상태와 실패를 분리하고, 사용자용 오류 문구·Retry·진행 상태를 각 화면에 연결해야 한다. prefill 실패 중 저장과 업로드 중 제출을 막고 실패 상태 전이 회귀 테스트를 추가해야 한다.

실측 화면

  • 목록 조회 실패 뒤 빈 화면

    마음기록 목록 조회 실패 뒤 오류와 재시도 없이 빈 화면이 남은 상태

  • 질문 조회 무응답 뒤 기술 원문 timeout 노출

    데일리질문 조회 무응답 뒤 timeout 기술 문구가 노출된 화면

  • 일기 저장 요청 대기 중 진행 표시 없음

    일기 저장 요청 대기 중 진행 표시가 없는 화면

관련 지점: DailyQuestionListViewModel.kt:59,65, DailyQuestionAnswerListScreen.kt:44, DiaryListViewModel.kt:74,85, DiaryWriteViewModel.kt:80,147,157, DailyQuestionWriteViewModel.kt:99, WriteTextField.kt:118, WeeklyReportViewModel.kt:80.

📌 Child Issue(Optional)

No response

📍 Note (Optional)

  • #442는 임시저장 삭제, #565는 questionId 부재에 따른 저장 무음, #702는 재진입 refresh 미결선, #614는 수신자 화면의 Error 데드엔드다.
  • #446은 실패 안내 컴포넌트의 표현 방식 통일이며, 이 이슈의 정상 상태 오표시·실패 상태 미결선·데이터 덮어쓰기/누락 위험과 별개다.
  • 시안 미대조 — 디자인 대조가 아니라 실패 상태와 요청 진행 상태가 UI에 잘못 전달되는 동작 결함이다.

Activity

  1. OnlyReadOneBook commented on Aug 24, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    재현 확인 (develop 4e0a648eb, 2026-08-25 04:37 KST)

    에뮬레이터(Pixel_7_Claude_QA, Android 16)에서 dev 서버 폐쇄 시간대를 이용해 재현했습니다. 데일리 질문·일기·주간리포트 세 서브탭 모두 동일합니다.

    화면 본문에 그대로 출력되는 문자열:

    failed to connect to afternote.kro.kr/3.37.1.210 (port 443) from /10.0.2.16 (port 44844) after 10000ms
    

    이슈 본문에 없는 관점 하나

    본문은 "기술 원문" 으로만 적고 있는데, 실제로 노출되는 값에 서버 IP(3.37.1.210)와 클라이언트 내부 IP·포트(10.0.2.16:44844) 가 포함됩니다. 1차 QA 에서 서버 500 응답의 내부 정보 노출을 S1(보안, 중간)로 분류한 적이 있는데, 이번 것은 같은 성격의 노출이 클라이언트 측에서 발생하는 경우입니다. 문구 교체 시 예외 메시지를 통째로 버리는 방향이면 자연히 해소됩니다.

    참고 — 같은 실패 조건에서 기능별 처리가 네 갈래로 갈립니다

    기능 서버 무응답 시 화면
    홈 · 노트 "정보를/애프터노트 목록을 불러오지 못했습니다." + 다시 시도
    마음의 기록 예외 원문 그대로 (이 이슈)
    타임레터 "아직 등록된 타임레터가 없어요" — 빈 목록으로 위장 (#714)
    설정 "로그아웃" 항목만 남은 화면 (#708)

    PR #904 가 이 이슈를 다루는 것으로 보이며 아직 미머지라 develop 에 남아 있는 것은 예상된 상태입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions