자동화 slecs

결제 알림 오프라인 유실 없애고 자동수령 안정화

목차

시작

오늘은 메신저 자동수령 안정화 작업을 한 바퀴 돌렸음. 단말에서 결제 알림을 잡아 백엔드로 흘려보내는 모듈인데, 네트워크 끊겼을 때 알림이 통째로 사라지는 게 오래된 골칫거리였음. 한 방에 잡으려고 세 갈래로 손댔음.

오프라인 큐잉

기존엔 알림 받자마자 바로 HTTP 호출. 지하철/엘리베이터에서 끊기면 그대로 소실됐음. 로컬 DB에 1차 적재 후, 워커가 주기적으로 플러시하는 구조로 바꿈.

// 알림 수신 시
local.notif().insert(raw)     // 1차: 로컬 즉시 저장
worker.enqueueIfIdle()        // 2차: 송신 시도 (실패해도 OK)

핵심은 "수집과 송신 분리". 송신 실패해도 원본은 남고, 다음 워커 사이클에서 재시도.

항목 변경 전 변경 후
오프라인 시 알림 소실 로컬 큐 적재
재시도 없음 지수 백오프
중복 방지 서버 단 단말 해시 키

메시지 파싱 개선

메신저 알림 본문 포맷이 자잘하게 바뀌면서 정규식 한 줄로 우격다짐하던 게 깨짐. 토큰 단위로 쪼개 파서 함수를 갈래별로 분리했음.

  • 금액/통화/계좌 분리 추출
  • 보낸이·받는이 라벨 위치 변동 흡수
  • 미인식 알림은 raw 그대로 남기고 sync flag만 false 처리

raw 보관이 의외로 효자였음. 파서 버그 회귀 잡을 때 과거 알림 재처리 가능했고, 누락 추적 시 증거로 그대로 갖다 씀.

자동수령 강화

알림 권한, 배터리 최적화 예외, 접근성 권한 — 단말마다 흐름이 달라 초기 설정 화면이 다음 단계를 자꾸 누락하던 이슈가 있었음. 권한 상태 머신을 명시화하고, 미충족 항목이 있으면 진입 자체를 막도록 바꿈.

  • 권한 체크 로직을 단일 진입점으로 통합
  • 빠진 권한별 가이드 다이얼로그 노출
  • 백그라운드 진입 시 헬스체크 → 실패하면 사용자 알림

의존성 정리

빌드 스크립트도 같이 손봤음. 안 쓰는 라이브러리 두 개 빼고, 로컬 DB 마이그레이션 경로를 추가했음. 마이그레이션 빠뜨리면 첫 실행에 그냥 죽어버려서 QA 단말 재설치 사태를 두 번 겪었음. 이번엔 fallback-to-destructive 옵션 빼고 정직하게 마이그레이션 코드를 작성. 한 번 데여보니 마이그레이션 누락은 코드 리뷰 체크리스트에 박아두는 게 나아 보임.

회고

큐잉이 제일 임팩트 컸음. 그동안 "왜 일부 결제만 누락되지?" 추적하느라 파트너 쪽에 사과 회신 여러 번 보냈는데, 원인 대부분이 네트워크 일시 단절이었던 걸로 추정됨. 운영 한 주 더 돌려보고 누락률 지표를 다시 확인할 예정. 단말 모델별로 권한 흐름이 또 어떻게 갈라지는지가 다음 숙제임.

다음

댓글 0

첫 댓글 달아줘.