2025-02-22T01:13:24

This commit is contained in:
2025-02-22 01:13:24 +09:00
parent 1fb14102bb
commit fb0a05d18f
83 changed files with 4955 additions and 23 deletions

View File

@@ -0,0 +1,174 @@
# 멀티 모듈 프로젝트 구성
소프트웨어 개발에서 프로젝트의 규모가 커질수록 코드 관리가 복잡해진다. 이때 **멀티 모듈(Multi-Module) 프로젝트**를 활용하면 코드의 재사용성을 높이고, 빌드 속도를 최적화하며, 팀 협업을 효율적으로 진행할 수 있다.
Gradle은 멀티 모듈 프로젝트를 손쉽게 구성할 수 있도록 지원하며, 각 모듈을 독립적으로 관리하면서도 전체 프로젝트와 연동할 수 있도록 설계되어 있다.
## 멀티 모듈 프로젝트란?
멀티 모듈 프로젝트는 하나의 **루트 프로젝트**(Root Project)와 여러 개의 **서브 모듈**(Submodule)로 구성된 프로젝트 구조를 의미한다.
### 왜 멀티 모듈을 사용할까?
- **코드 재사용성 증가**: 공통 로직을 별도의 모듈로 분리하여 여러 프로젝트에서 사용할 수 있다.
- **빌드 속도 최적화**: 변경된 모듈만 빌드하여 전체 빌드 시간을 줄일 수 있다.
- **의존성 관리 용이**: 각 모듈에서 필요한 라이브러리만 선언하여 불필요한 의존성을 제거할 수 있다.
- **팀 협업 효율성 증가**: 서로 다른 팀이 독립적으로 모듈을 개발하고 유지할 수 있다.
## Gradle 멀티 모듈 프로젝트 구조
Gradle 멀티 모듈 프로젝트는 다음과 같은 구조로 구성된다.
```
my-project/
├── app
│   ├── build.gradle.kts
│   └── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│   ├── java
│   └── resources
├── buildSrc
│   ├── build.gradle.kts
│   ├── settings.gradle.kts
│   └── src
│   └── main
│   └── kotlin
│   ├── buildlogic.java-application-conventions.gradle.kts
│   ├── buildlogic.java-common-conventions.gradle.kts
│   └── buildlogic.java-library-conventions.gradle.kts
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── list
│   ├── build.gradle.kts
│   └── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│   ├── java
│   └── resources
├── settings.gradle.kts
└── utilities
├── build.gradle.kts
└── src
├── main
│   ├── java
│   └── resources
└── test
└── resources
```
## Gradle 멀티 모듈 프로젝트 설정
### **3.1 루트 프로젝트 설정**
루트 프로젝트에서는 `settings.gradle.kts` 파일을 사용하여 서브 모듈을 등록한다.
`settings.gradle.kts`
```kotlin
rootProject.name = "my-project"
include("app", "list", "utilities")
```
### 개별 모듈 설정
각 모듈은 `build.gradle.kts` 파일을 가지고 있으며, 필요한 플러그인과 의존성을 선언할 수 있다.
#### 루트 프로젝트의 `build.gradle.kts`
루트 프로젝트에서는 전체 모듈에 적용할 공통 설정을 정의할 수 있다.
```kotlin
plugins {
kotlin("jvm") version "1.9.0" apply false
}
subprojects {
repositories {
mavenCentral()
}
}
```
---
## 모듈 간 의존성 설정
### 모듈 간 의존성 추가
각 모듈에서 다른 모듈을 의존성으로 추가할 수 있다.
예를 들어, `app` 모듈에서 `core` 모듈을 사용하려면 `dependencies` 블록에 다음을 추가한다.
`app/build.gradle.kts`
```kotlin
dependencies {
implementation(project(":core"))
implementation(project(":shared"))
}
```
## 공통 라이브러리 관리
멀티 모듈 프로젝트에서는 모든 모듈에서 공통으로 사용하는 라이브러리를 `libs.versions.toml` 파일로 관리할 수 있다.
`gradle/libs.versions.toml`
```toml
[versions]
kotlin = "1.9.0"
junit = "5.9.2"
[libraries]
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
```
이제 각 모듈에서 라이브러리를 다음과 같이 참조할 수 있다.
`core/build.gradle.kts`
```kotlin
dependencies {
implementation(libs.kotlin.stdlib)
testImplementation(libs.junit)
}
```
## 멀티 모듈 프로젝트 빌드 및 실행
### 전체 프로젝트 빌드
모든 모듈을 빌드하려면 다음 명령어를 실행한다.
```sh
gradle build
```
### 특정 모듈만 빌드
예를 들어, `feature-a` 모듈만 빌드하려면 다음 명령어를 실행한다.
```sh
gradle :feature-a:build
```
### 특정 모듈의 테스트 실행
```sh
gradle :core:test
```