최근 플레이하고 있는 크로스 플랫폼 게임, 원신의 유틸리티성 앱을 개발하여 배포 및 운영 중에 있습니다.
사용자들이 리뷰로 남겨주는 불편 사항들을 열심히 개선해서 현재도 활발히 업데이트 중으로, 앱을 개발 및 운영하며 느낀 점을 잊지 않기 위해 적어보려고 합니다.
메인 화면 | 위젯 디자인 화면 | 적용 된 위젯 |
---|
해당 앱은 깃 허브와 플레이 스토어에서 확인 할 수 있습니다.
내가 가장 필요한 기능.
게임 특성 상, 시간 당 충전 재화인 '레진'은 굉장히 귀한 재화입니다.💎💎
해당 재화를 확인하기 위해서는 게임에 접속하거나, 관련 공식 앱을 실행하여 찾아봐야만 하는 과정이 번거로웠고, 언제든 편하게 확인할 수 있는 경로가 필요함을 느꼈습니다.
그 과정에서 iOS에서 위젯 기능으로 볼 수 있도록 개발한 결과물을 보게되었고, "안드로이드에서도 이렇게 볼 수 있으면 정말 좋을텐데" 하는 생각에 개발했습니다.
물론 내가 필요했으니까. 가 가장 큰 원동력이 되었습니다.😎😎
스스로 필요해서 만들게 되면 의욕이 쉽게 식지 않더라구요.
Android에서 초기에는 Kotlin, Rx, Koin, Retrofit2를 사용해서 개발했습니다.
MVVM패턴을 사용하였고, DataBinding을 통해 글루 코드들을 줄이는 방향과 각 함수들을 캡슐화 할 수 있도록 노력했습니다...만!😏
현재는 Koin을 Hilt로 대체하였습니다.
또한, Clean Architecture를 적용하였고, Multi module로 나누어 관리하고 있습니다.
현재는 Rx와 Livedata를 각각 Coroutine/flow, Stateflow로 대체 하는 것이 목표입니다.
개발에 걸린 기간은?
프로젝트 생성 일은 2021년 10월 25일, 첫 앱 개시 일은 2021년 11월 2일로, 앱 자체의 핵심 기능인 '레진을 위젯으로 확인하기'는 일주일만에 개발이 진행되어 빠르게 핵심 기능만으로 배포할 수 있었습니다.😎
현재는 앱 외부 적으로는 앱 기능의 자동화, 자동 출석 체크, 여러 위젯 종류 지원, 위젯 디자인 커스터마이징 등의 사용자 편의성 지원하기 위해 노력하고 있으며,
앱 내부적으로는 앱 구조 변경 및 새로운 패턴 등을 적용하며 개발자로서의 경험을 넓히기 위해 노력하고 있습니다.
사용자는 내 예상과 전혀 다르다.
개발자는 항상 숙련된 사용자입니다.
나는 앱의 대해서 누구보다 잘 알고 있고, 새롭게 설치한 사용자는 내 앱을 하나도 모르는 채로 입문합니다.
이 두 사람의 눈높이는 전혀 달라요.
또한, 내가 생각지도 못한 행동을 새로운 사용자는 언제든 할 수 있습니다.
앱을 방금 설치한 사용자가 초등학생이라도 한 번에 보고 알 수 있어야 합니다.
물론 저는 그런 면에서는 아직도 갈길이 멉니다. 😥😥
타 사의 API를 사용함.
제가 직접 만들거나, 레퍼런스가 명확한 API가 아닌, 호요버스사의 API를 분석하고 이용하는 것에 가까웠습니다.
사측 이슈로 도메인이 변경되거나, 암호화 된 parameter의 암호화 방식이 변경되는 이슈에 대한 고지를 받을 수 없기에 항상 관련 된 정보에 관심을 기울여야 합니다.
물론 하루 만에 갑자기 사용 불가능하도록 변경되지는 않지만, 일정 버퍼 내에 대응하지 못하면 사용자는 "앱이 불량이다."라고 생각할테니까요.
매일 같은 시간에 동작해야 함.
기존에는 Alarm Manager을 통해 receiver을 호출하고, Foreground Service를 새로 호출하는 방식으로 구현했습니다.
Android 12가 업데이트 되며 background에서 Foreground Service를 호출할 수 없도록 변경되기 전까지는요...😂
현재는 Worker을 통해 원하는 시간까지 delay를 설정하고 호출할 수 있도록 수정되었습니다.
또한, Background에서 반드시 특정 시간에 동작해야하는 기능을 구현 할 경우, 기기의 상태(배터리, 네트워크, 전원 등)가 여러가지 변수로 작용하여 해당 작업들이 원하는 시간에 동작하지 않음을 경험해 볼 수 있었습니다.
무작정 예약 된 worker을 제거하면 안된다.
이전 버전에서 구현 된 Worker가 삭제되거나, 클래스명이 변경되는 경우나, 단순히 클래스를 제거하는 형태로 배포 시 기존 Worker 작업이 예약 된 기기에서 업데이트되면 org.koin.core.scope.Scope.throwDefinitionNotFound
이 발생했습니다.
Koin의 문제인지, worker의 문제인지 정확히는 파악하지 못했습니다.
중간에 버퍼 역할을 해주는 버전을 배포하여 삭제해야하는 Worker를 안전하게 제거 후 다음 버전에서 삭제하는 방식으로, 두 버전을 거쳐 배포하는 방법을 고려해봐야 함을 알았습니다.
게임의 인기를 등에 업고 2022년 4월 21일 기준, 약 1700대의 기기에 내 앱이 설치되어있고 그 만큼의 사용자가 사용 중이라고 생각하니 책임감이 생기더라구요.
이렇게나 많은 사람들이 나와 같은 기능을 필요로 했고, 내가 그 요구를 만족시켜줄 수 있었다고 생각하니 아주 뿌듯해요.🤗
한참 동안 개선사항을 받아들이며 새 기능을 추가했는데도 아직도 사용자들은 새로운 기능과 개선점을 제안합니다. 너무 감사해요. 혼자서는 생각하지 못한 많은 부분을 덕분에 깨닫고 개선할 수 있었으니까요.
호요버스사의 API는 어디에서 확보가 가능한지요?