• 플랫폼 서비스의 경우 고객용 앱 / 제휴 업체용 / 어드민 용 등 앱을 다양하게 만드는 경우가 많음
  • 점진적으로 마이그레이션 진행이 기본
  • 헤이딜러 앱에서 기술 선택 할 때, 기준이 Google이 공식 지원 / main 으로 흐름을 바꿀 때 보통 기술을 선택함
  • 헤이딜러 앱
    • Kotlin 100% 변환 완료
      • Java → Kotlin 전환 할 때 각종 사이드이펙트가 많음
    • MVVM 100% 변환 완료
    • Koin → Hilt 변환 완료
    • RxJava / LiveData를 더이상 쓰지 않음 모든것은 Coroutine
      • RxJava → Promise 패턴 / Coroutine → Async, Await 패턴
      • Livedata는 StateFlow로 대체해서 활용
    • UI에서 발생하는 이벤트를 SingleLiveData로 많이 쓰는데, SharedFlow( EventFlow )로 활용하도록 변경
    • 클린아키텍처
      • 구글 / 엉클밥의 클린아키텍처가 형태가 다름
      • Presentation layer는 domain layer를 알고 있다 ? ( Y / N )
        • Google → Y / 엉클밥 → Y
      • Domain Layer는 data layer를 알고 있다 ? ( Y / N )
        • Google → Y / 엉클밥 → N )
      • Data layer는 Domain layer을 알고 있다 ( Y / N )
        • Google → N / 엉클밥 → Y )
      • 구글 ( Ui → Domain → Data )
      • 밥아저씨 ( Ui → Domain / Data → Domain )
      • 구조
        • Domain : UseCase, Repo
        • Presetation : UI
        • Data : RepoImpl, DataSource
        • Remote : DataSourceImpl, Api
        • Local : DataSourceImpl, DB, DAO
      • Model 클래스는 모든 layer에 존재함
      • 5개의 레이어라면 5개의 모델 클래스가 존재
      • 장점 예시
        • UI 개선 작업이 생기면, UseCase / ViewModel 등의 변경 없이 UI 영역만 변경
        • 서버에서 우리가 생각하는 필드 이름 / 필드 구조를 주지 않아도 domain 모델 구조는 변경되지 않음
        • 차량 정보를 불러 올 때, local에서 먼저 가져온 뒤 remote로 fetch해서 지연시간 없앰
        • APi 구현이 되어 있지 않은 상황에서도 remote만 Mock해서 구현
        • 테스트 코드 작성이 매우 용이함
        • KMP로 대화합 가능 ?
    • 헤이딜러 코딩 스타일은 github에서 참조 가능
    • 앱에서 공통적인 작업이 이루어 지는 경우 라이브러리 모듈을 만들어 놓고 활용
    • 브랜치 단위로 라이브러리 버전을 관리
    • 최대한 모듈을 많이 만들어 멀티모듈 형태로 관리 하려고 함
    • Feature 모듈 단위로까지는 나누지 않은 상태
    • 디자인 카탈로그 화면을 만들어 디자이너한테 디자인 리뷰를 받음
    • 닫기와 뒤로가기 뭐가 다른가 등을 고민많이해봄
    • 애니메이션에 진심인편