출시·고도화 중
Spring Boot 안내서 · 6/6
Spring Boot 애플리케이션은 웹 서버까지 들어 있는 실행 가능한 jar 하나로 패키징됩니다. 이 jar를 그대로 서버에서 실행하거나, 컨테이너 이미지로 만들어 Kubernetes 같은 플랫폼에 올립니다. 이 장에서는 패키징, 컨테이너 이미지, 운영 설정, Actuator 상태 확인을 다룹니다.
# 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.jarGradle의 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=8080Dockerfile 없이도 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을 씁니다. 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"]spring-boot-starter-actuator를 추가하면 운영에 필요한 엔드포인트가 생깁니다. 기본으로 HTTP에 공개되는 것은 /actuator/health뿐이며, 다른 엔드포인트는 필요한 것만 골라 공개합니다.
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
probes:
enabled: true
show-details: when-authorizedcurl 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: 8080spring.jpa.hibernate.ddl-auto는 validate 또는 none으로 두고, 스키마는 Flyway로 바꿉니다.bootJar나 package로 만든 jar 하나를 java -jar로 실행합니다.bootBuildImage(Buildpacks) 또는 계층을 나눈 Dockerfile로 만듭니다.
댓글 0개
로그인 · 로그인하면 댓글을 남길 수 있습니다.
첫 댓글을 남겨 보세요.