목적

모듈을 분리(예: payment-service)해도 로컬/서버에서 Docker 빌드·배포·모니터링이 문제없이 동 작하도록 표준 설정을 정리합니다.


기본 원칙


Dockerfile 수정 규칙 (멀티 모듈)

루트 서비스 Dockerfile (분리 과도기용, 분리 후 삭제)

멀티 모듈 프로젝트는 Gradle이 settings.gradle.kts에 정의된 모든 모듈 디렉터리를 확인함. 따라서 dependencies/build 전에 모듈 디렉터리를 최소한 복사해야 함.

# Build stage
FROM eclipse-temurin:21-jdk-jammy AS build
WORKDIR /app

# Gradle 캐시용 파일
COPY gradlew .
COPY gradle gradle
COPY build.gradle.kts .
COPY settings.gradle.kts .

**# 모듈 build.gradle.kts를 먼저 복사해야 dependencies 단계가 실패하지 않음
COPY payment-service/build.gradle.kts payment-service/build.gradle.kts**

RUN chmod +x ./gradlew
RUN ./gradlew dependencies --no-daemon

# 소스 복사
COPY src src
COPY payment-service payment-service
RUN ./gradlew build -x test --no-daemon

# Run stage
FROM eclipse-temurin:21-jre-jammy
WORKDIR /app

COPY --from=build /app/build/libs/*.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]


모듈 전용 Dockerfile

모듈별로 독립 이미지 빌드용 Dockerfile 생성

# Build stage
FROM eclipse-temurin:21-jdk-jammy AS build
WORKDIR /app

# Gradle 전체 프로젝트를 복사하여 빌드 컨텍스트를 맞춥니다.
COPY . .

# 실행 권한을 부여하고 'payment-service' 모듈만 bootJar로 빌드합니다.
RUN chmod +x ./gradlew
RUN ./gradlew :payment-service:bootJar --no-daemon

# Run stage
FROM eclipse-temurin:21-jre-jammy
WORKDIR /app

# build 스테이지에서 빌드된 payment-service의 JAR 파일만 복사합니다.
COPY --from=build /app/payment-service/build/libs/payment-service-*.jar app.jar

# 애플리케이션 포트 노출 (docker-compose에서 설정할 포트와 맞춤)
EXPOSE 8082

# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

docker-compose.yml 수정 규칙

모듈 서비스 추가

모듈 서비스는 build 대신 image만 사용해야 함 (서버에서 build 하지 않기 위해).