Files
gradle-examples/doc/07_멀티 모듈 프로젝트.md
2025-02-22 01:13:24 +09:00

5.0 KiB

멀티 모듈 프로젝트 구성

소프트웨어 개발에서 프로젝트의 규모가 커질수록 코드 관리가 복잡해진다. 이때 멀티 모듈(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

rootProject.name = "my-project"
include("app", "list", "utilities")

개별 모듈 설정

각 모듈은 build.gradle.kts 파일을 가지고 있으며, 필요한 플러그인과 의존성을 선언할 수 있다.

루트 프로젝트의 build.gradle.kts

루트 프로젝트에서는 전체 모듈에 적용할 공통 설정을 정의할 수 있다.

plugins {
    kotlin("jvm") version "1.9.0" apply false
}

subprojects {
    repositories {
        mavenCentral()
    }
}

모듈 간 의존성 설정

모듈 간 의존성 추가

각 모듈에서 다른 모듈을 의존성으로 추가할 수 있다.

예를 들어, app 모듈에서 core 모듈을 사용하려면 dependencies 블록에 다음을 추가한다.

app/build.gradle.kts

dependencies {
    implementation(project(":core"))
    implementation(project(":shared"))
}

공통 라이브러리 관리

멀티 모듈 프로젝트에서는 모든 모듈에서 공통으로 사용하는 라이브러리를 libs.versions.toml 파일로 관리할 수 있다.

gradle/libs.versions.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

dependencies {
    implementation(libs.kotlin.stdlib)
    testImplementation(libs.junit)
}

멀티 모듈 프로젝트 빌드 및 실행

전체 프로젝트 빌드

모든 모듈을 빌드하려면 다음 명령어를 실행한다.

gradle build

특정 모듈만 빌드

예를 들어, feature-a 모듈만 빌드하려면 다음 명령어를 실행한다.

gradle :feature-a:build

특정 모듈의 테스트 실행

gradle :core:test