Daeseon Yoo
Back to project
·Tech retro·3 min

모바일 저장 실패를 보이게 — 카드 진행 전에 서버 응답 기다리기

clip·영상 삭제·review·drill grade의 조용한 mutation 실패를 localized Alert로 드러내고, grade는 저장 성공 뒤에만 다음 카드로 진행하도록 바꿨다.

문제

모바일에서 중요한 저장 작업이 실패해도 사용자는 아무 설명을 받지 못했다. 특히 두 drill runner는 grade 요청을 보내기만 하고 바로 다음 카드로 넘어갔다. 네트워크가 끊기면 화면은 학습이 기록된 것처럼 보이지만 서버에는 남지 않았을 수 있는 흐름이었다.

바꾼 경계

실패를 실제로 만들었다

임시 localhost mock이 네 mutation endpoint에 HTTP 503을 반환하게 한 뒤 iPhone 17 Pro Max Simulator에서 다섯 UI 경로를 눌렀다. 접근성 출력에는 다음 제목과 버튼이 나타났다.

Couldn't confirm the clip
Couldn't confirm deletion
Couldn't confirm progress
Try again

review 1 / 1, pattern drill 1 / 12, interview drill 1 / 18은 실패 후에도 같은 카드였다. Retry를 누른 review와 pattern drill은 새 POST를 보냈고 503 뒤 같은 Alert가 다시 나타났다. 첫 구현은 Alert가 캡처한 옛 render의 grade.isPending 때문에 Retry가 조용히 반환했는데, ref lock을 유일한 제출 guard로 두어 이 stale-closure 버그도 제거했다.

검증 수준

Commit: Track D L4 commit (immutable hash is in git history).