이 디렉토리는 GCP(Google Cloud Platform)에 Dorumdorum 애플리케이션을 배포하기 위한 Terraform 설정을 포함합니다.
- Compute Engine: e2-micro (프리티어) - Spring Boot 애플리케이션 실행
- Cloud SQL: db-f1-micro (프리티어), MySQL 8.0, 20GB, Single AZ
- Cloud Storage: 10-20GB 스토리지
- VPC: 커스텀 VPC 네트워크 및 서브넷
- Static IP: 고정 공인 IP 주소
-
GCP 계정 및 프로젝트
- GCP 계정 생성: https://cloud.google.com/
- 새 프로젝트 생성 또는 기존 프로젝트 사용
- 프로젝트 ID 확인
-
Terraform 설치
brew install terraform # 또는 # https://developer.hashicorp.com/terraform/downloads
-
gcloud CLI 설치 (선택사항, 권장)
brew install google-cloud-sdk gcloud init gcloud auth application-default login
-
GCP 인증 설정
방법 1: gcloud CLI 사용 (권장)
gcloud auth application-default login
방법 2: 서비스 계정 키 사용
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
-
terraform.tfvars.example을 terraform.tfvars로 복사
cp terraform.tfvars.example terraform.tfvars
-
terraform.tfvars 파일 수정
gcp_project_id = "your-project-id" # GCP 프로젝트 ID gcp_region = "asia-northeast3" # 서울 리전 gcp_zone = "asia-northeast3-a" db_password = "your-secure-password" # 강력한 비밀번호로 변경 smtp_password = "your-smtp-password" # SMTP 앱 비밀번호
-
필수 API 활성화
gcloud services enable compute.googleapis.com gcloud services enable sqladmin.googleapis.com gcloud services enable storage.googleapis.com
-
Terraform 초기화
cd INFRA terraform init -
배포 계획 확인
terraform plan
-
인프라 배포
terraform apply
-
배포 확인
terraform output
인프라 배포가 완료된 후, Spring Boot 애플리케이션을 배포합니다.
-
애플리케이션 빌드
cd BE ./gradlew bootJar -
배포 스크립트 실행
cd INFRA ./deploy.sh dorumdorum-app asia-northeast3-a또는 SSH 키를 사용하는 경우:
./deploy.sh dorumdorum-app asia-northeast3-a ~/.ssh/gcp_key
모든 리소스를 삭제하려면:
cd INFRA
terraform destroy또는 destroy.sh 스크립트 사용:
./destroy.shgcloud CLI 사용 (권장):
gcloud compute ssh dorumdorum-app --zone=asia-northeast3-a일반 SSH 사용:
# 인스턴스의 외부 IP 확인
terraform output compute_instance_public_ip
# SSH 접속
ssh ubuntu@<PUBLIC_IP># gcloud 사용
gcloud compute ssh dorumdorum-app --zone=asia-northeast3-a --command="sudo journalctl -u dorumdorum -f"
# 또는 SSH 접속 후
sudo journalctl -u dorumdorum -fTerraform 배포 후 다음 정보를 확인할 수 있습니다:
compute_instance_public_ip: Compute Engine 인스턴스의 공인 IPcloud_sql_connection_name: Cloud SQL 연결 이름cloud_storage_bucket_name: Cloud Storage 버킷 이름
Cloud SQL은 Private IP를 사용하여 VPC 내부에서만 접근 가능합니다. 애플리케이션은 Cloud SQL Socket Factory를 사용하여 연결합니다.
Spring Boot 애플리케이션에 다음 의존성이 필요합니다:
implementation 'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.13.1'gcloud auth application-default logingcloud services enable compute.googleapis.com sqladmin.googleapis.com storage.googleapis.com- 방화벽 규칙 확인:
gcloud compute firewall-rules list - 인스턴스 상태 확인:
gcloud compute instances list
# 로그 확인
sudo journalctl -u dorumdorum -n 100
# 환경변수 확인
sudo systemctl show dorumdorum | grep Environment- 프리티어 활용: e2-micro, db-f1-micro는 프리티어 범위 내
- 리전 선택: asia-northeast3 (서울) 사용으로 지연 시간 최소화
- 스토리지: 필요한 만큼만 할당 (20GB)
- SSH 접근 제한:
ssh_cidr변수를 특정 IP로 제한 - 데이터베이스 비밀번호: 강력한 비밀번호 사용
- terraform.tfvars:
.gitignore에 포함되어 있어 Git에 커밋되지 않음 - 서비스 계정: 최소 권한 원칙 적용