
우선 모듈식 모놀리스로 아키텍처를 가져갔다면 전통적인 모놀리식과 다르게 여러 개의 모듈이 있을 것이다. 하지만 모듈러식 모놀리스는 여러 모듈로 코드를 나누더라도, 최종적으로는 실행 모듈인 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 |
|---|
