본문 바로가기
[개발] Info/용어

멀티 모듈(Multi-Module)

by Devsong26 2024. 8. 9.

멀티 모듈(Multi-Module) 프로젝트는 하나의 큰 프로젝트를 여러 개의 작은 모듈로 나누어 구성하는 방식입니다. 각각의 모듈은 독립적으로 빌드, 테스트, 배포될 수 있으며, 다른 모듈과 협력하여 전체 애플리케이션을 구성합니다. 주로 Gradle, Maven 같은 빌드 도구를 사용하여 멀티 모듈 프로젝트를 관리합니다.

멀티 모듈 프로젝트의 장점

  1. 모듈화와 재사용성: 코드를 기능별로 분리하여, 필요한 모듈만 재사용하거나 독립적으로 개발할 수 있습니다. 이를 통해 유지보수가 용이해집니다.
  2. 독립적 개발 및 배포: 각 모듈은 독립적으로 개발, 테스트, 빌드, 배포가 가능하여 CI/CD 파이프라인을 효율적으로 구축할 수 있습니다.
  3. 효율적인 의존성 관리: 공통된 기능이나 라이브러리를 별도의 모듈로 분리하여 여러 모듈에서 쉽게 재사용할 수 있습니다.
  4. 팀 간 협업 용이: 서로 다른 팀이 서로 다른 모듈을 병렬로 개발할 수 있어, 대규모 프로젝트에서 협업이 더 쉬워집니다.

멀티 모듈 프로젝트 구조

멀티 모듈 프로젝트는 루트 프로젝트(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 > 용어' 카테고리의 다른 글

지수적 백오프(Exponential Backoff)  (0) 2024.10.08
Software versioning  (0) 2024.07.28
Hashicorp Vault  (0) 2024.07.26
워커 러너 패턴  (0) 2024.07.21
보일러 플레이트(boiler plate)  (0) 2024.07.21