안녕하세요? 레이니스트에서 소프트웨어 엔지니어로 근무하고있는 강성훈입니다. 레이니스트의 안드로이드 개발팀은 Android Weekly를 구독하면서 팀원들끼리 Android에 관련된 정보를 공유하고, 기술 트렌드를 파악하고 있습니다.
여느때와 같이 Android Weekly를 팀원들과 함께 보고있는데, 모듈화가 안드로이드 앱 빌드시간에 어떻게 영향을 끼치는가 라는 글이 눈에 띄었습니다. 개발중인 앱의 프로젝트 크기가 늘어나면서, 빌드시간도 그에 비례해서 증가하게 되었는데, 이번 기회에 위 글을 참고하면서 모듈화를 도입해 빌드시간을 줄여서 비효율을 줄여보기로 결정했습니다.
시작하기에 앞서, 현재 뱅크샐러드 코드베이스의 구조에 대해서 소개드리면 아래와 같이 총 6개의 패키지로 나뉘어져 있습니다.
빌드 속도를 줄이는것도 중요하지만, 지금의 패키지 구조가 저희가 추구하는 아키텍쳐에 가장 적합한 구성이기에 최대한 기존의 패키지 구조를 유지하며 모듈화를 진행하기로 결정했습니다.
gradle 커맨드에 --profile 옵션을 주게 되면 빌드 폴더 내에 Gradle Build Report가 다음과 같이 생성되는데요, 각각의 Task에 소요된 시간을 확인할 수 있습니다.
먼저, 모듈을 나누지 않고 빌드 시간을 총 5번 측정했을 때 다음과 같은 결과가 나왔습니다.
기존의 패키지 구조 그대로
총 6개의 모듈로 나누기를 시도를 했고, 안에서부터 바깥(entity layer -> presentation layer)으로 모듈화를 진행해 보았습니다.
가장 먼저 다른 패키지에 의존성이 없는 entity 패키지를 모듈로 추출하기로 결정했습니다. Android Studio에서 모듈을 생성하고, 기존의 entity 패키지를 생성한 모듈로 이동시켰는데, 빌드에 실패했습니다. 그 이유는 바로 Proguard 때문이었는데요, Gradle은 각 모듈별로 난독화를 하는데, Entity는 모듈 내에서 자체적으로 사용되지 않았기 때문에 사용하지 않는 Class들이 빌드 결과물에 포함되지 않아 IOException이 발생하여 app모듈 빌드에 실패했습니다.
...소프트웨어 개발자에게 성공이란... (0) | 2020.02.07 |
---|---|
우리가 세월호 현장에 간 이유 (실천) (0) | 2020.02.07 |
공대 석졸생(석사 졸업생)의 인생 3막 1장: 스타트업 입사기 (0) | 2020.02.06 |
확장과 성장 (0) | 2020.02.06 |
뱅크샐러드의 디자인 철학. (0) | 2020.02.06 |