본문 바로가기

개발일기

8월 한달 토이 프로젝트를 해보자! -01

임시 백수다. 백수면 백수지 왜 임시인가? 퇴사를 하였고 다음 입사 전까지 시간 여유가 있기 때문이다.

퇴사 후 2주차에 접어들어 몸도 뇌도 모두 아메바가 되어 흐물흐물 해지고 있기에, 일상을 지탱할 수 있을 적절한 긴장감을 찾고자 처음에는 Udemy를 보며 공부를 하고자 했다. 하지만 목적의식 없이 일단의 지식 습득을 목적으로 하는 공부는 명확하게 한계가 있어서... 너무나도 하기가 싫더라. 그냥 안 하게 된다.

하여, 프로젝트 하나를 해보기로 하였다. 시간이 부족하니 일단 베이스는 2년 간 해온 안드로이드로. 다만 여러가지 공부해본 개념을 적용하여서. 사수 없이 주먹구구식으로 대응해오며 (나름대로 최선으로 공부하고 적용해왔다고는 생각한다. 하지만 아무래도 체계적으로 학습하지 못했다라는 아쉬움은 사라지지 않는다.) 해왔기에, ^아름다운^ 아키텍처로 구현해보고자 결심하였다.

1탄은 코드는 한 줄도 없지만 이렇게라도 적지 않으면 영영 시작도 못할까봐 시작이 반이다를 실천하기 위한 포스팅이다. 나름의 러프한 목표 정리이기도 하고.

일단 8월 내로 완전히 마무리 짓기를 바라는 만큼, UI 구성은 간단히 가져가기로 하였다. 예전에 생각했던 아이디어는 Google Vision API를 이용하는 것이 있었는데, 이게 안드로이드에 올리는 게 상당히 난감했기에 일단 포기한다. (이거 공부하다가 만들지 못하면 아주 슬퍼지는 거야)

근데 구상한 거 메모해두고 보니 이거 생각해보니까 미니 인스타그램 같더라. 일단은 그렇구나... 하고.

그리고, MaterialTheme을 주로 사용할 계획이다. 아이콘도 Material Icons 사용할 것이고. 버튼도 MaterialButton 쓸 거다. 머태리얼로 읽을지 매터리얼로 읽을지 아직도 헷갈린다. 학창시절에는 저 단어 매터리얼로 외웠다.아무튼, UI 구성요소는 ConstraintLayout을 베이스로 하여 비율 고정을 할 것이고, 텍스트 크기는 최소와 최대 크기만 지정하여 자동 배치를 적용해볼 셈이다. 이거 잘 안 되어 실패한 기억이 있었는데, 이 기회에 성공을 목표로 해보자. AusoSizeTextType이었나 그 attribute에 min, max 설정해주는 방식으로...

적용하고자 하는 개념 및 기술은 아래와 같다. (기초라면 기초라고 할 수 있다. 하지만 앱 규모가 커지거나, 시간에 쫓기거나 하다보면 이거 제대로 하기 결코 쉽지 않더라. 언제나 그렇듯, 이론과 실재는 다르다. 돌아가는 모든 코드가 훌륭하다고 생각하게 되었다.)

1. Single Activity Architecture

Fragment, Navigation 이용할 것이다. SplashScreen -> MainActivity (Fragments) 와 같은 구조.

2. Dependency Injection

Dagger2는 사용해봤는데, Hilt는 실무에서 쓰다가 어려워서 때려친 적이 있다. 일단은 Dagger2만 쓰되 여유가 되면 Hilt도 공부해보고 써봐야지.

3. Coroutines & Flow

네트워킹 함수에 항상 코루틴 사용은 했었는데, 이렇게 쓰는 게 맞나? 싶을 때가 있었다. 돌아가기는 하니까.. 쓰긴 했는데, 한번 제대로 써보고 싶다. Retrofit을 쓸지, Ktor을 쓸지는 아직 고민 중. Ktor도 나름 익숙은 했었는데 몇 개월 안 썼다고 벌써 가물가물 하다.

4. Clean Architecture

Core module 분리하여 데이터와 프레젠터를 분리할 것이고, Repository 패턴 적용할 것이다. 일단은 거기에 더하여 Room, AAC ViewModel, DataStore 적용을 고려하고 있다.

5. MVVM

Data Binding, LiveData Observing 등 사용할 예정. 나름 꽤 잘 구현은 했었다고 생각했는데, 역시 이제 2주 지났을 뿐인데 일할 때의 코드가 이미 기억 아득히 사라져가고 있다. 하지만 그렇기에 이전에 내가 짰던 개판코드에 영향을 받지 않고 더 세련되게 작성할 수 있을지도? (네, 희망사항입니다.)

6. Firebase

보여주기용이기는 하지만 회원가입, 로그인 화면 구현을 해야 하니까 관련된 처리를 해주는 것, 더하여 사진이나 댓글 등 업로드/삭제 할 때 관련하여 관리를 역시 Firebase로 처리해보고자 한다. 제대로 성공해보지 못해서 긴장되지만 (NoSQL 넘나 어려운 것) 이 기회에 제대로 해보자!

7. Jetpack Compose (OPTIONAL)

해보고는 싶은데, 자신은 없다. 할 수 있겠지? 일단은 고전적으로 xml로 만든 다음에, 그걸 Compose 이식하는 작업을 할까? 그게 일단 완성시키기까지의 시간은 확실히 단축시켜 줄 것이다. 고민을 더 해봅시다 한번.

 

이렇게 일단 써는 놨으니까 제발 좀 하자 인간아. 화이팅이다.