Sprint 8 _ 안정화_ 성능_ 경계조건 QA

Sprint 8 _ 안정화_ 성능_ 경계조건 QA

목표
“데모 가능한 앱”이 아니라 “운영 가능한 앱”으로 만든다.
Sprint 8은 기능을 늘리지 않고, 사고 확률을 줄이는 데 집중한다.


S8-1 QA 시나리오 30개 작성 및 체크리스트화

목적
테스트를 감이 아니라 문서로 고정한다.

작업

  • 시나리오 카테고리

    • 권한/위치

    • 슬롯 조회/필터

    • 확보/타이머/만료

    • 체크인/수량 차감

    • 히스토리

    • 제재

    • 네트워크/오프라인

  • 각 시나리오에 기대 결과(상태/화면/로그) 명시

완료 조건

  • 30개 이상의 체크리스트가 문서화됨

  • 릴리즈 전 반복 실행 가능


S8-2 네트워크 재시도 정책 표준화

목적
실패가 “앱이 멈춘 것처럼” 보이지 않게 한다.

작업

  • 요청 유형별 정책

    • 조회(getNearbySlots, listHistory): 자동 재시도 1~2회 가능

    • 상태 변경(createReservation, checkin, redeem): 자동 재시도 최소화(중복 위험) + idempotency 키 고려

  • 공통 에러 매핑(타임아웃, 401, 403, 500 등)

  • 사용자 메시지 템플릿 통일

완료 조건

  • 같은 오류는 항상 같은 UI/문구로 처리됨

  • 상태 변경 API에서 중복 실행 위험이 낮아짐


S8-3 Idempotency(중복 실행 방지) 적용

목적
연타/재시도/네트워크 재전송에서 상태가 꼬이지 않게 한다.

작업

  • createReservation: (userId, slotId, active window) 기준 중복 방지

  • checkin: reservationId 기준 idempotent

  • redeem(있다면): reservationId 기준 idempotent

  • 클라이언트 단에서도 single-flight 유지

완료 조건

  • 같은 요청이 2번 들어와도 결과가 1번과 동일

  • 수량 차감이 중복되지 않음


S8-4 위치 오차/정확도 낮음 대응 강화

목적
현장에서 가장 흔한 실패 원인을 “정책적으로” 흡수한다.

작업

  • accuracy가 나쁠 때 UI 안내 개선

  • 체크인 반경/정확도 임계값 튜닝 가능한 구조로 분리

  • 위치 갱신 실패 시 재시도 UX 개선(3초 쿨다운 등)

완료 조건

  • 정확도 나쁨 상태에서 사용자가 다음 행동을 알 수 있음

  • 무한 재시도/연타 루프가 생기지 않음


S8-5 앱 재시작/복구 시나리오 완성

목적
사용자가 앱을 껐다 켜도 “현재 예약 상태”가 복원돼야 한다.

작업

  • 앱 시작 시

    • activeReservationId를 로컬 저장소에 보관(secure storage 또는 async storage)

    • 시작 시 서버에서 상태 재조회 후 복원/정리

  • 만료/도착 상태에 따라 적절한 화면으로 유도

    • reserved면 ReservedScreen

    • arrived면 Arrived 화면

    • expired면 정리 후 Home

완료 조건

  • 앱 강제 종료 후 재실행해도 예약 상태가 이어짐

  • 오래된 activeReservation이 앱을 막지 않음(정리됨)


S8-6 성능 점검: 리스트/상세/타이머 렌더링

목적
“느린 앱”은 정책이 아무리 좋아도 실패한다.

작업

  • FlatList 성능 점검(스크롤 중 프레임 드랍 관찰)

  • SlotCard 메모이제이션 검토

  • 불필요한 상태 구독 분리

  • 타이머 화면 렌더 최소화(초당 업데이트 영향 확인)

완료 조건

  • 실사용 기기(중급 안드로이드)에서 스크롤이 안정적

  • 타이머 화면에서 배터리/CPU 과도 사용 징후 없음


S8-7 UI/문구 통일(정책 톤 유지)

목적
광고성/과장/감정적 문구를 제거하고 “차분한 운영 도구” 톤 유지.

작업

  • 공통 문구 정리

    • 권한 필요

    • 만료 안내

    • 체크인 실패(반경/정확도)

    • 제재 안내

  • 문구 스타일 가이드 적용(짧고 구체적으로, 비난 없음)

완료 조건

  • 동일 상황에서 문구 톤이 일관됨

  • 과도한 CTA/배너 느낌 없음


S8-8 관측 가능성(Observability) 최소 패키지

목적
운영 중 문제를 “재현 없이도” 추적할 수 있게 한다.

작업

  • 클라이언트 이벤트 로그를 서버 테이블로 전송(선택, 최소)

    • 실패 이벤트(네트워크, checkin_fail, reserve_fail) 우선
  • 서버 로그(함수/RPC 실행, 실패 reason) 기록 강화

  • 각 이벤트에 correlation id(세션/요청 id) 부여(선택)

완료 조건

  • 주요 실패가 로그로 남고, 원인 분류가 가능

  • “사용자가 안 된대요” 상황에서 최소한의 단서 확보


S8-9 출시 전 점검: 빌드/권한/스토어 준비(안드로이드 내부 테스트)

목적
기능이 아니라 배포가 막히는 사고를 예방한다.

작업

  • 안드로이드 권한 선언 정리

  • 릴리즈 빌드 생성(서명/버전 코드)

  • 내부 테스트 배포(Closed testing)

  • 크래시/ANR 기본 점검

완료 조건

  • 내부 테스트 설치/실행 가능

  • 핵심 플로우 10개를 실기기에서 통과


Sprint 8 완료 정의

다음이 가능해야 한다.

  • QA 시나리오 30개를 통과

  • 앱 재시작/복구가 안정적

  • 중복 요청/연타/재시도에서 상태가 꼬이지 않음

  • 네트워크/위치 불안정 상황에서도 안내가 명확하고 앱이 죽지 않음

  • 내부 테스트 배포까지 완료