멀티 모듈 깡통 프로젝트 만들기

👉🏻멀티모듈에 대한 설명
멀티 모듈이란 서로 독립적인 프로젝트를 하나의 프로젝트로 묶어서, 각각의 프로젝트를 모듈로 활용하는 프로젝트 구조를 말합니다.

멀티 모듈은 각 모듈들이 독립적인 역할을 하고 있기 때문에, 에러가 나거나 고장이 나면 서로 다른 모듈에 크게 영향을 끼치지 않아서 해당 부분만 수정하면 된다는 장점이 있고, 스프링부트 모듈을 생성 할 때 Spring Initializr를 사용하면 생성된 모듈이 별도의 프로젝트인 것처럼 인식됩니다.

1) gradle init으로 만들기

참조
멀티모듈 프로젝트 구성1
멀티모듈 프로젝트 구성2

이미 멀티모듈의 구축사례는 많은 레퍼런스가 있으므로 참조해서 구축하면 됩니다.
요약하자면..

  • 여러 모듈을 합할 폴더를 한 개 생성(차장님의 글에서는 mkdir로 만드는데 그냥 새폴더로 만들어도 상관없다.)
  • bash나 terminal 등에서 위에서 만든 폴더에 gradle init으로 기본 gradle로 빌드하는 프로젝트를 만든다.
  • 필요한 모듈을 Spring initializer로 생성한다.
  • 각각의 모듈에 필요한 dependency를 추가한다.
  • 프로젝트 루트 디렉토리의 build.gradle을 삭제하고 setting.gradle에 아래와 같은 내용을 작성한다.
rootProject.name = "root-project-name"
include("api") <- 어디에도 포함되어 있지 않은 최상위층 모듈
include("common:domain", "common:lib") <- 이 프로젝트에 포함된 모듈과 디렉토리 경로, COMMON이라는 모듈 하위에 domain / lib라는 모듈이 하위로 각각 하나씩 들어있기 때문에 이렇게 작성했다.

root directory의 build.gradle 파일을 삭제하는 이유는, 이 파일이 루트 프로젝트에 있으면 멀티모듈로 인식하지 않기 때문입니다. build.gradle파일이 없어야 이 프로젝트의 모듈들을 각각 인식합니다. 따라서 독립 모듈 안에 있는 build.gradle은 삭제하지 않는 것 입니다.

2) Spring initializer로 생성하기

gradle init으로 생성하지 않고 처음부터 인텔리제이의 Spring initializer(이하 이니셜라이저)로 생성하는 방법입니다.

  • 인텔리제이 -> file에서 이니셜라이저를 선택한다.
  • 독립된 모듈명 / 빌드 타입(gradle) / 언어 등등.. 설정한다.
  • 필요한 dependency를 설치한다.
  • 원하는 만큼의 모듈을 같은 방법으로 생성한다.
  • 루트 프로젝트의 build.gradle을 삭제하고 setting.gradle을 위처럼 작성한다.

이렇게 이니셜라이저로 생성하면 gradle init보다 디펜던시를 한번에 import할 수 있다는 장점이 있지만, gradle init으로 만들어지는 buildSrc 모듈은 생성되지 않습니다. 따라서 이니셜라이저로 생성 후 buildSrc 모듈은 새로 추가 해 줘야 합니다.

이 때 빌드가 제대로 되지 않거나, 각 모듈을 인식하지 못하면 모듈 표시가 아닌 일단 폴더의 형태로 모듈들이 생성되어 작동하지 않습니다.
또, root Project의 settings.gradle에 모듈을 include하지 않아도 동일한 현상이 발생됩니다.

완성된 프로젝트 디렉토리 예시는 여기서 확인 해 봅시다.

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글