📌 앱 소개: 국영 가스 공사의 수기식 가스 사용량 관리를 자동화하는 안드로이드 앱
🕒 기간: 2021.02.20 ~ 2021.03.18 (1개월)
📱 플랫폼: Android 네이티브 앱
🏢 회사명: Desoft (쿠바 국영 소프트웨어 개발사)
👥 개발 인원: 1명
💼 역할: 전체 안드로이드 앱 개발 담당
🛠️ 사용 기술: Android
Kotlin
Coroutines
MVVM
Room
VideoView
Jetpack
Material Design
Data Binding
Navigation
MPAndroidChart
🔗 GitHub: daehan-lim/gas-consumption-manager
쿠바 국영 가스 공사에서 기존의 수기식 가스 사용량 기록 및 계산 프로세스로 인한 업무 효율성 저하와 사용자 불편을 해결하기 위해 모바일 자동화 솔루션의 필요성이 대두되었습니다. 기존 시스템은 가스 계량기 검침부터 요금 계산까지 모든 과정이 수동으로 이루어져 시간이 많이 소요되고 계산 오류가 발생할 가능성이 높았습니다. 또한 가스 계량기 검침 방법에 대한 교육 자료와 고객 지원 체계가 체계적으로 구축되지 않아 사용자들이 어려움을 겪고 있었습니다. 이에 따라 사용량 자동 계산, 데이터 시각화, 오프라인 우선 설계를 통한 종합적인 가스 소비 관리 앱 개발 프로젝트를 기획하게 되었습니다.
├── features/ # 기능별 모듈 구조
│ ├── consumption/ # 가스 소비량 계산 기능
│ │ ├── ConsumptionFragment.kt # 소비량 입력 및 계산 UI
│ │ ├── ConsumptionViewModel.kt # 소비량 계산 비즈니스 로직
│ │ └── ConsumptionViewModelFactory.kt
│ ├── history/ # 사용량 이력 및 차트 분석
│ │ ├── HistoryActivity.kt # 차트 기반 분석 화면
│ │ ├── HistoryViewModel.kt # 차트 데이터 처리 로직
│ │ └── HistoryViewModelFactory.kt
│ ├── offices/ # 영업소 연락처 디렉터리
│ │ ├── ComercialOfficesFragment.kt # 영업소 목록 UI
│ │ ├── ComercialOfficesAdapter.kt # RecyclerView 어댑터
│ │ └── ComercialOfficesViewModel.kt
│ ├── readcounter/ # 계량기 검침 가이드
│ │ ├── ReadCounterFragment.kt # 동영상 가이드 화면
│ │ └── ReadCounterViewModel.kt
│ ├── about/ # 앱 정보 및 연락처
│ │ └── AboutActivity.kt
│ └── splash/ # 스플래시 화면
│ └── SplashActivity.kt
├── database/ # Room 데이터베이스 레이어
│ ├── Consumption.kt # 소비량 데이터 엔티티
│ ├── ConsumptionDao.kt # 데이터 액세스 객체
│ └── ConsumptionDatabase.kt # 데이터베이스 설정
├── model/ # 데이터 모델
│ └── ComercialOffice.kt # 영업소 정보 모델
├── util/ # 유틸리티 클래스
│ ├── BindingUtils.kt # 데이터 바인딩 어댑터
│ └── Util.kt # 공통 유틸리티 함수
└── MainActivity.kt # 메인 액티비티 및 네비게이션
ConsumptionDao
를 통한 데이터 액세스 레이어 추상화 및 비즈니스 로직 분리Coroutines
와 suspend
함수를 활용한 비동기 데이터베이스 작업 처리로 UI 스레드 블로킹 방지LiveData
와 ViewModel
을 통한 반응형 UI 구현 및 생명주기 인식 데이터 바인딩fallbackToDestructiveMigration()
을 적용한 안정적인 데이터베이스 관리TextInputLayout
의 errorEnabled
속성을 활용한 실시간 필드 검증 UI 구현PAYMENT_COEFFICIENT
상수(2.5)를 활용한 일관된 요금 계산 로직 구현AlertDialog
를 통한 결과 제시BarChart
를 활용한 월별 가스 소비량 시각화 및 애니메이션 효과로 사용자 경험 향상MonthPickerDialog
를 활용한 직관적인 연도 선택 인터페이스 구현MediaController
를 커스터마이징하여 전체화면 버튼 추가 및 화면 회전 제어 구현SystemUI
숨김 처리로 몰입형 시청 환경 제공onStart()
, onStop()
, onPause()
에서의 적절한 동영상 리소스 관리로 메모리 누수 방지raw
리소스를 활용한 오프라인 동영상 재생으로 네트워크 의존성 제거Intent.ACTION_CALL
과 Intent.ACTION_SENDTO
를 활용한 네이티브 앱 연동CALL_PHONE
권한 동적 요청 및 권한 거부 시 대체 다이얼 액션 제공@BindingAdapter
를 활용한 재사용 가능한 뷰 바인딩 로직 구현setupWithNavController()
를 통한 자동 네비게이션 상태 관리onBackPressed()
오버라이드를 통한 앱 종료 확인 다이얼로그 구현segoe_ui
, seguisb
) 적용으로 차별화된 타이포그래피 구현Intent.ACTION_VIEW
를 통한 외부 브라우저 연동으로 추가 정보 접근 경로 제공findViewById()
제거@{viewModel.property}
문법을 통한 선언적 UI 업데이트 구현executePendingBindings()
를 활용한 즉시 바인딩 처리로 UI 깜빡임 방지