이전 회사에서 쇼핑몰 개발을 진행한 적이 있었습니다. 그 당시 규모가 작아 모바일 앱, 판매자웹, 어드민웹을 api 서버 하나로 대체 하였습니다. MSA와 반대 되는 Monolithic 아키텍처이었고 개발 당시에는 큰 불편함은 없었으나 아래와 같은 장단점이 있었습니다.
사실 Monolithic 아키텍처를 선택한 이유는 일정이 촉박했기도 했고, 개발 당시에 아래와 같은 조건 때문에 msa 보다는 더 합리적이다 생각하고 개발을 진행하였습니다.
이중 코드 재사용률이 결정에 큰 영향을 미쳤습니다. 기존 회사에서는 msa로 할경우 각 api 마다 git 레파지토리를 생성하여 사용 중이었고 이와 같은 방식은 개발 도중 수정사항이 생겼을시 각프로젝트를 전부 수정해 주어야 했습니다. 예를 들어 상품 조회 기능이 있습니다. 이 기능이 버그가 있거나 아니면 기획이 변경 되어서 수정을 해야한다면 각 프로젝트에서 해당 부분을 찾아 전부 변경해주어야 했습니다.
당시에 위 단점들은 없애고 장점들은 취합할수 없을까 방법을 검색하다가 찾은것이 gradle 멀티 모듈이었습니다. 검색해서 찾기 까지는 하였지만 당시에 시간이 없어 적용은 하지 못하였고 지금에서야 학습해봅니다.
멀티모듈 설계 이야기 을 참조하여 구조를 잡았습니다. 예제용이라 간단하게 설계하였고 profile 관련은 빠져있습니다. 관련 문서나 블로그들에 잘 나와 있어서 설정 잡는것 자체는 쉽습니다. 다만, 실무에서 쓰게된다면 어느정도까지 계층을 나누고 모듈을 나눌지, 의존성은 어떻게 가져갈지를 정하는 것은 쉽지 않아보입니다.
https://github.com/gh90/example-gradle-multi-module
https://blog.sapzil.org/2018/06/20/gradle-subproject-grouping/
https://techblog.woowahan.com/2637/
https://velog.io/@sangwoo0727/Gradle%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A9%80%ED%8B%B0-%EB%AA%A8%EB%93%88
https://lemontia.tistory.com/1013