1. Cloud SQL(MySQL) 인스턴스 설정
먼저 Google Cloud SQL에서 MySQL 인스턴스를 생성하고, 외부에서 접근 가능하도록 설정해야 합니다.
항목 | 설명 |
DB 인스턴스 생성 | Cloud SQL 콘솔에서 MySQL 인스턴스 생성 |
외부 접속 허용 | 네트워크 탭에서 로컬 개발 머신 IP 등 외부 IP 허용 설정 |
테스트 | MySQL Workbench 등 툴로 로컬에서 DB 접속 테스트 |
환경 변수 적용 | Spring Boot 설정 파일(application-prod.yml 등)에 외부 DB 주소로 변경 |
Tip: 보안을 위해 접속 IP는 최소한으로 제한하는 것을 권장합니다.
2. Dockerfile 작성
Spring Boot 애플리케이션을 컨테이너로 패키징하기 위한 Dockerfile 예시는 다음과 같습니다.
dockerfile
복사편집
# JDK 21 기반 이미지 사용
FROM openjdk:21
# 애플리케이션 포트 개방
EXPOSE 8080
# 빌드한 JAR 파일 복사
COPY build/libs/demo-0.0.1-SNAPSHOT.jar app.jar
# Spring Boot 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]
주의: COPY 경로는 실제 프로젝트 빌드 산출물 위치에 맞게 수정해야 합니다.
3. Google Cloud SDK를 이용한 배포 과정
터미널에서 다음 순서로 진행합니다.
- 구글 계정 로그인
gcloud auth login
- Docker 이미지 빌드
docker build -t gcr.io/{PROJECT-ID}/{IMAGE-NAME} .
- 이미지 존재 여부 확인
docker images
- Container Registry에 이미지 푸시
docker push gcr.io/{PROJECT-ID}/{IMAGE-NAME}
- Cloud Run에 배포
gcloud run deploy \
--image gcr.io/{PROJECT-ID}/{IMAGE-NAME} \
--platform managed \
--region asia-northeast3 \
--allow-unauthenticated
4. 배포 후 서비스 URL 확인
배포가 완료되면 Cloud Run에서 아래와 같은 URL이 출력됩니다.
https://{SERVICE-NAME}-{HASH}-uc.a.run.app
이 URL로 서비스에 접근할 수 있습니다.
5. 배포 시 발생할 수 있는 오류 및 해결법
환경 변수 미적용 문제
java.lang.RuntimeException:
Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${DB_JDBC_URL}
- 원인: 환경 변수(
DB_JDBC_URL
)가 Cloud Run에 제대로 전달되지 않아 JDBC URL이 치환되지 않음
- 해결법:
gcloud run deploy
시-set-env-vars
옵션으로 환경 변수 직접 지정
gcloud run deploy \
--image gcr.io/{PROJECT-ID}/{IMAGE-NAME} \
--set-env-vars DB_JDBC_URL="jdbc:mysql://{DB_HOST}:3306/{DB_NAME}" \
--platform managed \
--region asia-northeast3
6. 요약 체크리스트
항목 | 완료 여부 |
Cloud SQL 인스턴스 설정 및 접속 테스트 | ✅ |
Dockerfile 작성 및 빌드 | ✅ |
GCP 로그인 및 이미지 빌드/푸시 | ✅ |
Cloud Run 배포 및 URL 확인 | ✅ |
환경 변수 설정 오류 해결 | ✅ |