어쩌다?
나는 학기 중 수업에 처음으로 안드로이드 관련 전공 수업을 듣고, 안드로이드의 매력을 느끼고
안드로이드 개발자를 목표로 공부하고 있다.
더 많은 프로젝트를 경험해보고 싶어서, 겨울방학에 애플리케이션을 만드는 연구실을 지원했다.
연구실에서 간호대 대학원과 협업을 해서 건강측정 어플리케이션 개발을 맡게 되었고,
애플리케이션 전반적인 개발을 맡아서 프로젝트를 진행했다.
한계
글을 적기 전에 프로젝트를 진행하면서 느꼈던 아쉬운 점과 한계는 정말 많았다.
소프트웨어 설계에 대해서 무지했다.
말 그대로 설계란 개념에 대해서 자세히 알 지 못했고, 당연히 필요성도 못 느꼈고, 주먹구구식으로 개발을 진행했다는 점이다.
초반에 계획적인 설계가 얼마나 큰 장점이 되는지 개발 중반에 느꼈다.
여기서 계획적인 설계라 하면은 다이어그램, 디자인 패턴과 같은 것이다.
앱의 상황에 따라 효율적인 디자인 패턴을 적용할 수 있지만, 그 때 당시는 mvvm, mcm과 같은 개념이 없어서
view와 data를 분리하지 못했고, 효율적인 쓰레드 작업을 하지 못했다..
메인스레드와 백그라운드 스레드를 구분해서 비동기적인 작업을 하지 못해서, 앱에서 많은 오류가 발생했다.
다른 사람들과 소통이 서툴렀다.
외부 연구실과 협업을 통해서 프로젝트를 진행했었다.
프로젝트 경험이 많이 없던 나는 당연히 비개발자들과 협업 프로젝트가 처음이었고 많이 답답함을 느꼈었다.
하지만 지금 와서 생각해 보니 나도 비개발자분들에게 많이 질문을 했었고, 서로서로 답답함을 느꼈을 거라고 생각한다.
개발과 연구에 대해서 한쪽만 이해하면 될 것이라고 생각했지만, 서로 다른 분야에 대해서 어느정도는 이해를 해야
원활한 소통이 진행되고, 성공적인 프로젝트가 완성된다고 느꼈다.
실력부족
자신의 실력에 대한 정확하게 인지해야 한다는 것을 느꼈다.
외부 연구실에서 굉장히 많은 기능을 요구했고, 그 기능들을 구현하기에 얼마나 어려운지에 대해서 무지했던 나는 무작정 가능하다!!라고
대답했지만 개발을 시작하니 구현하기에 어려운 기능들이 많았고, 실력이 부족해서 요구사항을 만족하지 못했었다.
휴대폰을 자주 사용하는 우리들에게 친숙한 기능이지만, 그것을 구현하기까지는 엄청난 노력과 실력이 필요하다는 것을 느꼈다.
개발 초기
프로젝트에 대한 주제를 간략하게 설명하자면 노인들을 위한 건강 설문조사 어플리케이션입니다.
개발 초기는 단순하게 설문조사를 진행하고 결과를 데이터베이스에 저장해서 외부 단체의 자료 수집을 돕는 용도로 계획했습니다.
그리고 자체적으로 설문지를 추가하고, 제거할 수 있는 기능을 요구했습니다.
그에 따라서 관리자 기능을 만들어서 앱 내에서 데이터베이스로 접근할 수 있도록 계획했습니다.
왼쪽은 프로그램에 순서도이고, 오른쪽 그림은 관리자 기능에 대한 순서도입니다.
이제 여기서 중요한 기능인 데이터베이스를 정해야 했습니다.
기존 연구실에는 몽고 DB를 사용하고 있었습니다.
규모와 실력적으로 부족함을 많이 느끼고 있어, 동일한 Nosql형태이고, 서버가 필요 없는 파이어베이스를 통해서 안드로이드 환경에 많은 기능을 제공하기에 몽고 DB보다는 파이어베이스를 제안했고, 파이어베이스를 사용하게 되었습니다.
이번 프로젝트를 진행하면서 파이어베이스에 대해서 공부를 했는데 실시간 데이터베이스, 클라우드 데이터베이스, 그리고 push 알림 기능등 많은 기능이 있는 것을 배웠습니다.
데이터베이스
설문지
각 항목별로 설문조사들을 firestore를 통해서 구현했다.
사용자의 개인적 특성과 결과
사용자의 개인적 특성과 날짜에 대한 설문조사 결과를 firestore를 통해서 구현했습니다.
firestore를 사용하고 느낀 점은 MySql처럼 테이블 형태가 아니어서 복잡한 데이터베이스를 구현하기에는 한계가 있지만,
단순한 형태의 데이터베이스를 읽고, 저장하기에 편리하다는 것을 느꼈다.
또 Mysql은 서버가 필요하지만, firestore는 서버가 필요 없는 것도 편리했다.
개발 진행단계
개발을 하면서 많은 것을 느꼈다..
이론을 공부하는 것보다는 실제 개발에서 부딪힌 문제점을 해결하면서 공부하는 것이 훨씬 도움이 된다는 것을 느꼈다.
MVVM의 필요성
View와 데이터를 분리하는 것이 얼마나 중요한지 느꼈다.
View는 UI 로직만 담당하고, 데이터를 관리하는 클래스는 viewmodel을 통해서 구현하면,
관리도 쉽고 수정사항을 바로바로 적용시킬 수 있다. 하지만 개발 당시 MVVM 패턴과 viewmodel, 옵서버를 알지 못해서
엄~청 비효율적으로 코드를 짠 거 같다..
이렇게 되니 오류도 많아지고, 코드도 복잡해져서, 나중에는 어디가 틀린 건지 체크하는데 엄청 오래 걸렸다.
권한설정
알람 기능을 만드는데 분명히 알람이 제대로 가야 하는데, 계속 휴대폰에 알람이 오지 않았다.
그래서 코드가 잘못된 건가 싶었는데, 알고 보니 앱 내에서 알림 권한을 주지 않아서 생긴 문제점이었다.
권한 요청을 하는 많은 코드가 있지만, 그중에서 쉽게 권한을 요청할 수 있는 방법인
TedPermission 라이브러리를 사용해서 해결했다.
간단한 코드를 통해서 권한을 요청할 수 있었고, 정말 신세계였다.
ViewModel
애플리케이션 특성상 설문조사를 진행하고, 뒤로 가기를 누르면 이전 설문조사 항목에 대한 답을 유지해야 했다.
하지만 이 선택에 대한 데이터를 유지하는 방법을 viewModel을 통해서 구현했는데, 정말 정말 편리했다.
내가 구현한 방법이 최선은 아니었지만, 프래그먼트 내에서 데이터를 공유하기 위해서는 ViewModel이 효과적이었다.
디자인
어떻게 하면 노인분들이 불편하지 않게 애플리케이션을 사용할 수 있을까에 대해서 많은 고민을 했다.
사용자가 불편함을 느끼는 애플리케이션은 정말.. 볼품없는 애플리케이션이라고 생각한다.
시각적으로 효과적이게 하기 위해서 크게 3가지 방법을 사용했다.
progress bar
설문조사가 얼마나 남았는지 시각적으로 보여주기 위해서 progress bar를 사용해서 진행률을 표시했다.
그리고 현재 자신의 건강상태가 어떠한지 프로그래스 바의 마커를 찍어서 표시했다.
CardView
건강교육자료를 제공하기 위해서 옆으로 넘길 수 있는 Cardview를 사용했다.
Cardview 안에는 현재 몇 번째 페이지를 보고 있는지 반환해 주는 getcount()가 있어서 진행도도 보여줄 수 있었다.
확대
건강자료를 확대해서 볼 수 있으면 어르신들이 더 편하게 이용할 수 있다고 생각해서 건강자료에 확대기능을 넣고 싶었다.
내 실력 부족인지 확대에 대한 레퍼런스가 너무 부족했다.
생각보다 신경 써야 할 게 엄~~ 청 많았다.
손가락의 액션을 감지해야 하고, 이미지를 행렬 형태로 변환해서, 초기 행렬을 저장하고, 확대되는 행렬을 저장해서 뷰에 뿌려줘야 했다.
액션은 크게 ACTION_DOWN, ACTION_POINTER_DOWN, ACTION_UP, ACTION_POINTER_UP 등이 있고,
여기서 pointerCount를 통해서 손가락의 개수를 판단해서 2개의 손가락으로 화면을 땅기면 줌이 되게끔 만들었다.
하지만 코드가 엉성해서 그런지 확대기능이 너무 사용자가 느끼기에 불편하게 작동했다.
우리가 사용하는 확대기능처럼은 구현하는 게 쉽지가 않았다.
이 부분은 다음 프로젝트에서 자세하게 공부해서 보완할 예정이다.
마무리
프로젝트를 마무리하면서, 결과적으로 앱을 배포하는 데는 실패했다.
너무 많은 오류가 있는 실패한 애플리케이션이라 따로 배포는 하지 않았다.
다음 프로젝트를 도전할 때는 MVVM 패턴을 사용한 UI와 데이터의 분리를 통한 효과적인 코드를 작성하고 싶다.
그리고 떠오르는 기술인 jetpack compose를 사용한 안드로이드 개발도 진행해 보는 것이 목표이다.
다음 프로젝트는 꼭 play store에 배포를 해보고 싶다.
'Experience > 후기(코딩테스트,프로그램,프로젝트)' 카테고리의 다른 글
Jetpack Compose 적용기[MindSync] (1) | 2024.03.06 |
---|---|
부스트캠프 웹 ﹒모바일 8기 멤버십 수료 후기 (4) | 2023.12.25 |
부스트캠프 웹・모바일 8기 챌린지 수료 후기 (9) | 2023.08.07 |
2023 부스트캠프 웹 ﹒ 모바일 8기 지원 및 합격 후기 (3) | 2023.07.05 |
[코딩테스트] - 2023 Summer coding - 스타트 업 인턴 프로그램 후기 (0) | 2023.04.29 |