Spark 학습 내용
Spark 팀프로젝트를 진행하며 학습한 내용을 자세히 정리하였습니다.
## 💡 성장한 부분
안드로이드 개발을 시작한 지 4개월 차에 진행한 프로젝트로서 여러 기술을 맛보고, 얕지만 다양한 경험을 통하여 안드로이드 전반에 대하여 학습하기 시작한 프로젝트입니다.
- **안드로이드 초심자로서 아키텍처 패턴에 대한 맛보기**
아키텍처 패턴에 대한 이해도는 부족했지만(장단점, 왜 사용하는가?) 초심자로서 패턴에 대한 이해를 획득하기 위하여 일반적으로 널리 퍼져있는 예제에 나와 있는 구현을 따라 코드를 작성하였습니다.
이를 통해 ‘프로젝트 내에서 Repository에서 단순히 DataSource의 함수를 호출해주는 형태로 코드를 짜고 있는데 둘 중 하나는 필요없는 것 아닌가?’ 등 아키텍처 패턴에 대한 근본적인 의문점을 가지게 되었습니다.
이를 해결하기 위해 주변 개발자들과 토론하며 아키텍처를 이해하기 위한 기반(불편한 점의 인식 및 각 요소의 필요성에 대한 의문)을 마련하였습니다.
안드로이드에서 아키텍처 패턴을 구현하기 위해 제공하는 다양한 라이브러리(AAC)를 활용해보며 각각의 사용법에 대하여 숙지하였습니다.
- **애니메이션, 무한스크롤, 복잡한 뷰 상태 처리 등 다양한 경험**
안드로이드 초심자로서 다양한 기능을 구현해보며 안드로이드에 대한 이해도와 개발 자체의 구현실력을 늘릴 수 있는 기회였습니다.
무한스크롤 구현 시 서버개발자와 소통하며 서버 측의 구현 Cursor,offset 방식의 장단점에 대해 학습하고 프로젝트에서 어울리는 방법을 논의하며 다른 분야의 개발자와 소통하고 협의하는 방법을 학습하였습니다.
[무한스크롤 학습에 대한 블로그 글](https://mccoy-devloper.tistory.com/49)
Object Animator를 활용하여 애플리케이션 내에서 활용되는 컴포넌트들에 애니메이션을 적용하며 안드로이드 개발에 대한 흥미를 느끼는 계기가 되었습니다
[Object Animator 학습에 대한 블로그 글](https://mccoy-devloper.tistory.com/43)
- **오류처리에 대한 필요성 체감(Http통신 라이브러리에 대한 학습)**
각 오류처리의 필요성과 처리방식에 따른 유지 보수성에 대한 차이를 체감하고 학습의 필요성을 느끼게 되었습니다.
runCatching을 사용하여 모든 서버통신마다 비슷한 오류처리를 해보고 그에 따른 보일러플레이트 코드가 생성되는 것에 대한 해결책을 고민하는 계기가 되었습니다.
서버통신 실패 시 errorBody 값을 받아서 사용자에게 표시해주는 로직에서 불안정한 방법을 사용하고 있었습니다. 이에 대하여 문제점을 파악하고 해결하고자 errorBody를 컨버팅하여 코틀린 객체로 변환 안정적인 로직으로 리펙터링 하는 경험을 하였습니다.
[에러처리 리펙터링 경험에 관한 글](https://mccoy-devloper.tistory.com/57)
또한 개발 시 오류가 자주 일어나는 지점인 서버통신에서 효율적인 오류처리를 위하여 Retrofit(OkHttp)의 비동기 처리방식(enqueue)의 서버 응답 별 분기처리에 대하여 꼼꼼한 학습을 진행하였습니다.
- GA, AppTester 등등 다양한 라이브러리 체험
프로젝트를 진행하며 앱 개발 전반에 필요한 다양한 요소들(모니터링, 내부배포) 등등을 체험해보고 경험해볼 기회였습니다.
## 🖥 담당한 기능 (Android)
- 홈화면
- 홈화면 습관방 별 상태값에 따른 뷰 분기처리
- 홈 각 토스트,버튼 애니메이션처리
- 상태값에 따라 다이얼로그를 통한 정보전달
- 무한스크롤 구현으로 부드러운 사용성 제공
- 습관방 생성
- 습관방을 종류별로 생성할수있도록 분기처리
- 사용자와 상호작용하도록 중간페이지 구성
- 요소별 애니메이션 적용으로 부드러운 사용성 제공
- 대기방
- glide를 통한 이미지처리
- 사용자와 상호작용할수있는 info 버튼 구현
- 목표작성
- object animator 를 통한 edittext 포커스시 화면전환 구현
- 생명관련 업데이트
- GA를 통한 사용자 지표를 분석하여 생명관련 시스템 업데이트 1.0.2
## 🛠 사용 기술 스택 및 라이브러리
- 아키텍처 패턴 : MVVM
- AAC : Databinding, Livedata, ViewModel, ViewPager2
- 통신 : OKHttp3, Retrofit2
- Async Task: Coroutine
- Third Party Library: Glide
- 협업 : Git flow
- DI : Hilt