오늘은 내가 만든 Spring Boot 기반 Dart Entity Generator 서버를 GCP의 Cloud Run을 활용해서 배포한 과정을 공유하려고 한다. 도커 이미지부터 배포 자동화 스크립트까지 한 번에 정리해보자.
🛠️ 개발 환경
- Framework: Spring Boot (Kotlin)
- 빌드 도구: Gradle
- 클라우드: GCP Cloud Run
- 도커: Dockerfile 기반 빌드
- 배포 자동화: .env + deploy.sh 스크립트
📦 1. Gradle로 jar 파일 빌드하기
먼저 프로젝트 루트에서 아래 명령어를 실행해 jar 파일을 만든다.
./gradlew clean bootJar
build/libs/xxxx-xxxxx-xxxx.jar 파일이 생성된다면 성공!
🐳 2. Dockerfile 작성
루트에 아래처럼 Dockerfile을 작성했다.
Dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY build/libs/xxxx-xxxxx-xxxx.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
🚫 3. .dockerignore 설정 (중요)
Cloud Build 시 업로드 제외 파일을 지정해줘야 jar가 누락되지 않는다. .dockerignore 파일을 루트에 추가:
.dockerignore
.gradle/
.git/
**/*.log
⚠️ 주의: build/ 디렉토리를 제외하면 jar가 업로드되지 않으니 절대 포함시키지 말 것!
☁️ 4. GCP Cloud Build로 이미지 빌드 및 업로드
이미지 빌드는 아래 명령어로 실행:
gcloud builds submit --tag gcr.io/xxxx-xxxxx-xxxx/xxxx-xxxxx-xxxx-server
오류가 많았는데 대부분 .dockerignore나 경로 문제였다.
성공 시 GCR에 이미지가 올라간다.
🚀 5. Cloud Run 배포
gcloud run deploy xxxx-xxxxx-xxxx-server \
--image gcr.io/xxxx-xxxxx-xxxx/xxxx-xxxxx-xxxx-server \
--platform managed \
--region asia-northeast3 \
--allow-unauthenticated
성공 시 다음과 같은 URL이 발급된다:
https://xxxx-xxxxx-xxxx-server-xxxxxxx.a.run.app
이게 바로 우리가 만든 API 서버의 퍼블릭 도메인이다!
⚙️ 6. 자동 배포 스크립트 작성 (deploy.sh)
반복 작업을 줄이기 위해 배포 스크립트를 만들었다.
.env 파일:
PROJECT_ID=xxxx-xxxxx-xxxx
IMAGE_NAME=xxxx-xxxxx-xxxx-server
REGION=asia-northeast3
#!/bin/bash
set -e
if [ -f .env ]; then
export $(grep -v '^#' .env | xargs)
else
echo "❌ .env 파일이 없습니다."
exit 1
fi
IMAGE_PATH="gcr.io/$PROJECT_ID/$IMAGE_NAME"
echo "✅ 1. Gradle bootJar 빌드 시작"
./gradlew clean bootJar
echo "✅ 2. Docker 이미지 빌드 및 업로드"
gcloud builds submit --tag $IMAGE_PATH
echo "✅ 3. Cloud Run 배포 시작"
gcloud run deploy "$IMAGE_NAME" \
--image "$IMAGE_PATH" \
--platform managed \
--region "$REGION" \
--allow-unauthenticated
echo "🎉 배포 완료! 서비스 URL:"
gcloud run services describe "$IMAGE_NAME" \
--platform managed \
--region "$REGION" \
--format "value(status.url)"
실행:
chmod +x deploy.sh
./deploy.sh
✅ 결과 확인
- URL 접속만으로 서버 실행 확인 가능
- https://.../your-api-endpoint 형태로 호출
- Google Cloud Console의 Cloud Run → Logs 에서 로그 확인 가능
💰 과금 관련 주의사항
- Cloud Run은 요청이 있을 때만 과금됨
- 기본적으로 월 무료 할당량이 넉넉함
- 트래픽 많지 않으면 거의 무료
🧘 마무리
배포 과정이 처음에는 삽질이 많았지만, .dockerignore, jar 경로, 자동화 스크립트를 잘 정리하니 다음부터는 훨씬 편해졌다.
GCP Cloud Run 덕분에 SSL, 도메인, 인프라 세팅 없이도 간편하게 운영 가능한 API 서버를 만들 수 있었다.
'개발' 카테고리의 다른 글
| CORS 정책 정리: 웹 API 개발자가 꼭 알아야 할 개념 (Spring 기준) (0) | 2025.07.14 |
|---|---|
| Vue Firebase 배포 방법 (Vite 기반 실전 예제) (0) | 2025.07.14 |
| Firebase Hosting vs Nginx? (0) | 2025.07.11 |
| EC2에 Promtail + Loki + Grafana로 로그 수집 파이프라인 구축기 (0) | 2025.07.10 |
| iOS 앱 개발 및 배포를 위한 apple developer 셋팅 (0) | 2025.03.18 |