모듈화 개발 후 문제점 발생

프로젝트 모듈화를 진행하면서 속도 빌드속도 개선과 생산성 향상을 경험했습니다. 하지만 또 다른문제가 생겼습니다. 해당 모듈에 대한 개발환경을 설정하는 시간과 고친 코드를 git에 반영하는데까지 시간이 너무 오래 걸리게 되었습니다.

위치 서비스 개발 모드

 

settings.gradle 설정

모듈화를하면서 아래있는 모듈을 import하는 코드를 줄이면 필요없는 모듈은 빌드하지 않기 때문에 빌드 속도가 빨라집니다. 하지만 git project하나에 모든 모듈이 포함되어있어 하지만 이정도는 개발모듈설정을 branch로 잘 나눠서 관리한다면 관리하기 어렵지 않습니다.

...
include ':MediaContentProvider'
project(':MediaContentProvider').projectDir = new File("../../MediaContentResolver/MediaContentResolverLibrary")
include ':bagleBottomSheetDialog'
project(':bagleBottomSheetDialog').projectDir = new File("../BagleBottomSheetDialog2/bagle_bottom_sheet_dialog")
include ':base_feed'
project(':base_feed').projectDir = new File('../TorangBaseFeed/base_feed')
...

 

각 프로젝트의 build.gradle 설정

예를들어 위치서비스를 테스트하기위해서는 app 모듈과 main 모듈이 필요합니다. 하지만 이 모듈들은 기본적으로 다른 수만은 모듈의 의존성을 가지고 있습니다. 아래에서 사용안하는 모듈들까지 주석을 해줘야 위치서비스 테스트만들 위한 개발상태가 적용됩니다.  

app 모듈 의존성
    implementation project(path: ':torang_core')
    implementation project(path: ':TorangRepository')
    implementation project(path: ':screen_terms')
    implementation project(path: ':screen_main')
//    implementation project(path: ':screen_main_fake')

    //implementation project(path: ':fakeLocationManager')
    implementation project(path: ':TorangLocationService')
    implementation project(path: ':bagleBottomSheetDialog')
    implementation project(path: ':screen_feed')

    implementation project(path: ':screen_torang_detail')
    implementation project(path: ':screen_profile')
    implementation project(path: ':screen_timelinedetail')
//    implementation project(path: ':NavigationDummy')

    implementation project(path: ':screen_picturepage')
    implementation project(path: ':screen_map')
    implementation project(path: ':screen')
    
 main 모듈 의존성
 ...
     implementation project(path: ':screen_info')
    implementation project(path: ':screen_pictures')
    implementation project(path: ':screen_map')
    implementation project(path: ':screen_terms')
    implementation project(path: ':screen_feed')

    implementation project(path: ':login')
    implementation project(path: ':screen')
    implementation project(path: ':torangimageloader')
    implementation project(path: ':torang_core')
    implementation project(path: ':screen_timelinedetail')
    implementation project(path: ':screen_alarm')
    implementation project(path: ':screen_profile')
    implementation project(path: ':screen_splash')
    implementation project(path: ':torangdialog')
    implementation project(path: ':base_feed')
    implementation project(path: ':torangDeviceManager')
    implementation project(path: ':TorangRepository')
    implementation project(path: ':screen_picturepage')
    implementation project(path: ':screen_info')
    implementation project(path: ':screen_reviews')
    implementation project(path: ':screen_myreviews')
    implementation project(path: ':screen_pictures')
    implementation project(path: ':torang_core')
    implementation project(path: ':TorangTestRepository')
    implementation project(path: ':screen_myreview')
    implementation project(path: ':TorangRepository')
 ...

 

주석한 모듈의 의존성 코드 제거

프로젝트에서 모듈의존성을 제거하면 해당 모듈에서 사용하는 코드를 제거해줘야합니다. 일반적으러 화면 모듈단위로 되어있어 주로 화면 이동시에 사용하는 코드들만 제거해주면 쉽게 빌드되도록 개발하였습니다. 

 

모듈 개발 시작

위에 3단계를 거쳐야만 빌드속도가 매우 빠르며 제가 원하는 모듈만을 개발 할 수 있는 상태가 됩니다. 위에 모듈 그림을 보면 제가 수정해야할 부분은 위치서비스모듈만 수정하면 되는 상황입니다. 

모듈을 수정하고난뒤..

모듈을 성공적으로 수정하고 난뒤 문제가 생겼습니다. 저는 위치모듈에 수정한소스코드만 git에 반영하고 싶은데 현재 변경된 설정도 언젠가는 다시 필요한상황입니다. 이문제점을 git 하나로 해결하는 방법은

1. 현재 설정한 변경은 커밋하지 않고 변경된 모듈코드반 반영 후 master에 머지를 합니다.

2. 나머지 설정부분은 따로 커밋 한 후 모듈수정 브랜치에 반영합니다.

 

이럴경우 해당 모듈과 상관없는 수많은 다른모듈들이 수정되었을때도 해당 브랜치에 코드들이 반영되고 최신화를 유지해야합니다. 각 모듈들마다 똑같은 작업을 해줘야하므로 거미줄같이 여러모듈들을 개발해놓은 상태에서 브랜치를 최신화해두기가 매우 어렵습니다. 이로인해 해결방법을 찾아보다 

+ Recent posts