7단계
7단계 — 배포
25 분
7단계 — 배포
코드가 내 컴퓨터 에서만 동작하면 의미가 없어요. Docker 이미지로 만들어 어디서나 같은 모습으로 돌게 합니다.
Dockerfile 한 장
# 빌드 단계
FROM gradle:8.10-jdk21 AS builder
WORKDIR /app
COPY . .
RUN gradle bootJar --no-daemon
# 런타임 단계
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
bootJar 는 Spring 의 fat jar — 모든 의존성을 한 파일에. 멀티스테이지 빌드로 최종 이미지 크기를 1/3 로 줄여요.
docker-compose 로 DB 까지
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
volumes:
- pg-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 5s
app:
build: .
depends_on:
postgres: { condition: service_healthy }
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/mydb
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: secret
ports:
- "8080:8080"
volumes:
pg-data:
docker compose up -d 한 줄로 DB + 앱이 같이 떠요.
운영 체크리스트 5
배포 전에 한 번 보는 표:
- ✅
application-prod.yml분리 (운영 비밀번호·로그 레벨) - ✅
actuator/health엔드포인트 노출 (HEALTHCHECK 용) - ✅
DockerfileHEALTHCHECK 명시 - ✅ Caddy 또는 Nginx 가 HTTPS·압축 처리
- ✅ DB 백업 자동 (cron 또는 admin UI 버튼)
Caddy 로 HTTPS 한 줄
api.example.com {
reverse_proxy app:8080
}
Caddy 는 Let's Encrypt 인증서를 자동 발급. 별도 설정 불필요.
직접 해 보기
위 Dockerfile + docker-compose.yml 을 프로젝트에 추가하고 docker compose up -d --build 를 돌려 보세요. http://localhost:8080/api/posts 가 동작하면 어디서나 같이 동작한다는 뜻.
더 깊이
- Docker 기초 노트
- docker-compose 패턴
- Caddy 노트
- devops-cloud 강좌 — 클라우드 1대 서버 운영
다음 단계
이 강좌는 끝났어요. 다음으로 devops-cloud 강좌 에서 진짜 서버에 올리거나, python-data-pipeline 으로 데이터 흐름을 만나 보세요.
🎉 Spring Boot 4 로 시작하는 백엔드 완주를 축하해요
이어서 어떤 걸 배워 볼까요?