Creating a Multi Module Project[3]

2026. 3. 25. 12:12gradle

다음 내용을 꼭 참고하세요

[ Creating a Multi Module Project[2]]

 

Creating a Multi Module Project[2]

다음 내용을 꼭 참고하세요[ Creating a Multi Module Project[1]] Creating a Multi Module Project[1][공식문서]: Creating a Multi Module Project 위 문서는, 하나의 루트 프로젝트 아래에library 모듈application 모듈를 두고,app

sundaland.tistory.com

 

이번 챕터에서는 Creating a Multi Module Project[2] 기반에서 각 모듈 프로젝트의 아티팩트를 컨테이너에서 실행시킬 수 있도록 프로젝트를 리팩토링하는 방법을 알려 드리도록 하겠습니다.

 

이전까지는 Palantir의 Docker 플러그인을 사용했지만,
이번 챕터에서는 구글의 Jib을 활용하여 Docker 이미지를 빌드하는 방법을 살펴보겠습니다.

 

구글의 Jib은 별도의 Dockerfile 작성 없이도 자바 애플리케이션을 가볍고 최적화된 도커 이미지로 빌드해주는 아주 강력한 도구입니다. 멀티 모듈 프로젝트에서 Jib을 적용하여 리팩토링하는 핵심 방법을 정리해 드릴게요.

 

1. 루트 build.gradle 수정

먼저 모든 서브 모듈에서 Jib 플러그인을 사용할 수 있도록 루트 설정에 추가합니다.

plugins {
    id 'org.springframework.boot' version '3.5.12' apply false
    id 'io.spring.dependency-management' version '1.1.7' apply false
    id 'com.google.cloud.tools.jib' version '3.4.1' apply false
}

group = 'com.intheeast'
version = '0.0.1-SNAPSHOT'

subprojects {
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'com.google.cloud.tools.jib'

    repositories {
        mavenCentral()
    }

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    }

    tasks.named('test') {
        useJUnitPlatform()
    }
}

 

2. module-api/build.gradle 수정

실제 도커 이미지로 만들어야 하는 module-api 설정에 Jib 상세 설정을 넣습니다.

description = 'module-api'
version = '0.0.1-SNAPSHOT' // 여기에 직접 명시

bootJar {
    enabled = true
    archiveFileName = 'module-api.jar'
}

jar {
    enabled = false // 실행 가능한 jar만 만들 경우 일반 jar는 끕니다.
}

dependencies {
    // module-api 전용 의존성
    implementation 'org.springframework.boot:spring-boot-starter-security'
}

jib {
    from {
        image = 'eclipse-temurin:17-jre' // 도커 베이스 이미지
    }
    to {
        image = 'intheeast0305/module-api' // 이미지 이름
        tags = ['latest', project.version.toString()]
    }
    container {
        mainClass = 'com.intheeast.moduleapi.ModuleApiApplication' // main 클래스 Full Path 확인 필요!
        ports = ['8080'] // 컨테이너 개방 포트
        jvmFlags = ['-Xms512m', '-Xmx512m', '-Dfile.encoding=UTF-8']
        creationTime = 'USE_CURRENT_TIMESTAMP' // 빌드 시간을 현재로 설정
    }
}

 

3. Docker Compose 설정 (docker-compose.yml)

루트 프로젝트 디렉토리(multi-module-demo)에서 docker-compose.yml 파일을 생성합니다.

version: '3.8'
services:
  module-api:
    image: intheeast0305/module-api:latest
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=dev
    restart: always

 

4. 빌드 및 실행 순서

루트 프로젝트를 Sync하면 아래와 같이 Gradle 윈도우에 jib 하위 메뉴 아이템이 생성된 것을 확인할 수 있습니다

 

 

build 태스크를 실행하지 않아도 jibDockerBuild 태스크를 실행 선택함으로써 Docker 이미지를 빠르게 생성할 수 있습니다(jibDockerBuild 태스크는 build 태스크를 실행하지 않고, 도커 이미지 생성에 필요한 최소한의 작업만 내부적으로 수행합니다)

(module-api(모듈 프로젝트) 프로젝트 디렉토리의 /build/jib-cache 디렉토리 생성을 체크하세요)

 

도커 데스크탑에서 멀티 모듈 프로젝트의 도커 이미지가 생성되었음을 확인할 수 있습니다.

 

이제 터미널에서 docker-compose.yml 파일을 실행시켜서 모듈의 도커 이미지가 컨테이너에서 실행되는 것을 확인하도록 하겠습니다.

 

터미널에서 도커 이미지들이 정상적으로 실행됨을 확인할 수 있습니다.

 

CLI 환경이 아닌 도커 데스크탑에서도 이 부분을 확인할 수 있습니다.

 

또한 

Docker Compose로 실행된 컨테이너 상태들을 확인할 수 있습니다.

 

 

💡 리팩토링 팁

  • Layer 관리: Jib은 소스 코드와 라이브러리를 별도의 레이어로 분리하므로, 코드가 바뀌어도 빌드가 매우 빠릅니다.
  • 인증 정보: 만약 실제 도커 허브에 push 하고 싶다면, jib.to.auth 설정을 추가하거나 docker login이 되어 있어야 합니다.
  • 플러그인 충돌 방지: module-api/settings.gradle은 반드시 삭제해야 합니다!

 

https://github.com/nomadinsunda/multi-module-demo

 

GitHub - nomadinsunda/multi-module-demo

Contribute to nomadinsunda/multi-module-demo development by creating an account on GitHub.

github.com

 

 

'gradle' 카테고리의 다른 글

Creating a Multi Module Project[4]  (0) 2026.03.30
Root 디렉토리의 build.gradle  (0) 2026.03.24
Creating a Multi Module Project[2]  (0) 2026.03.24
Creating a Multi Module Project[1]  (0) 2026.03.24
sync build.gradle  (0) 2026.03.23