Skip to content

CatchPro 고도화 6: 중복 확정 방지와 확정 성공률 보호

오늘 업데이트의 방향은 분명했습니다. 기능을 더 많이 붙이는 것이 아니라, 현장에서 실제로 오더를 잡는 핵심 루프의 성공률을 높이는 것입니다.

CatchPro의 목표는 사용자가 가까운 오더를 빠르게 잡아 시간당 매출 3만원 이상을 안정적으로 만들 수 있게 돕는 것입니다. 그러려면 오더리스트에서 상세로 들어가는 속도, 상세화면에서 조건을 판단하는 속도, 그리고 확정 버튼을 누르는 흐름이 가장 중요합니다. 오늘은 그중에서도 “확정 버튼을 너무 빠르게 중복 클릭해서 오히려 성공률이 떨어질 수 있는 문제”를 정리했습니다.

현장 로그에서 확인한 문제

오늘 오전 운행 로그를 보면, 자동상세확정으로 오더 상세에 진입한 직후 확정 조건은 정상 통과했습니다. 그런데 같은 오더에 대해 첫 확정 클릭이 나간 뒤 약 0.12초 만에 direct_detail 경로에서 확정 클릭이 한 번 더 발생한 흔적이 있었습니다.

즉, 사용자가 느끼기에는 “CatchPro가 확정까지 시도했는데 다른 기사에게 배정되었다고 나온다”는 증상이고, 로그 기준으로 보면 같은 화면에서 같은 오더에 대해 확정 요청이 매우 짧은 간격으로 중복 발생한 것입니다.

이것은 첫 확정 시도를 빠르게 만드는 데는 도움이 되지 않습니다. 오히려 인성 서버가 확정 처리 중인 상태에서 같은 주문을 다시 누르는 꼴이 될 수 있어, 성공 여부를 더 불안정하게 만들 수 있습니다.

오늘 개선한 내용

1. 같은 오더 중복 확정 클릭 차단

같은 오더는 확정 클릭 후 pending 상태가 끝나기 전까지 다시 확정 버튼을 누르지 않도록 바꿨습니다.

기존에는 자동상세확정으로 들어간 상세화면에서 한 번 확정 클릭을 한 뒤, 같은 화면이 direct_detail로 다시 해석되면서 확정 버튼을 한 번 더 누를 수 있었습니다. 이제는 같은 오더 signature가 pending 중이면 두 번째 확정 클릭은 막습니다.

중요한 점은 첫 클릭은 늦추지 않는다는 것입니다. 첫 확정 클릭은 기존처럼 바로 나가고, 이미 나간 확정 요청을 중복해서 다시 누르는 것만 막습니다.

2. 확정 클릭 직후 자동상세 리스트 클릭만 짧게 정지

확정 클릭 직후 900ms 동안 자동상세 리스트 클릭만 잠시 멈추도록 했습니다.

이 정지는 확정 버튼 클릭 자체를 늦추는 것이 아닙니다. 사용자가 직접 열어둔 상세화면에서 자동확정이 동작하는 것도 막지 않습니다. 단지 확정 결과가 들어오는 아주 짧은 구간에 오더리스트 자동 클릭 루프가 다음 화면을 건드리는 상황을 막기 위한 보호 장치입니다.

현장 기준으로 900ms는 오더를 늦게 잡기 위한 시간이 아니라, 이미 누른 확정 요청의 결과를 앱이 관측할 수 있게 하는 최소한의 완충 구간입니다.

3. 인성 실패 문구 감지 로그 추가

인성앱에서 아래와 같은 문구가 보이면 별도 로그로 남기고 pending 상태를 즉시 종료하도록 했습니다.

  • 다른 기사에게 배정
  • 이미 배정
  • 배정되었습니다
  • 마감
  • 이미 완료
  • 취소된 오더

기존에는 확정 클릭 후 성공 화면이 확인되지 않으면 10초 뒤에야 unverified로 정리됐습니다. 이제는 실패 문구가 실제로 보이는 경우 order_confirm_rejected_by_insung 로그가 남고, 원인을 더 정확히 볼 수 있습니다.

4. 중복 클릭 차단 로그 추가

같은 오더의 중복 확정 클릭이 차단되면 order_confirm_duplicate_suppressed 로그가 남습니다.

이 로그는 “왜 두 번째 확정 클릭이 안 나갔는지”를 운행 후 분석할 수 있게 해줍니다. 앞으로 자동확정 실패를 볼 때, 진짜 서버 배정 경쟁인지, 클릭 실패인지, 중복 클릭 방지로 막힌 것인지 구분할 수 있습니다.

이번 개선의 의도

이번 변경은 속도를 늦추는 개선이 아닙니다. 첫 확정 클릭은 그대로 빠르게 수행하고, 이미 나간 확정 요청을 중복해서 다시 누르는 불필요한 행동만 제거했습니다.

CatchPro의 핵심은 “빠른 진입, 빠른 판단, 빠른 확정”입니다. 다만 빠르다는 것이 같은 버튼을 의미 없이 여러 번 누르는 것과 같지는 않습니다. 오늘 개선은 빠른 첫 시도는 유지하면서, 확정 성공률을 떨어뜨릴 수 있는 중복 요청을 줄이는 쪽입니다.

반영 파일

  • CatchProAccessibilityService.kt: 중복 확정 방지, 900ms 자동상세 리스트 클릭 보호, 인성 실패 문구 감지
  • OperationLogRepository.kt: 신규 로그 타입 저장 허용
  • research.md: 자동확정 클릭과 검증 구조 문서 업데이트

검증

Android debug 빌드는 성공했습니다.

./gradlew.bat assembleDebug
BUILD SUCCESSFUL

이후 두 대의 운행용 휴대폰에 최신 버전을 설치했습니다.

  • R3CM705EWKZ: 설치 성공
  • R3CN607EZ0B: 설치 성공

다음 운행에서 볼 것

다음 운행 로그에서는 세 가지를 중점적으로 확인할 예정입니다.

  • 같은 오더에 대한 중복 확정 클릭이 사라졌는지
  • 인성 실패 문구가 실제로 order_confirm_rejected_by_insung 로그로 남는지
  • 900ms 자동상세 리스트 클릭 보호가 오더 진입 속도에 체감상 방해가 없는지

오늘 업데이트의 결론은 단순합니다. CatchPro는 부가 기능보다 기본 기능이 먼저입니다. 오더를 빠르게 잡는 기본 루프를 더 단단하게 만들고, 운행 로그로 다시 검증하고, 그 결과를 다음 개선으로 이어갑니다.