Title: Build a Modular Android App Architecture
Speaker(s): Yigit Boyar, Florina Muntenescu
1. 어떻게 모듈화된 안드로이드 앱 아키텍쳐를 구축할 것인가?
1) 왜 우리는 이를 구축해야하는가?
(1) Scale 문제
- 한두명이 아닌, 여러명이 공통 개발을 할 때, 각자의 담당하는 바를 간섭하지 않고 개발하기란(without stepping on each other's toes) 어렵다. 그래서 이를 방지하고자 이런 모듈들로 나눠서 만들 수 밖에 없다는 의미.
(2) maintainability 유지보수성
- 만약 monolithic application, 즉 하나의 거대한 아키텍쳐를 가진 앱을 마주하게 된다면? 안드로이드 개발자가 수십 수백개의 레이어들을 마주하게 되고 이를 파악하고 분석하는 것은 매우 어려운 일이다. 대신에, 만약 이 레이아웃들을 각 특징(feature)에 기반하여 그룹화 한다면, 용도의 파악이 용이진다. 또한 굉장히 길고 이상한 이름(weird name)으로 목록이 생기지 않는다.
(3) Faster compilation 빠른 컴파일
- 왼쪽은 monolithic application의 예, 오른쪽은 modulaized application된 예다. 만약 '(designer_news_)comment.xml'라는 파일을 1개 수정했다고 가정 했을때, 컴파일시 커버 범위는 다음과 같다.
(4) Faster CI(Continuous Integration) 빠른 지속적 통합
- 만약 다음과 같은 모듈 구조를 가진 앱이 있다고 가정하자.
- 이 중에서 module5를 수정 한다고 했을때, 변화가 올바른지 확인하기 위해서 테스트를 해야하는 부분은 오로지, module5가 depend 하고 있는 app부분만 확인하면 된다. 따라서 테스트를 할 때, 연관되지 않은 다른 부분들을 실행할 필요가 없다.
- 이에 대해서 '우리는 incremental CI이 없다!'라고 말할 수 있다. 그래서 AndroidX 개발에서 의존성 그래프에 대한 플러그인, 파일들이 변화된 위치와 해당 파일들이 포함된 모듈이 무엇인지에 대한 Git History를 알 수 있도록 하는 플러그인들을 작성했다. 그리고 영향받은 모듈들에 대한 모든 테스트를 실행하였다. 해당 작업에 대한 링크는 다음과 같다. http://goo.gle/androidx-dependency-tracker
(5) Good for business
- APK 사이즈가 작아지는 장점이 있다. Play store의 통계에 따르면, APK 사이즈에 따라 사람들이 설치를 시작하고 중단하는 비율이 다음과 같다. 즉 앱의 사이즈가 작으면 보다 많은 이용자를 끌어들일 수 있다.
- 또한 PM이 "내가 정말 멋진 라이브러리를 찾아가지고 왔어!"라고 아이디어를 들고 와도, 이것이 좋은지 안좋은지 싸울 필요가 없다. 다이나믹하게 개발하고 A/B 테스트를 진행하면 됨.
2) 그렇다면 어떻게 모듈화 할 것인가? feature or layer?
(1) feature modularization
+ 참고: https://developer.android.com/studio/projects/android-library?hl=ko
- 앱 모듈을 라이브러리 모듈로 변환할 때, 기존 앱 모듈의 build.gradle 파일을 열면 맨 위에 다음과 같이 표시 되어 있다.
apply plugin: 'com.android.application'
- 이를 다음처럼 플러그인 할당을 변경하고 sync를 맞춘다.
apply plugin: 'com.android.library'
- 모듈의 전체 구조는 동일하게 유지되지만, 이제 Android 라이브러리로 작동하며 빌드에서 이제 APK 대신 AAR 파일이 생성됩니다.
(2) feature modularization
+ 내가 해석을 해놓고도 개떡같아서 무슨 말인가 싶어서 차이점에 대해 찾아보았다.
https://tjandroid.blogspot.com/2018/11/api-implementation.html 블로그에 따르면,
|
- 해석중
Reference
https://www.youtube.com/watch?v=PZBg5DIzNww
'Dev > Android' 카테고리의 다른 글
[Android] LocationManager 사용법 (0) | 2019.10.02 |
---|---|
[Android] SurfaceView - surfaceCreated, surfaceDestoryed (0) | 2019.09.26 |
[Android] AAC ViewModel 설정 및 ViewModelProviders.of() deprecated (0) | 2019.09.05 |
[요약] Android Jetpack: CameraX 라이브러리 알아보기 (Google I/O'19) (0) | 2019.09.04 |
[Android] DataBinding 설정 요약 (0) | 2019.09.03 |