Spring & Spring Boot/대용량 파일 전송 시스템 개발

[27] 대용량 파일 전송 시스템 개발 - 빌드(Maven Bulid)와 Docker Image 생성

carrotweb 2026. 10. 1. 19:10
728x90
반응형

빌드

 

IntelliJ IDEA에서 빌드

우측 Maven 탭 → {Profiles} → Local를 선택합니다. (실행 환경을 선택합니다.)

 

우측 Maven 탭 → {project} → Lifecycle → package를 더블 클릭합니다.

 

빌드 결과

{project}/target/ 경로에 생성됩니다.

 

Build Project (Ctrl + F9)로 실행하면 .class 파일만 생성되고 WAR 파일은 패키징되지 않습니다.

 

빌드 결과 지우기

우측 Maven 탭 → {project} → Lifecycle → clean를 더블 클릭합니다.

 

 

Terminal에서 빌드

테스트 실행을 건너뛰고 프로젝트를 깨끗하게 다시 컴파일하여 배포 가능한 파일(JAR 또는 WAR)로 패키징합니다.

프로젝트의 루트 디렉터리에서 빌드해야 합니다.

mvnw clean package -PLocal -DskipTests

-P : 실행 환경을 설정하는 옵션입니다. 프로필의 id를 입력합니다.

 

-DskipTests : 빌드 과정 중 테스트 실행 단계를 건너뛰도록 설정하는 옵션입니다.

 

 

Terminal에서 빌드 결과

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.example:transmission >----------------------
[INFO] Building transmission 0.0.1-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- clean:3.4.0:clean (default-clean) @ transmission ---
[INFO] Deleting C:\workspaces\projects\prototype\transmission\target
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ transmission ---
[INFO] Copying 5 resources from src\main\resources to target\classes
[INFO] Copying 14 resources from src\main\resources to target\classes
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ transmission ---
[INFO] Recompiling the module because of changed source code.
[INFO] Compiling 70 source files with javac [debug parameters release 17] to target\classes
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ transmission ---
[INFO] skip non existing resourceDirectory C:\workspaces\projects\prototype\transmission\src\test\resources
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ transmission ---
[INFO] Recompiling the module because of changed dependency.
[INFO] Compiling 2 source files with javac [debug parameters release 17] to target\test-classes
[INFO]
[INFO] --- surefire:3.5.2:test (default-test) @ transmission ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- war:3.4.0:war (default-war) @ transmission ---
[INFO] Packaging webapp
[INFO] Assembling webapp [transmission] in [C:\workspaces\projects\prototype\transmission\target\transmission-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\workspaces\projects\prototype\transmission\src\main\webapp]
[INFO] Building war: C:\workspaces\projects\prototype\transmission\target\transmission-0.0.1-SNAPSHOT.war
[INFO]
[INFO] --- spring-boot:3.4.0:repackage (repackage) @ transmission ---
[INFO] Replacing main artifact C:\workspaces\projects\prototype\transmission\target\transmission-0.0.1-SNAPSHOT.war with repackaged archive, adding nested dependencies in BOOT-INF/.
[INFO] The original artifact has been renamed to C:\workspaces\projects\prototype\transmission\target\transmission-0.0.1-SNAPSHOT.war.original
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  15.600 s
[INFO] Finished at: 2025-01-25T11:29:37+09:00
[INFO] ------------------------------------------------------------------------

 

만약, JAVA_HOME 환경 변수가 올바르게 정의되지 않았다면 다음과 같은 오류 메시지가 출력됩니다.

 

JAVA 버전 및 JAVA_HOME 확인

 

만약, 경로가 나오지 않는다면 JAVA_HOME이 설정되지 않았거나 Java가 설치되지 않은 경로로 잘 못 설정된 경우일 수 있습니다. JAVA_HOME을 설정하시기 바랍니다.

 

 

Docker Image 생성

 

Dockerfile 파일 생성

프로젝트의 루트 디렉터리에 확장자 없는 Dockerfile 파일을 생성합니다.

# Java 17
FROM eclipse-temurin:17

# 작업 디렉터리 설정
WORKDIR /app

# 업로드 임시 파일 경로
RUN mkdir -p /appdata/tempupload

# 업로드 파일 경로
RUN mkdir -p /appdata/upload

# 다운로드 임시 파일 경로
RUN mkdir -p /appdata/tempdownload

# 빌드된 WAR 파일 경로 변수 (Maven)
ARG WAR_FILE_PATH=target/*.war

# 빌드된 WAR 파일을 컨테이너로 복사
COPY ${WAR_FILE_PATH} app.war

# 컨테이너가 사용할 포트 지정
EXPOSE 8080

# 실행할 명령어
ENTRYPOINT ["java", "-jar", "app.war"]

 

Eclipse Temurin(이클립스 테무린) : 이클립스 재단의 Adoptium(https://adoptium.net/, 아돕티엄) 프로젝트에서 제공하는 고성능 오픈소스 자바(Java) 런타임 및 OpenJDK 배포판입니다. 누구나 무료로 법적 리스크 없이 사용할 수 있는 오픈소스 OpenJDK 배포 프로젝트입니다.

 

리눅스 환경에 맞게 [업로드 임시 파일 경로], [업로드 파일 경로], [다운로드 임시 파일 경로]를 생성해야 합니다.

 

DB 카테고리 테이블의 데이터 변경

리눅스 환경에 맞게 카테고리 테이블에 등록된 파일 경로들을 변경해야 합니다.

 

테스트를 위해 첫번째 카테고리인 [test1]만 파일 경로를 변경하겠습니다.

 

[업로드 임시 파일 경로] : C:/tempUpload/temp → /appdata/tempupload

[업로드 파일 경로] : C:/tempUpload/data → /appdata/upload

[다운로드 임시 파일 경로] : C:/tempDownload/temp → /appdata/tempdownload

 

Query문을 실행하여 변경합니다.

UPDATE tb_category SET DOWN_TEMP_FILE_PATH='/appdata/tempdownload',UP_FILE_PATH='/appdata/upload',UP_TEMP_FILE_PATH='/appdata/tempupload' WHERE SEQ=1;

 

 

Docker Bulid

프로젝트 디렉터리에 있는 Dockerfile과 소스 코드를 활용하여 컨테이너 이미지를 생성합니다.

프로젝트의 루트 디렉터리에서 빌드해야 합니다.

docker build -t {생성될 이미지의 이름(태그)} .(마침표, 현재 디렉터리)
docker build -t transmission-app .

 

생성된 Image 파일은 가상 디스크(docker_data.vhdx)에 저장됩니다.

 

Docker Desktop에서 빌드된 이미지 확인

 

Docker Image 저장 위치

C:\Users\carro\AppData\Local\Docker\wsl\disk

 

 

Docker build 캐시 삭제

도커 빌드 과정에서 생성된 빌드 캐시를 삭제합니다.

docker builder prune -f
docker builder prune -a -f

-f : 삭제 여부를 묻는 확인 절차를 생략하는 옵션입니다. (유효하지 않는 캐시만 삭제됩니다.)

-a : 모든 빌드 캐시를 삭제하는 옵션입니다.

 

 

빌드 후에 추가 빌드 계획이 없다면 디스크 용량 확보를 위해 빌드 캐시를 삭제하는 것이 좋습니다.

 

캐시를 사용하지 않고 빌드할 수 있습니다.

docker build --no-cache -t transmission-app .

 

 

Docker Image 저장(백업) 및 로드(복원)

Docker Image 저장(백업)

도커 이미지를 파일(.tar)로 저장(백업)합니다.

docker save -o(--output) {저장할 파일 경로와 파일 이름}.tar {이미지이름:태그}
docker save -o transmission-app.tar transmission-app:latest

 

Docker Image 로드(복원)

docker save로 만든 파일(.tar)을 도커 이미지로 복원됩니다.

docker load -i(--input) {docker save로 만든 파일(.tar)}
docker load -i transmission-app.tar

728x90
반응형