Gradle 멀티 모듈 프로젝트
포스팅 환경
- Java 17
- SpringBoot 3.1.7
- Gradle - Groovy 8.5
- Spring Web
- H2
- Spring Data Jpa
0. 멀티 모듈 사용 이유
- 일반적으로 프로젝트 규모가 커지고 복잡해지는 경우 프로젝트를 '작고 상호의존적인 모듈'로 분할해서 관리하는 것이 좋습니다.
- 모듈 분리를 통해 의존성을 관리할 수 있습니다.
1. 프로젝트 구조
- root 프로젝트 / sub 프로젝트(모듈)로 구성
- root 프로젝트
- build.gradle 에 root 모듈 설정한다.
- settings.gradle 에 모든 하위 프로젝트를 포함해야한다.
- sub 프로젝트
- 각각의 sub 모듈마다 build.gradle 파일을 만들고 설정한다.
├── .gradle
│ └── ⋮
├── gradle
│ └── wrapper
├── gradlew
├── gradlew.bat
├── settings.gradle (root 프로젝트 설정)
├── build.gradle (root 프로젝트 설정)
│
├── sub-project-1
│ └── build.gradle (sub 모듈 설정 파일)
│
└── sub-project-2
└── build.gradle (sub 모듈 설정 파일)2. 멀티 모듈 적용 해보기
(1) 초기 상태
초기 상태 프로젝트 디렉토리 구조입니다. build.gradle 파일도 확인해보겠습니다.

[build.gradle]

(2) 멀티 모듈 적용
간단하게 웹 계층을 담당하는 core-api 모듈,
DB에 접근하는 용도인 storage 모듈로 나눠서 적용해보겠습니다.
[root 프로젝트 gradle.properties]
- gradle 설정 파일에서 사용할 환경변수를 정의하고 한 곳에서 편리하게 관리할 수 있다.

[root 프로젝트 settings.gradle]
- include 키워드를 통해 root 프로젝트가 하위 프로젝트(모듈)를 모두 관리하게 설정한다.
- 프로젝트 계층 구조는 ":" 으로 구분한다.

[root 프로젝트 build.gradle]
- 표준 Java 플러그인 대신 java-library 플러그인 적용
- api 키워드를 사용하기 위해 java-library 플러그인 적용 참고
- 의존성 관리 키워드 api 와 implementation 차이점
- api
- 의존성을 다른 프로젝트와 공유한다는 의미로, 해당 의존성이 사용하는 모든 클래스와 리소스를 의존하는 프로젝트에 공유한다.
- implementation
- 의존성을 해당 프로젝트 내부에서만 사용한다는 의미로, 해당 의존성이 사용하는 모든 클래스와 리소스는 모듈 외부로 노출하지 않는다.
- api
- allprojects 블록
- root 프로젝트를 포함한 모든 프로젝트에 적용되는 설정
- subprojects 블록
- 하위 프로젝트에만 공통적으로 적용되는 설정
- 하위 모듈은 단독으로 실행불가능한 모듈이므로 일괄적으로 jar 파일로 생성되게 설정한다.
- bootjar 를 생성해야하는 모듈에만 설정을 추가로 적용

[sub 프로젝트 core-api 모듈 build.gradle]
- web 계층(컨트롤러, 서비스, 도메인 클래스)
- 실행가능한 bootjar 생성한다.
- storage 모듈을 포함한다.

[sub 프로젝트 storage 모듈 build.gradle]
- db 접근계층(리포지토리, 엔티티 클래스)

참고해서 간단하게 멀티 모듈 설정을 적용해보았습니다.
감사합니다.
참고
'Build Tool > Gradle' 카테고리의 다른 글
| [Gradle] 모듈 빌드 (0) | 2024.01.27 |
|---|---|
| [Gradle] Gradle 버전 확인 방법 (0) | 2024.01.13 |
댓글