[Spring, Docker] 모듈식 모놀리스에서 Docker 배포하기

2026. 6. 24. 16:01·Back-end/Spring

우선 모듈식 모놀리스로 아키텍처를 가져갔다면 전통적인 모놀리식과 다르게 여러 개의 모듈이 있을 것이다. 하지만 모듈러식 모놀리스는 여러 모듈로 코드를 나누더라도, 최종적으로는 실행 모듈인 app에서 하나의 JAR 파일을 만들어 배포한다.

우선 app 모듈에서 배포를 할 예정이라 app → Tasks → bootJar 를 클릭해줬다.

app/build/libs 의 경로에 .jar로 끝나는 파일이 생성된다.

이제 Dockerfile을 성해준다. (확장자 x)


Dockerfile 생성하기

방법은 두 가지가 있다

1.jar 있는 곳에 Dockerfile 두기

.jar 파일이 있는 곳에 Dockerfile을 생성하는 방법

모듈식 모놀리스에서 생기는 단점

1. Dockerfile이 build/libs 안에 들어감
2. build 폴더는 보통 .gitignore 대상임
3. gradlew clean 하면 build/libs가 삭제됨
4. Dockerfile도 같이 사라질 수 있음
5. 프로젝트 구조 관리가 지저분해짐

2. 프로젝트 루트에 Dockerfile 두기

이 방법이 추천되는 방법이다

좋은 이유

1. Dockerfile이 프로젝트 루트에 있어서 관리하기 좋음
2. GitHub에 올리기 좋음
3. 모듈러식 모놀리스 구조가 더 명확함
4. 나중에 docker-compose.yml 추가하기 좋음
5. build/libs 안에 직접 들어가지 않아도 됨

Dockerfile 설정하기

FROM eclipse-temurin:17-jre-alpine

WORKDIR /app

COPY app/build/libs/*.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]
  • FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정, Java에 맞는 버전을 넣으면 된다)
  • WORKDIR :컨테이너 내부에서 작업할 디렉터리를 지정한다.
    • 이후 실행되는 COPY, ENTRYPOINT 같은 명령어는 기본적으로 /app 경로를 기준으로 동작한다.
  • COPY : 로컬에 있는 JAR 파일을 컨테이너 내부로 복사한다.
    • 현재 프로젝트는 모듈러식 모놀리스 구조이기 때문에 auth, board, common을 각각 실행하는 것이 아니라, 실행 모듈인 app에서 하나의 JAR 파일을 만든다.
  • EXPOSE : 컨테이너가 내부적으로 사용할 포트를 문서화한다.
    • Spring Boot 애플리케이션은 기본적으로 8080 포트에서 실행되기 때문에 8080을 지정했다.
    • 다만 EXPOSE만으로 실제 포트가 열리는 것은 아니다.
      실제로 내 컴퓨터에서 접속하려면 docker run 할 때 -p 옵션으로 포트 매핑을 해야 한다.
      • 예를 들어 -p 5000:8080은 내 PC의 5000번 포트로 들어온 요청을 컨테이너 내부의 8080번 포트로 전달한다.
  • ENTRYPOINT : 컨테이너가 시작될 때 실행할 명령어를 지정한다
    • 여기서는 java -jar app.jar를 실행하여 Spring Boot 애플리케이션을 실행한다.
Java 17 실행 환경 준비
→ app/build/libs 안의 jar 복사
→ 컨테이너 안에서 app.jar로 이름 변경
→ 8080 포트 사용
→ java -jar app.jar 실행

DockerImage 만들기

터미널의 위치는 Dockerfile이 있는 곳 이여야 한다.

**docker build -t {이미지명} .**

**설명**
docker build      → Docker 이미지 만들기
-t 이미지명 → 이미지 이름 지정
.                 → 현재 폴더를 기준으로 Dockerfile 찾기

이렇게 확인할 수 있다.


Docker 컨테이너 실행하기

docker run --name 컨테이너명 -p 5000:8080 이미지명

--name appjam-auth-board-container → 생성할 컨테이너 이름
-p 5000:8080 → 내 PC의 5000번 포트를 컨테이너 내부 8080번 포트와 연결
appjam-auth-board → 실행할 Docker 이미지 이름

Docker Desktop

Docker Desktop을 사용하면 Containers와 images를 쉽게 확인할 수 있을 뿐만 아니라 삭제 및 Container 중지/실행 모두 가능하다


정리

모듈러식 모놀리스는 내부적으로 여러 모듈을 가지지만, 배포 관점에서는 하나의 애플리케이션으로 실행된다. 따라서 Docker 이미지도 auth, board, common을 각각 만드는 것이 아니라, 실행 모듈인 app에서 생성된 JAR 파일 하나를 기준으로 만든다.

참고자료

https://da2uns2.tistory.com/entry/Docker-도커에-Spring-Boot-구축하기

 

'Back-end > Spring' 카테고리의 다른 글

[Spring] Business Layer와 Presentation Layer 분리의 중요성  (0) 2026.06.16
'Back-end/Spring' 카테고리의 다른 글
  • [Spring] Business Layer와 Presentation Layer 분리의 중요성
dev_Hyeonjoon
dev_Hyeonjoon
스프링이랑 자바 공부 중 입니다!!
  • dev_Hyeonjoon
    Hyeonjoon's code
    dev_Hyeonjoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (61) N
      • CS (6)
        • Architecture (4)
        • Algorithm (2)
      • Front-end (10)
        • JavaScript (0)
        • React-project (5)
        • Vanilla[JS]-project (5)
        • study (0)
      • Tools (1)
        • GitHub (1)
        • AI (0)
      • Back-end (35) N
        • Java (27)
        • Architecture (2) N
        • JPA (0)
        • Trouble Shooting (1)
        • Spring (2)
        • DevOps (2)
      • Trouble Shooting (2)
        • Python (1)
      • 자격증 (1)
      • 알고리즘 (0)
      • 회고 (6)
        • 기타 (6)
        • 독서록 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    vanillajs
    군대에서코딩
    OOP
    Java
    형변환
    Til
    토이프로젝트
    자바
    코딩
    자바기초
    아키텍처
    backend
    자바공부
    파이썬
    리액트
    Spring
    객체지향
    백엔드
    바닐라js
    사지방코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
dev_Hyeonjoon
[Spring, Docker] 모듈식 모놀리스에서 Docker 배포하기
상단으로

티스토리툴바