Gradle 멀티 모듈 프로젝트

gh·2022년 4월 12일
1

gradle 멀티 모듈을 알계된 계기

이전 회사에서 쇼핑몰 개발을 진행한 적이 있었습니다. 그 당시 규모가 작아 모바일 앱, 판매자웹, 어드민웹을 api 서버 하나로 대체 하였습니다. MSA와 반대 되는 Monolithic 아키텍처이었고 개발 당시에는 큰 불편함은 없었으나 아래와 같은 장단점이 있었습니다.

Monolithic 아키텍처

단점

  1. 배포간 다른 기능이 영향을 미친다.
    -> 예를 들어 판매자웹 api관련 버그로 수정사항을 반영할 때 app api와 어드민 api 에 영향이 갑니다.
  2. 많은 코드가 한프로젝트 안에 몰려있어 구동 및 빌드에 시간이 오래걸려 프로젝트가 무거워진다.
  3. 합리적인 scale out이 불가능하다.

장점

  1. 코드가 한 프로젝트에 있어서 재사용이 쉽다.

사실 Monolithic 아키텍처를 선택한 이유는 일정이 촉박했기도 했고, 개발 당시에 아래와 같은 조건 때문에 msa 보다는 더 합리적이다 생각하고 개발을 진행하였습니다.

  • 소규모인 점
  • 코드 재사용률이 높은 점

이중 코드 재사용률이 결정에 큰 영향을 미쳤습니다. 기존 회사에서는 msa로 할경우 각 api 마다 git 레파지토리를 생성하여 사용 중이었고 이와 같은 방식은 개발 도중 수정사항이 생겼을시 각프로젝트를 전부 수정해 주어야 했습니다. 예를 들어 상품 조회 기능이 있습니다. 이 기능이 버그가 있거나 아니면 기획이 변경 되어서 수정을 해야한다면 각 프로젝트에서 해당 부분을 찾아 전부 변경해주어야 했습니다.

당시에 위 단점들은 없애고 장점들은 취합할수 없을까 방법을 검색하다가 찾은것이 gradle 멀티 모듈이었습니다. 검색해서 찾기 까지는 하였지만 당시에 시간이 없어 적용은 하지 못하였고 지금에서야 학습해봅니다.

설정

디렉토리 구조

settings.gradle

멀티모듈 설계 이야기 을 참조하여 구조를 잡았습니다. 예제용이라 간단하게 설계하였고 profile 관련은 빠져있습니다. 관련 문서나 블로그들에 잘 나와 있어서 설정 잡는것 자체는 쉽습니다. 다만, 실무에서 쓰게된다면 어느정도까지 계층을 나누고 모듈을 나눌지, 의존성은 어떻게 가져갈지를 정하는 것은 쉽지 않아보입니다.

git

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

profile
개발자~

0개의 댓글