GCP VM 인스턴스에서 DB 및 서비스 이전 가이드

DevOps
GCP Compute Engine VM 인스턴스에서 운영 중인 DB(예: MySQL, PostgreSQL)와 그 위에서 실행되는 구현 서비스(웹 애플리케이션)를 다른 VM 인스턴스로 안전하고 효율적으로 이전하는 방법을 정리합니다.
Author

gabriel yang

Published

July 26, 2025

GCP VM 인스턴스에서 DB 및 서비스 이전 가이드

클라우드 환경에서 웹 서비스를 운영하다 보면, 다양한 이유로 기존 VM 인스턴스에서 사용하던 데이터베이스와 애플리케이션 서비스를 다른 VM 인스턴스로 옮겨야 할 때가 있습니다. 성능 개선, 아키텍처 변경, 리전 이동, 또는 단순한 유지보수 등의 이유가 될 수 있죠.

GCP Compute Engine VM 인스턴스에서 운영 중인 DB(예: MySQL, PostgreSQL)와 그 위에서 실행되는 구현 서비스(웹 애플리케이션)를 다른 VM 인스턴스로 안전하고 효율적으로 이전하는 방법을 정리합니다.

flowchart LR
    A[1단계: 계획 및 준비] --> B[2단계: DB 이전] --> C[3단계: 서비스 파일 이전] --> D[4단계: 테스트 및 DNS]

1단계: 마이그레이션 계획 수립 및 사전 준비

마이그레이션은 단순히 파일을 복사하는 작업이 아닙니다. 서비스 중단을 최소화하고 데이터 손실 없이 안전하게 이전하기 위한 철저한 계획이 필요합니다.

점검 및 파악

  • 현재 VM 인스턴스 환경: OS 종류 (Ubuntu, CentOS 등), 버전, CPU/메모리 사양, 디스크 크기 및 종류 (Standard, SSD Persistent Disk)를 확인합니다.
  • DB 종류 및 버전: MySQL, PostgreSQL, MongoDB 등 사용 중인 DB의 종류와 버전을 정확히 파악합니다.
  • 구현 서비스 스택: 웹 서버 (Apache, Nginx), 언어 런타임 (Node.js, Python, PHP, Java), 프레임워크 등을 파악합니다.
  • 네트워크 설정: 방화벽 규칙, VPC 네트워크 설정, 고정 IP 사용 여부 등을 확인합니다.
  • 데이터 용량: DB 데이터와 애플리케이션 코드 및 파일의 총 용량을 확인하여 이전 시간을 가늠합니다.

새로운 VM 인스턴스 생성:

  • 동일한 환경 구성: 기존 VM과 동일하거나 더 높은 사양, 그리고 동일한 OS 및 버전을 가진 새 VM 인스턴스를 생성하는 것이 가장 안전합니다.
  • 네트워크 설정: 새로운 VM에도 필요한 방화벽 규칙을 미리 설정하고, 고정 IP가 필요하다면 할당합니다.

서비스 중단 시간 고려:

  • 마이그레이션 중에는 서비스 중단이 발생할 수 있습니다. 가능한 한 서비스 중단 시간을 최소화할 수 있는 계획을 세우거나, 사용자에게 사전 공지합니다.

2단계: 데이터베이스(DB) 이전

데이터베이스는 서비스의 핵심이므로, 데이터 무결성을 최우선으로 고려해야 합니다. 여기서는 범용적인 DB 이전 방법을 설명하며, Cloud SQL과 같은 관리형 DB가 아닌 VM 내부에 설치된 DB를 기준으로 합니다.

DB 백업/복원

백업한 DB를 새로운 VM인스턴스에 복원합니다.

소스 VM에서 DB 서비스 정지 (선택 사항이나 권장)

데이터 일관성을 위해 백업 전에 DB 서비스를 잠시 중단하는 것이 가장 안전합니다. sudo systemctl stop mysql (MySQL 예시)

DB 덤프 생성

mysqldump (MySQL), pg_dump (PostgreSQL) 등의 도구를 사용하여 전체 데이터베이스를 SQL 파일로 덤프합니다.

MySQL 예시
mysqldump -u [DB_USER] -p[DB_PASSWORD] --all-databases > all_databases.sql
# 특정 DB만 백업 시: mysqldump -u [DB_USER] -p[DB_PASSWORD] [DB_NAME] > db_name.sql
PostgreSQL 예시
pg_dumpall -U [DB_USER] > all_databases.sql
# 특정 DB만 백업 시: pg_dump -U [DB_USER] [DB_NAME] > db_name.sql

덤프 파일 전송

생성된 SQL 덤프 파일을 GCP Cloud Storage 버킷에 업로드합니다.

gsutil cp all_databases.sql gs://your-gcs-bucket-name/

또는 scp 명령어를 사용하여 직접 새 VM으로 전송할 수도 있습니다.

gcloud compute scp --recurse all_databases.sql new-vm-instance-name:/tmp/

대상 VM에서 DB 설치 및 설정

새 VM에 동일한 버전의 DB를 설치하고, 필요한 초기 설정을 완료합니다.

덤프 파일 복원

새 VM에서 DB 서비스가 실행 중인 상태에서 덤프 파일을 복원합니다.

MySQL 예시
mysql -u [DB_USER] -p[DB_PASSWORD] < all_databases.sql
PostgreSQL 예시
psql -U [DB_USER] < all_databases.sql

DB 서비스 시작 (소스 VM)

백업이 완료되었다면, 소스 VM에서 중단했던 DB 서비스를 다시 시작합니다.

3단계: 구현 서비스(애플리케이션 코드 및 파일) 이전

애플리케이션 코드, 설정 파일, 업로드된 이미지 등 웹 서비스 운영에 필요한 모든 파일을 이전합니다.

소스 VM에서 서비스 정지 (권장)

  • 웹 서버(Apache, Nginx) 및 애플리케이션 서비스를 잠시 중단하여 파일 복사 중 변경 사항이 발생하지 않도록 합니다.
  • sudo systemctl stop apache2 또는 sudo systemctl stop nginx
  • sudo systemctl stop [your_app_service]

필수 파일 및 디렉토리 파악 및 압축

  • 웹 애플리케이션 코드: /var/www/html (Apache), /usr/share/nginx/html (Nginx) 또는 사용자 정의 경로
  • 설정 파일: 웹 서버 설정 파일 (예: /etc/apache2, /etc/nginx), 애플리케이션 설정 파일
  • 업로드된 파일: 사용자가 업로드한 이미지, 동영상 등 정적 파일
  • 로그 파일 (선택 사항): 이전이 필요한 경우
  • sudo tar -czvf web_app.tar.gz /var/www/html /etc/nginx /path/to/your/app/config /path/to/your/uploads

압축 파일 전송

  • Cloud Storage 버킷을 이용하거나 scp 명령어를 사용하여 새 VM으로 전송합니다.
  • gsutil cp web_app.tar.gz gs://your-gcs-bucket-name/
  • gcloud compute scp --recurse web_app.tar.gz new-vm-instance-name:/tmp/

대상 VM에서 환경 구성

  • 새 VM에 웹 서버 (Apache, Nginx), 언어 런타임 (Node.js, Python, PHP, Java), 필요한 라이브러리 등을 기존과 동일하게 설치하고 설정합니다.

압축 파일 복원

  • 전송된 압축 파일을 대상 VM의 적절한 위치에 해제합니다.
  • sudo tar -xzvf web_app.tar.gz -C / (루트에서 상대 경로로 압축 해제 시)
  • 권한 설정: 웹 서버 사용자(예: www-data, nginx)가 웹 애플리케이션 파일에 접근할 수 있도록 올바른 권한을 부여합니다.
  • sudo chown -R www-data:www-data /var/www/html (Apache 예시)

환경 변수 및 설정 파일 업데이트

  • 새 VM 환경에 맞게 DB 연결 정보, API 키, 경로 등 애플리케이션의 설정 파일을 업데이트합니다. (예: database.php, config.js, .env 파일 등)
  • 웹 서버 설정 파일도 새 VM의 경로 및 환경에 맞게 수정하고, 가상 호스트(Virtual Host) 등을 설정합니다.

4단계: 테스트 및 DNS 업데이트

마이그레이션의 마지막이자 가장 중요한 단계입니다.

대상 VM 내부 테스트:

  • 새 VM의 내부 IP 주소를 사용하여 웹 서비스가 정상적으로 동작하는지, DB 연결은 잘 되는지, 모든 기능이 제대로 작동하는지 철저히 테스트합니다.
  • 필요하다면 /etc/hosts 파일을 임시로 수정하여 도메인으로도 테스트할 수 있습니다.

방화벽 및 네트워크 설정 확인

  • 새 VM의 방화벽 규칙이 올바르게 설정되어 웹 서비스 포트 (80, 443) 등이 열려 있는지 확인합니다.

DNS 레코드 업데이트

  • 모든 테스트가 완료되고 서비스가 정상적으로 작동하는 것을 확인했다면, 도메인의 DNS 레코드(A 레코드 등)를 기존 VM의 IP 주소에서 새 VM의 IP 주소로 변경합니다.
  • 주의: DNS 전파에는 시간이 걸릴 수 있습니다 (최대 48시간). 이 기간 동안 일부 사용자는 기존 VM으로, 일부는 새 VM으로 연결될 수 있습니다.

최종 확인

  • DNS 업데이트 후, 다양한 네트워크 환경에서 접속하여 서비스가 새 VM으로 완전히 전환되었는지 최종 확인합니다.
  • 기존 VM은 일정 기간 관찰 후, 문제가 없다고 판단되면 종료하거나 삭제합니다.

카테고리 다른 글

Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Aug 2, 2025 docker-compose PostgreSQL DB 백업 및 복원 gabriel yang
Aug 1, 2025 GCP VM 인스턴스에 도메인 연결하기 gabriel yang
Jul 19, 2025 윈도우에 ngrok 설치하고 사용하기 gabriel yang
Jun 5, 2025 FastAPI에서 문서 접속을 환경설정으로 제한하는 방법 gabriel yang
May 5, 2025 포트를 점유하고 있는 서비스 제거하기 gabriel yang
Mar 20, 2025 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 gabriel yang
Feb 4, 2025 Windows 11에서 WSL 설치 및 Docker 연결하기 gabriel yang
Oct 7, 2024 Docker Compose로 Jenkins 설치 및 사용하기 gabriel yang
Aug 23, 2024 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 gabriel yang
Jul 24, 2024 GitHub Actions 시작하기 gabriel yang
Dec 31, 2023 우분투와 윈도우 파일 공유하기 (samba) gabriel yang
Dec 5, 2023 crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 gabriel yang
Nov 27, 2023 우분투 docker, docker-compse 설치 gabriel yang
Nov 26, 2023 AWS 호스팅 EC2 와 Lightsail의 차이 gabriel yang
Nov 20, 2023 wsl 이미지 저장 위치 변경 및 백업 gabriel yang
Nov 20, 2023 airflow postgresoperator 사용하기 gabriel yang
Nov 18, 2023 docker-compose로 airflow 설치하기 gabriel yang
Nov 15, 2023 wsl2에 docker 설치하기 gabriel yang
Nov 15, 2023 mkfifo를 이용한 IPC gabriel yang
Oct 9, 2023 Github Pull Request 템플릿 적용하기 gabriel yang
No matching items