본문으로 바로가기
제품데스크톱 도구TASTECAD도면 확인TASTEFILES파일 관리TASTEFTP파일 전송TASTESSH원격 작업공간TASTEZIP압축과 해제개발 도구TASTECODERust 통합 개발 환경TASTESTUDIO통합 개발·테스트 환경TASTEETL데이터 통합(ETL)서버TASTEREMOTE원격 데스크톱 서버TASTEGEO공간정보 서버TASTEMAIL메일 작업공간시작하기다운로드문서구매모든 제품
마켓플레이스
소식
개발소식오늘의 개발 소식개발 문서프로그래밍 언어RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron알고리즘알고리즘 기초알고리즘 핵심알고리즘 심화실무 알고리즘
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스커뮤니티 안내
협업기술 전수홈페이지 구축데스크톱 앱 구축릴리스·결제 파이프라인판매 파트너문의
서비스원격 데스크톱설치 패키지 커스텀
TASTEDEV
제품

데스크톱 도구

TASTECAD복잡한 도면을 가볍게 열다TASTEFILES필요한 파일만, 가장 빠르게TASTEFTP파일이 오가는 가장 단정한 길TASTESSH서버와 나 사이, 더 단단한 연결TASTEZIP더 빠르게 묶고, 더 안전하게 풀다

개발 도구

TASTECODERust 앱을 편집 · 빌드 · 디버깅 · 테스트까지 한 창에서TASTESTUDIO편집부터 원격 테스트와 승인 기반 AI 수정까지TASTEETL값을 보며 데이터를 옮깁니다

서버

TASTEREMOTE우리 회사 서버로 운영하는 원격 데스크톱TASTEGEOGeoServer 호환 공간정보 서버를 Rust로 다시 세웁니다TASTEMAIL메일의 주도권을 다시 내 손에

시작하기

다운로드모든 제품 최신 판문서제품 사용법구매구독 · 영구 라이선스모든 제품모든 제품 한눈에
모든 제품
마켓플레이스소식
개발

소식

오늘의 개발 소식언어 · 프레임워크 · GitHub · AI 공식 발표개발 문서언어 · 프레임워크 · 알고리즘 안내서

프로그래밍 언어

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

프레임워크

프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular
서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express
앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron

알고리즘

알고리즘 기초복잡도 분석 · 정렬 · 탐색 · 기본 자료구조 · 트리와 힙알고리즘 핵심그래프 탐색 · 최단 경로와 최소 신장 트리 · 동적 계획법 · 탐욕 알고리즘 · 분할 정복 · 백트래킹알고리즘 심화문자열 알고리즘 · 수학과 정수론 · 비트 연산 · 구간 트리 · 유니온 파인드실무 알고리즘코딩 면접 풀이 전략 · LRU 캐시 · 레이트 리미터 · 일관된 해시
개발 문서 전체 보기
커뮤니티
프로젝트빌더와 작업 발견개발 로그결정과 시행착오프롬프트재사용 가능한 지시AI 도구 이슈Claude · Codex · Gemini 문제와 우회법쇼케이스완성된 결과커뮤니티 안내공개하고 함께 만드는 방식
협업
기술 전수Rust·egui 네이티브 앱 만들기홈페이지 구축10개 언어, 계정, 문서·다운로드데스크톱 앱 구축Rust·egui, WebView 없이릴리스·결제 파이프라인서명 · MSI·deb·rpm·AppImage · 해시판매 파트너소개하고 결제액의 30% 받기문의구축 · 제휴 · 투자 문의
서비스
원격 데스크톱브라우저로 내 컴퓨터에 접속설치 패키지 커스텀필요한 기능만, 설정은 미리
구매
KO
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
로그인
로그인
TASTEDEV

작은 도구부터, 더 좋은 개발까지.

support@tastedev.netTASTEDEV 후원하기
제품제품군구매문서다운로드마켓플레이스고객 지원
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스
정책개인정보처리방침이용약관구독 약관환불 정책커뮤니티 운영 정책
계정로그인가입하기
방문자
오늘
012345678901234567890123456789012345678901234567890123456789
어제
012345678901234567890123456789012345678901234567890123456789
누적 조회
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
상호
지엑스소프트
대표자
최영구
사업자등록번호
853-44-00368
주소
인천광역시 미추홀구 경인로 351 9층 V24
전화
+82-10-4404-1523
이메일
whitecalvin@tastedev.net
개인정보 보호책임자
최영구

© 2026 TASTEDEV제품 정보는 현재 검증된 개발 소스를 기준으로 합니다.출시·고도화 중

Spring Boot 문서
Spring Boot
Spring Boot 시작하기프로젝트 구조와 설정핵심 개념데이터와 상태테스트배포
토론

Spring Boot 안내서 · 6/6

배포

Spring Boot 애플리케이션은 웹 서버까지 들어 있는 실행 가능한 jar 하나로 패키징됩니다. 이 jar를 그대로 서버에서 실행하거나, 컨테이너 이미지로 만들어 Kubernetes 같은 플랫폼에 올립니다. 이 장에서는 패키징, 컨테이너 이미지, 운영 설정, Actuator 상태 확인을 다룹니다.

실행 가능한 jar 만들기

# Gradle: build/libs/demo-0.0.1-SNAPSHOT.jar
./gradlew bootJar

# Maven: target/demo-0.0.1-SNAPSHOT.jar
./mvnw package

java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

Gradle의 build 작업은 의존성이 빠진 -plain.jar도 함께 만듭니다. 배포에는 이름에 plain이 없는 jar를 씁니다. 실행할 서버에는 JRE만 있으면 됩니다.

운영 설정 넘기기

jar 안의 설정은 기본값으로 두고, 환경마다 다른 값은 실행할 때 환경 변수나 명령줄 인자로 넘깁니다. 비밀번호는 이미지나 저장소에 넣지 않습니다.

export SPRING_PROFILES_ACTIVE=prod
export SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/demo
export SPRING_DATASOURCE_PASSWORD=change-me
java -jar demo.jar --server.port=8080

컨테이너 이미지: Buildpacks

Dockerfile 없이도 Cloud Native Buildpacks로 이미지를 만들 수 있습니다. Docker가 실행 중이어야 하며, JRE 선택과 계층 분리, 메모리 설정을 빌드팩이 알아서 처리합니다.

./gradlew bootBuildImage --imageName=myorg/demo
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=myorg/demo

docker run -p 8080:8080 myorg/demo

컨테이너 이미지: Dockerfile

이미지를 직접 다루고 싶다면 Dockerfile을 씁니다. jar를 계층별로 풀어 두면 코드만 바뀌었을 때 의존성 계층을 다시 내려받지 않아도 되므로 배포가 빨라집니다.

FROM eclipse-temurin:21-jre AS builder
WORKDIR /builder
COPY build/libs/demo-0.0.1-SNAPSHOT.jar application.jar
RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted

FROM eclipse-temurin:21-jre
WORKDIR /application
COPY --from=builder /builder/extracted/dependencies/ ./
COPY --from=builder /builder/extracted/spring-boot-loader/ ./
COPY --from=builder /builder/extracted/snapshot-dependencies/ ./
COPY --from=builder /builder/extracted/application/ ./
ENTRYPOINT ["java", "-jar", "application.jar"]

Actuator로 상태 확인

spring-boot-starter-actuator를 추가하면 운영에 필요한 엔드포인트가 생깁니다. 기본으로 HTTP에 공개되는 것은 /actuator/health뿐이며, 다른 엔드포인트는 필요한 것만 골라 공개합니다.

management:
  endpoints:
    web:
      exposure:
        include: health,info
  endpoint:
    health:
      probes:
        enabled: true
      show-details: when-authorized

curl http://localhost:8080/actuator/health는 {"status":"UP"}를 돌려주고, 데이터베이스 연결이 끊기면 DOWN으로 바뀝니다. 프로브를 켜면 /actuator/health/liveness와 /actuator/health/readiness가 생기며, Kubernetes 환경에서는 자동으로 켜집니다.

# Kubernetes Deployment의 컨테이너 설정 일부
livenessProbe:
  httpGet:
    path: /actuator/health/liveness
    port: 8080
readinessProbe:
  httpGet:
    path: /actuator/health/readiness
    port: 8080

배포 전 점검

  • 운영 프로필과 외부 설정(데이터베이스, 비밀 값)이 환경 변수로 들어가는지 확인합니다.
  • spring.jpa.hibernate.ddl-auto는 validate 또는 none으로 두고, 스키마는 Flyway로 바꿉니다.
  • Actuator 엔드포인트는 꼭 필요한 것만 공개하고, 필요하면 Spring Security로 보호합니다.
  • 시작 시간과 메모리가 중요하다면 GraalVM 네이티브 이미지도 검토합니다.

정리

  • bootJar나 package로 만든 jar 하나를 java -jar로 실행합니다.
  • 컨테이너 이미지는 bootBuildImage(Buildpacks) 또는 계층을 나눈 Dockerfile로 만듭니다.
  • 환경별 값은 환경 변수와 프로필로 넘깁니다.
  • Actuator의 health 엔드포인트와 프로브로 플랫폼이 상태를 확인하게 합니다.

공식 문서

  • Spring Boot Reference Documentation
  • Deploying Spring Boot Applications
  • Container Images
  • Production-ready Features (Actuator)
  • Spring Guides
이 장에 대해 질문이 있나요?
이전 장테스트

댓글 0개

인기 댓글순최신순

로그인 · 로그인하면 댓글을 남길 수 있습니다.