Skip to content

Commit

Permalink
2022-01-27 글 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
danggai committed Jan 27, 2022
1 parent 8d38bd9 commit f5917ca
Showing 1 changed file with 126 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
categories:
- Android
tags:
- Kotlin
- Android
---







이번에는 최근 플레이하고 있는 크로스 플랫폼 게임, 원신의 유틸리티성 앱을 개발했습니다.

사용자들의 니즈를 반영해서 현재도 활발히 업데이트 중으로, 앱을 개발하며 느낀 점을 적어보려고 합니다.



해당 앱은 [깃 허브](https://github.com/danggai/android_genshin_resin_widget)[플레이 스토어](https://play.google.com/store/apps/details?id=danggai.app.resinwidget)에서 확인 할 수 있습니다.





# Why

> 왜 이 앱을 개발했는가?
게임 특성 상, 시간 당 충전 재화인 '레진'은 굉장히 귀한 재화입니다.



해당 재화를 확인하기 위해서는 게임에 접속하거나, 관련 공식 앱을 실행하여 찾아봐야만 하는

일련의 과정이 너무 번거로웠고, 언제든 편하게 확인할 수 있는 경로를 새로 만들고 싶었습니다.



그 와중에 iOS에서 사용자들이 연구해서 위젯으로 볼 수 있도록 개발한 결과물을 보게되었고,

안드로이드에서도 이렇게 볼 수 있으면 정말 좋을텐데, 하는 생각에 개발했습니다.



물론 제가 쓰기 위해서가 큽니다. :)





# How

> 어떤 환경에서, 어떤 패턴으로 개발했는가?
Android에서 Kotlin, Rx, Koin, Retrofit2를 사용해서 개발했습니다.

MVVM패턴을 사용하였고, DataBinding을 통해 글루 코드들을 줄이는 방향과 각 함수들을 캡슐화 할 수 있도록 노력했습니다.







# When

> 개발에 걸린 기간은?
프로젝트 생성 일은 2021년 10월 25일, 첫 앱 개시 일은 2021년 11월 2일로

앱 자체의 핵심 기능인 '레진 확인'은 일주일만에 개발이 진행되어 빠르게 핵심 기능만으로 배포할 수 있었습니다.



현재는 여러가지 편의 기능들을 넓게 구현하는데 집중하고 있습니다.



현재는 자동 출석 체크, 여러 위젯 타입 지원, 위젯 디자인, 여러 알림 등

다양한 편의 기능 및 커스터마이징을 지원하기 위해 현재까지도 노력하고 있습니다.









## 구현 간 예상과 달랐던 점

> 타 사의 API를 사용함
제가 직접 만든 API가 아닌, 미호요사의 API를 분석하고 이용하는 것에 가까웠기에

언제 Base URL이 바뀔 지 모르는 일이거나, 특정 Parameter이 생기거나 사라질 수 있다는 점을 주목할 필요가 있었습니다.





> 매일 같은 시간에 동작해야하는 동작
또한, 매일 같은 시간에 반드시 동작해야 하는 기능(자동 출석체크)을 구현하기 위해 Worker을 통해 Background에서 진행하는 방식을 택한 점이 아쉽습니다.

현재는 Alarm Manager을 통해 호출하고, Foreground Service를 새로 호출하는 방식으로 리팩터링을 진행했습니다.

Background에서 반드시 특정 시간에 동작해야하는 기능을 구현 할 경우, 기기의 상태가 여러가지 변수로 작용하여 해당 작업들이 원하는 시간에 동작하지 않음을 알 수 있었습니다.





> Worker을 제거 할 때
지난 버전에서 구현 된 Worker이 더 이상 다음 버전에서 필요 없을 경우, 단순히 클래스를 제거하는 형태로 배포 시

기존 Worker이 작동 된 기기에서 업데이트가 되면 `org.koin.core.scope.Scope.throwDefinitionNotFound`이 발생했습니다.



중간에 버퍼 역할을 해주는 버전을 배포하여, Worker을 정상적으로 제거 후 다음 버전에서 삭제하는 방식으로, 두 버전을 거쳐 배포하는 방법을 고려해봐야 함을 알았습니다.

0 comments on commit f5917ca

Please sign in to comment.