https://www.youtube.com/playlist?list=PLam6bY5NszYN6-a1wt7yRISWfmYPdkbMu
Chirag Note App을 클론 코딩해 보았습니다.
사용 기술스택
구분 | 원본 | 리펙토링 |
언어 | JAVA | Kotlin |
UI | xml | xml |
디자인패턴 | MVC | MVVM |
아키텍처 패턴 | 패키징 | 클린아키텍처 |
DI | 없음 | Hilt |
이미지 로딩 | glide | uri |
Database | Room | Room |
과정
해당 프로젝트는 Java로 만든 MVC구조의 노트앱이었습니다. 해당프로젝트를 Java에서 Kotlin으로 변환하고 MVC모델에서 클린아키텍처 MVVM 구조로 만드는 게 오류도 없겠지만 그 구조 가작고 위의 과정은 시간이 오래 걸린다는 단점이 있기에 클린아키텍 모델을 먼저 만들고 Java에서 Kotlin으로 변환하는 과정으로 개발하였습니다.
기존의 코드는 비동기적으로 roomdb에 접근을 하기 위해서 현재는 deprecated 된 AsyncTask를 이용하여 처리하기도 하고 viewmodel을 적용하지 않아서 화면회전 같은 configuration chaged를 하게 되면 액티비티 내부에 있는 데이터가 초기화도 되는 상황이었습니다. 이는 당시 kotlin보다는 Java의 규모가 크기도 하였으니 Kotlin의 코루틴이나 ViewModel 등을 적용하지 못했던 것 같습니다. 그래서 리팩토링을 하면서 비동기처리 같은 경우 코루틴으로 변경하고 ViewModel을 적용하였습니다.
이미지의 경우 file uri를 문자열로 변환하고 DB에 저장하는 방식을 이용하였습니다. 이는 보안적인 측면으로나 이미지가 삭제되거나 변경이 있을 경우 db의 데이터는 삭제되지 않으며 알 수 없는 예외가 생길 수 있습니다. 그렇기에 이 부분을 수정하여 해당이미지가 보이는 ImageView를 Bitmap으로 앱내부저장소에 데이터를 저장하고 해당 데이터의 주소를 저장하는 방식으로 바꾸었습니다.
결과물
https://github.com/PotatoMeme/Android-UI-Test/tree/dev/screen/chirang-note-app
느낀 점
이번에는 자바 코드를 리펙토링하였습니다. 처음에는 그저 자바로된 코드고 그 코드를 kotlin문법에 맞게 변환하면 다 끝날 줄 알았습니다. 그렇지만 위과정에서도 말했다시피 이전에 작성된 코드고 deprecated 된 코드도 많았고 현재는 보안상 적절하지 않은 구현방법도 있었습니다. 기존의 프로젝트가 단지 서비스를 위해 만들어졌다기보다는 유튜브에 강의 형식으로 올려져 있던 앱이기도 하였기에 리팩토링을 하면서 많은 이슈가 생겼던 것 같습니다.
이걸 리팩토링하며 느낀 점은 구현할 때 여러 방법이 있겠지만 가장 유지보수하기 좋고 안전한 방향으로 해야 된다는 것입니다. 예를 들어 이번프로젝트 같은 경우에는 이미지 저장방법이 실제파일의 Uri를 가져옵니다. 이경우 위에서도 말했다시피 여러 이슈가 생깁니다. 나중에는 안드로이드 보안상으로 해당 버전에 맞게 로직에 맞게 다시 짜야할 수도 있고요. 그렇기 현재 상황에 맞는 가장 안전한 방법을 써야 합니다. 모듈화나 클린 아키텍처도 그와 비슷한 것 같습니다. 모듈화로 쪼개놓고 해당 상황에 맞게 모듈을 추가하여 구성할 수 있다는 것도 장점인 것 같습니다. 이번 프로젝트 같은 경우에도 나중에 compose로 나누더라도 해당 모듈을 상황에 맞게 빌드하면 되기에 이러한 장점을 알 수 있었던 기회가 된 것 같아 좋습니다
'안드로이드 > 안드로이드' 카테고리의 다른 글
안드로이드 MVVM 카카오 로그인 이슈 (0) | 2024.11.01 |
---|---|
CNA(Chirag Note App) 프로젝트하면서 생긴 이슈 및 해결 ,기술 정리 (0) | 2024.10.02 |
CIP(Cat-Image-Provider) 프로젝트하면서 생긴 이슈 및 해결 ,기술 정리 (1) | 2024.09.27 |
CIP(Cat Image Provider) 개발 회고 (0) | 2024.09.26 |
TBA(Ticket-Booking-app) 프로젝트하면서 생긴 이슈 및 해결 ,기술 정리 (3) | 2024.09.22 |