Android Compose 앱 개발 4주간의 회고(2023.12~2024.1)

홍석·2024년 1월 23일

4주간 안드로이드 compose를 사용하여 해피에이징 낙상방지9988 앱을 개발하며 느낀점들 입니다.

1.프로젝트 개요

이번에 개발하게 된 어플은
모바일 : Android Kotlin, 백엔드 : Spring Java, Ai: Python으로 구성된
노인분들의 낙상방지를 목적으로한 설문조사 및 매니저들의 시니어관리 어플입니다.

2. flutter에서 android를 사용해보며

저는 앱개발을 플러터로 시작하여 1년간 사용해보았었습니다.
안드로이드의 xml보다 컴포즈의 선언형 ui가 익숙하고 다루기 쉬울것이라 생각하여
compose를 사용하기로 결정하였습니다.


개발중에 가장 체감이 되던것은 핫 리로딩이 없어 매우 불편하다는 것이였고, 아직까지는 완벽하지 않다는 것이였습니다.

개발중의 이슈사항

  • TextButton의 클릭효과가 위젯의 크기와 다르게 물결효과가 생김
  • Modifier에서 클릭효과없이 클릭하는 확장함수가 없어 이를 개발자가 확장함수로 작성해줘야 함
  • 미리보기가 hiltViewModel를 사용하여 뷰모델과 함께 사용해야하는 경우, 이를 인식하지 못해
    전체 화면 미리보기를 사용하려면 뷰모델과 분리하여 이를 표시해줘야 함
  • navController로 화면을 push하였을때 이전화면은 스크린에 올려져있는것이 아닌, 스택에 쌓인것으로 취급되어 뒤로가기를 눌렀을때, 해당 화면을 다시 그리는 것으로 작동하였습니다.(ex 구글맵을 사용했다면 구글맵을 다시그림)

개발 경험에 DX적으로 긍적적인점

  • 플러터와 다른점은 역시 네이티브답게 웬만한 모든 기능은 jetpack 라이브러리를 통해 공식적인 구글 기술을 통해 생각하는 모든것들이 구현이 가능하였습니다.
  • compose의 ui는 이게 구현이 가능한가? --> 가능하다. 와같이 Modifier, row, column을
    통해 구현이 가능한것이 좋았습니다.
  • 또한 DI와 멀티모듈을 통해 역할분리가 꽤나 편리하게 구현할수 있었습니다.(처음구현할때 클래스가 너무 많아지는것도 있었지만..)
  • 프로젝트가 끝나가는 마지막주차에 요구사항 변경이 미친듯이 많았지만.. 이를 거의 모든것을 클래스로 추상화하거나 함수화하여 다루게 되어,
    변경에 대응하는 과정이 Kotlin언어 차원에서 이를 실현하는것이 매우 편리하였습니다.
  • 안드로이드는 멀티모듈을 통한 data,domain,presentation을 거의 모든 프로젝트에서 채택하는것이 인상깊었고, 이를 통해 코드퀄리티가 어느정도 보장되고, 다른이들의 프로젝트를 봤을때 전체적인 맥락을 파악하는것이 편리하였습니다.
  • 무엇보다 안드로이드는 인프런이나,유데미에서도 세부적인 강의가 정말 없는데, 안드로이드 공식문서의 sunflower, nowinandroid를 통해 많은것을 배울 수 있었습니다.

3. 개발중에 사용해본 것들

  • 피그마파일의 개발자 모드의 modifier를 볼 수 있는게 좋았습니다.
    그러나 그림자효과는 적용이 이상하게 되어, 손으로 다 해야했었습니다..
  • NavController와 NavHost를 사용하며 하나의 NavHost안에 모든 composable를 사용했는데, 화면이 점차 들어나며 파일길이가 너무나 길어짐을 느껴, 이를 NavGraphBuilder 확장함수를 통해 모듈화를 해야하겠다고 느낄 수 있었습니다.
  • 또한 주소검색을 사용해야 했고, 이를 github호스팅을 통해 웹뷰로 연결하였고 JSBridge를 처음으로 사용해보았는데 매우 신기하였습니다.
  • 또한 안드로이드는 앱에서 에러가 throw가 되는경우, 어떠한 경우와 관계없이 앱이 반드시 종료되므로, 이를 처리하는 매우 집착적으로 모든 에러발생경우를 처리하게 되었습니다. 또한 Flow와 코루틴을 통해 비동기 작업이 매우 편리하였습니다.
  • 기업측에서, 앱을 운영하면서 관리자페이지를 통해 데이터를 관리하고자하는 요구사항이 존재하였습니다. 이를 위해 Next.js를 필요한부분을 학습하였습니다. 상태 호이스팅이 같은 부분이 많아, 적용하는 부분이 비슷했고, vercel을 통해 관리자 페이지를 배포하였습니다.
    해당 과정 중에 cors정책과 같이 앱개발에서는 신경써야 하지 않아도 괜찮은 부분과 mixed content와 같은 부분을 해결해야했고, 해당부분은 Next의 프록시를 사용하여 해결했습니다.
    디자인패턴중에서도 프록시패턴이 이해가 안되던 부분이 이번 실습을 통해 이해할 수 있었습니다.
profile
bayy1216.tistory.com <- 블로그 이전했습니다 🥹

0개의 댓글