업데이트 방향
오늘 업데이트의 핵심은 CatchPro를 개인 운행용 도구에서 고객 배포가 가능한 구조로 정리하는 것이었다. 특히 인성 CatchPro와 CatchPro Navi의 역할을 나누고, Free/Pro 배포판을 별도 패키지와 별도 버전 체계로 관리할 수 있게 만든 것이 가장 큰 변화다.
운행 중 가장 중요한 기준은 그대로 유지했다. 인성 CatchPro는 오더 확인과 확정 속도를 해치지 않는 방향으로 가볍게 유지하고, 지도와 길찾기처럼 상대적으로 무거운 기능은 CatchPro Navi 쪽으로 분리했다.
Free/Pro 고객 배포 구조
고객 배포용 앱은 이제 개인 운행판과 분리된 패키지로 관리한다.
- 인성 CatchPro Free:
com.catchpro.insung.free - 인성 CatchPro Pro:
com.catchpro.insung.pro - CatchPro Navi Free:
com.catchpro.navi.free - CatchPro Navi Pro:
com.catchpro.navi.pro
단순히 앱 이름만 나눈 것이 아니라 Android versionCode 대역도 분리했다. 이렇게 해두면 나중에 고객에게 배포한 Free/Pro APK의 버전을 따로 추적할 수 있고, 개인 운행판과 고객 배포판이 섞이는 문제를 줄일 수 있다.
고객 배포 파일 관리
고객에게 전달할 APK도 별도 파일명으로 모을 수 있게 했다. 예를 들어 디버그 배포 파일은 다음처럼 생성된다.
CatchPro-Insung-Free-v0.1.11-debug.apkCatchPro-Insung-Pro-v0.1.11-debug.apkCatchPro-Navi-Free-v0.1.11-debug.apkCatchPro-Navi-Pro-v0.1.11-debug.apk
앞으로 고객 배포는 Gradle의 collectCustomerDebugApks, collectCustomerReleaseApks 작업으로 모아서 관리한다. 이 구조는 나중에 홈페이지 다운로드, 구독형 라이선스, 고객별 배포 이력 관리로 확장하기 위한 준비다.
인성 CatchPro 안정성 정리
인성 CatchPro는 오더 확정 속도가 핵심이다. 그래서 인성 빌드에서는 네이버 Directions 계산이 절대 실행되지 않도록 하드가드를 추가했다. 지도 계산이나 경로 계산이 오더 확정 루프에 끼어들지 않게 막은 것이다.
- 인성 빌드에서 네이버 Directions 호출 차단
- 자동확정 기능은 Pro 중심으로 정리
- 불안정한 자동상세확정은 고객 Pro 기능에서 제외
- 사용설명서 탭에서 Free/Pro 권한 기준을 명확히 표시
이 방향은 앞으로도 유지한다. 기본 목표는 오더를 가장 빠르게 잡는 것이고, 편의 기능은 그 속도를 방해하지 않는 범위에서만 추가한다.
CatchPro Navi 개선
CatchPro Navi는 지도와 네비게이션에 집중한다. 여러 주소가 있을 때 현재 위치에서 방문 순서를 계산하고, 필요한 경우 네이버/TMAP 네비게이션으로 연결하는 역할이다.
- Navi Free/Pro 모두 현재 위치 표시 개선
- Navi Pro에도 주소 편집 기능 추가
- 주소 마커 표시와 방문순서/예상시간 계산 역할 정리
- 사용설명서에 Navi Free/Pro 사용 권한 설명 추가
특히 Navi는 여러 오더를 짧은 시간 안에 효율적으로 수행하기 위한 보조 도구다. 운행폰에서 지도 전체를 보고, 다음 목적지를 누르면 네이버 지도나 TMAP으로 바로 연결하는 방향으로 발전시키고 있다.
네이버 API 프록시와 Redis 캐시
배포를 준비하면서 네이버 API Secret을 APK 안에 직접 넣는 구조는 위험하다고 판단했다. 그래서 앱이 네이버 API를 직접 호출하는 대신 AWS 서버 프록시를 통하도록 정리했다.
- 앱은 AWS 프록시만 호출
- 네이버 Secret은 서버에서만 보관
- Geocoding/Directions 결과는 Redis로 캐시
- 같은 주소/좌표 조합은 캐시를 재사용
- 서버 로그에는 실제 주소와 Secret이 남지 않도록 정리
이 구조 덕분에 고객 APK를 배포하더라도 네이버 Secret이 바로 노출되는 위험을 줄일 수 있다. 동시에 Redis 캐시로 같은 길찾기 요청을 반복 호출하지 않게 만들어 API 사용량과 지도 반응 부담을 줄였다.
검증한 내용
오늘 변경은 GitHub 브랜치에 올리기 전에 빌드와 테스트를 확인했다.
- 인성 Free/Pro Kotlin 컴파일 성공
- Navi Free/Pro Kotlin 컴파일 성공
- 인성 Free 유닛 테스트 성공
- Navi Free 유닛 테스트 성공
- 고객 배포용 APK 수집 작업 성공
남은 과제
이제 고객 배포를 하려면 다음 단계가 필요하다.
- 서버 라이선스 인증
- 홈페이지 구독 결제
- 고객별 기기코드 관리
- Pro 권한 만료/연장 처리
- 릴리즈 서명키와 배포 프로세스 정리
오늘 업데이트는 그 기반을 만든 작업이다. CatchPro를 단순 개인 도구가 아니라, Free/Pro 고객 배포와 폐쇄형 Pro 운영까지 이어질 수 있는 구조로 정리했다는 데 의미가 있다.