본문 바로가기
개발

Spring Boot 애플리케이션을 Cloud Run에 Docker로 배포하기 (GCP 배포 실습)

by 새싹 아빠 2025. 7. 11.

오늘은 내가 만든 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 서버를 만들 수 있었다.