/MaskRadar

공적마스크 검색 어플리케이션 '마스크 레이더'입니다. (안드로이드 전용)

Primary LanguageJava

MaskRadar - 마스크 레이더

현재 구글 플레이스토어 정책 강화로 인하여 어플리케이션 검색이 되지 않습니다. 한국 정보화 진흥원에 앱 등록을 문의한 후, 플레이스토어에 재 개시 될 수 있도록 하겠습니다. -> 재출시 되었습니다!!

건강보험심사평가원에서의 오픈 API 제공 중단에 따라 본 어플리케이션은 더이상 운용되지 않습니다.

Google Play - https://play.google.com/store/apps/details?id=com.jh.mask_radar
ONE Store - https://onestore.co.kr/userpoc/apps/view?pid=0000748572

공적마스크 검색 어플리케이션입니다.
Only For Android - 안드로이드 전용입니다.

 

🤔 본 어플리케이션을 만들게된 계기 (What made me create this application?)

2020년도 초, 코로나19의 확산에 따라 마스크 수급불안이 발생하였고 이에 정부는 2020년 3월 5일 '마스크 수급 안정화 대책' 을 발표하였습니다. (출생연도 끝자리에 따라 마스크를 구입할 수 있는 요일을 지정)
다만, 각 약국마다 배분할 수 있는 마스크의 수에 제한이 있었다보니 약국별로 재고가 얼마나 남아있는지 알 수 있도록 관련 API도 제공하기 시작하였습니다. (3월 11일) - 참고 링크
저 또한 사람들이 편리하게 마스크를 살 수 있도록 돕기 위해 어플리케이션 개발에 착수하였습니다.

 

💻 개발 기간 (Development Period)

최초버전인 Ver 1.0을 제작하는데에 소요된 시간 - 약 1주일
이후 UI 변경 및 불편사항들을 반영하여 업데이트 진행.
개발은 혼자 진행하였으며 아이콘 및 디자인 부분에서는 박유진 학생(yujinp@gmail.com)의 도움을 받아 진행하였습니다.
개발에 사용된 언어: Java, Kotlin(일부)
 
사실 심사받는 과정이 길어져 출시에는 몇주 더 소요되었었다.(코로나로 인한 재택근무 등의 영향)
출시된 이후에도 '코로나 관련 어플리케이션 정책'변경으로 인해 한차례 구글 플레이에서 삭제되었었다가 '한국지능정보사회진흥원(구 한국정보화진흥원) PasS-TA' 문의를 통해 해결하였었다.

 
Kotlin은 Code with Joyce테크과학! DiMo 유튜브, 구글검색 등을 이용하여 학습하였음.
 

📚 사용한 라이브러리 (Used libraries)

  1. 네이버 지도
  2. Google Material Design
  3. Volley
  4. play-services-location
  5. Room
  6. swipe refresh layout
  7. 기타 legacy support나 kotlin 지원 라이브러리 등

 

🚀 사용했거나 사용하려 했던 패턴/스킬 (Used Or Tried Patterns And Skills)

  1. MVVM Architecture (Model - View - ViewModel)
    제대로 사용했다고 볼 수는 없다. 새로운 Activity/Fragment 등을 만들 때 자동으로 만들 수 있다는 점이 궁금하여 구글 검색 후 사용을 시도해보았지만.. 굉장히 미숙하게 사용했다. (Model, View, ViewModel의 분리를 전혀 하지 못했다.)
  2. Factory Pattern (객체 생성의 시점을 바로 결정하지 않고 서브클래스로 미룸)
    이 패턴 또한 올바르게 사용했다고 생각이 들지는 않는다.(ViewModel 생성 시 ViewModelProvider 이용)
  3. Observer Pattern
    Fragment에서 ViewModel의 멤버 인스턴스를 Observe하는 데 사용.
  4. Binding (양방향 바인딩)
    자체적으로 제공하는 양방향 data binding을 사용해보았다.
  5. Singletone Pattern
  6. Local에 데이터를 저장하기 위해 Room Library 이용
  7. 비동기를 위한 멀티쓰레딩 구현 시 Excutors ThreadPool 이용

 

💦 만들면서 힘들었던 점 (Difficulties)

  1. 스파게티 코드(spaghetti code)로 작성한 탓에 나조차도 유지 보수를 하기가 어려웠다.
  2. NullPointerException
    자바로 개발을 했는데 런타임 중간중간 의도치 않은 예외가 발생했었다. 이를 디버깅하는 것은 상당히 까다로웠다. (Null Safety가 얼마나 좋은 것인지 알 수 있었다.)

 

💬 기능(사용법)

 

🛠 개선해야할 점/추가했으면 하는 기능 (Needs to be improved / Want to add)

  1. Activity/Fragment의 LifeCycle에 맞춰 각종 뷰 바인딩이나 메소드 호출 등의 위치 변경 필요 (아무대나 막 호출하고 선언하고 그랬는데 그러면 안된다.)
  2. 스파게티 코드(spaghetti code) 개선 필요

 

📝 Information

 초기버전에서 네비게이션의 위치를 변경하였으며 즐겨찾기 기능을 추가하였습니다. 

데이터는 '건강보험심사평가원-공적마스크 판매정보'를 통해 가져왔습니다.(공공데이터포털) https://www.data.go.kr/dataset/15043025/openapi.do

 

사용된 오픈소스 파일 정보


  1. 어플리케이션에 사용된 ic_map, ic_move_to_inbox, ic_notification_black, ic_settings, ic_settings_outline, ic_start, ic_start_border, ic_update, ic_warning xml 파일들은 Google Material Design 아이콘을 사용하였습니다.   Material.io - Available under Apache license version 2.0
  2. ic_nh, ic_marker_nh, ic_unselected_nh 아이콘에 사용된 농협 마크는 NH농협의 CI 심볼마크를 사용하였습니다. NH농협 CI 소개
  3. ic_post_offece, ic_marker_post_office, ic_unselected_post_office 아이콘에 사용된 우체국 마크는 우정사업본부의 우정 제비 CI를 사용하였습니다. 우정 제비 CI
  4. ic_marker_pharm, ic_unselected_pharm, ic_pill, ic_pill_color 아이콘, 어플리케이션 로고 및 그래픽 이미지의 저작권은 박유진 학생(yujinp@gmail.com) 및 안진홍(ictechgy@gmail.com)에 있습니다.

Ver.1.0.0 이미지

mask_radar_1

mask_radar_2

mask_radar_3

mask_radar_4

mask_radar_5

mask_radar_6

mask_radar_7

아래 이미지는 Ver. 1.0.0 이전 이미지

mask_radar_screenshot1

mask_radar_screenshot2

mask_radar_screenshot3