반응형
멀티 모듈(Multi-Module) 프로젝트는 하나의 큰 프로젝트를 여러 개의 작은 모듈로 나누어 구성하는 방식입니다. 각각의 모듈은 독립적으로 빌드, 테스트, 배포될 수 있으며, 다른 모듈과 협력하여 전체 애플리케이션을 구성합니다. 주로 Gradle, Maven 같은 빌드 도구를 사용하여 멀티 모듈 프로젝트를 관리합니다.
멀티 모듈 프로젝트의 장점
- 모듈화와 재사용성: 코드를 기능별로 분리하여, 필요한 모듈만 재사용하거나 독립적으로 개발할 수 있습니다. 이를 통해 유지보수가 용이해집니다.
- 독립적 개발 및 배포: 각 모듈은 독립적으로 개발, 테스트, 빌드, 배포가 가능하여 CI/CD 파이프라인을 효율적으로 구축할 수 있습니다.
- 효율적인 의존성 관리: 공통된 기능이나 라이브러리를 별도의 모듈로 분리하여 여러 모듈에서 쉽게 재사용할 수 있습니다.
- 팀 간 협업 용이: 서로 다른 팀이 서로 다른 모듈을 병렬로 개발할 수 있어, 대규모 프로젝트에서 협업이 더 쉬워집니다.
멀티 모듈 프로젝트 구조
멀티 모듈 프로젝트는 루트 프로젝트(Parent Project)와 하위 모듈(Submodules)로 구성됩니다. 예를 들어, 다음과 같은 구조를 가질 수 있습니다
project-root/
│
├── build.gradle (or pom.xml)
├── settings.gradle
│
├── module1/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
├── module2/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
└── common/
├── build.gradle
└── src/
└── main/
└── java/
설정 예시 (Gradle 기반)
1. Root Project 설정 (settings.gradle)
루트 프로젝트의 settings.gradle 파일에서는 프로젝트의 모듈들을 포함시킵니다:
rootProject.name = 'my-multi-module-project'
include 'module1', 'module2', 'common'
2. Root build.gradle 파일
루트 프로젝트의 build.gradle 파일에는 모든 모듈에서 공통으로 사용할 설정을 포함할 수 있습니다:
plugins {
id 'java'
}
allprojects {
group = 'com.example'
version = '1.0.0'
repositories {
mavenCentral()
}
}
subprojects {
apply plugin: 'java'
dependencies {
testImplementation 'junit:junit:4.13.2'
}
}
3. 각 모듈의 build.gradle 파일
각 모듈의 build.gradle 파일에는 해당 모듈에 특화된 설정과 의존성을 포함합니다. 예를 들어, module1의 build.gradle 파일은 다음과 같을 수 있습니다:
dependencies {
implementation project(':common') // common 모듈을 의존성으로 추가
implementation 'org.springframework:spring-context:5.3.10'
}
의존성 관리
각 모듈은 다른 모듈을 의존성으로 포함할 수 있으며, 이 의존성은 Gradle이나 Maven을 통해 관리됩니다. 예를 들어, module1이 common 모듈의 기능을 사용해야 한다면 build.gradle 파일에 implementation project(':common')을 추가합니다.
멀티 모듈 프로젝트의 사용 예시
- 계층형 구조: 예를 들어, web, service, repository와 같이 계층별로 모듈을 나눌 수 있습니다.
- 기능별 분리: user, order, inventory와 같이 도메인별로 모듈을 나누어 각각의 기능을 담당하도록 할 수 있습니다.
- 공통 라이브러리 분리: 여러 모듈에서 공통으로 사용하는 코드(유틸리티, 공통 엔티티 등)를 common 모듈로 분리하여 재사용할 수 있습니다.
멀티 모듈 프로젝트는 대규모 애플리케이션 개발에서 코드의 모듈화, 관리의 용이성, 팀 간 협업을 강화할 수 있는 좋은 방법입니다.
반응형
'[개발] Info > 용어' 카테고리의 다른 글
[IT 용어] Server Farm (2) | 2025.01.04 |
---|---|
지수적 백오프(Exponential Backoff) (0) | 2024.10.08 |
Software versioning (0) | 2024.07.28 |
Hashicorp Vault (0) | 2024.07.26 |
워커 러너 패턴 (0) | 2024.07.21 |