본문 바로가기

development/Cloud

[AWS에서 GCP로 AI 서버 마이그레이션하기] - 1단계: 인프라 구축

멀티 클라우드 환경 구축이나 비용 최적화, GPU 리소스 확보 등의 이유로 기존 AWS 환경에서 GCP로 일부 워크로드를 마이그레이션하는 경우가 있습니다. 특히 AI/ML 워크로드의 경우 GPU 가용성과 가격 경쟁력 때문에 GCP를 고려하는 팀들이 많습니다. 이번 포스팅에서는 제가 무료 계정에서 테스트용 인프라 구축하고 기존 AWS 백엔드 서버와 통신하기 위해 방화벽을 설정한 과정을 살펴보겠습니다.

google 아이콘 출처: Icons8 (https://icons8.com)


마이그레이션 목표

참고로 추후 목표는 기존 AWS 환경의 백엔드 서버와 GCP의 새로운 AI 처리 서버 간 안전한 통신 구조를 만들고, GPU 인스턴스 배포를 위한 기반을 마련하는 것 입니다.


GCP 인프라 구축

VPC 네트워크 설계

먼저 격리된 네트워크 환경을 위해 커스텀 VPC를 생성했습니다:

VPC: example-ai-vpc
└── Subnet: example-ai-subnet (10.0.x.0/24, asia-northeast3)
    ├── Private Google Access: 비활성화 (Public 구성)
    └── MTU: 1460 (표준 설정)

서울 리전을 선택한 이유는 국내 서비스 특성상 낮은 지연시간이 중요하기 때문입니다.

나중에 서울 리전에 GPU 리소스가 부족하다고 하면 리전 변경할 예정입니다.
(AWS에서 g5.xlarge 타입 gpu가 서울에 부족하여, Scale out 상황에서 자동으로 인스턴스들이 terminating 상태가 되어버렸던 적이 있음..😨)

보안 설정

네트워크 보안은 방화벽 규칙으로 구성했습니다:

규칙 방향 소스 포트 용도
allow-ssh 인그레스 관리자 IP 22 SSH 관리
allow-internal 인그레스 VPC 내부 all 내부 통신
allow-api 인그레스 XXX.XXX.XX.XX/32 8080 백엔드 전용

특히 API 접근은 기존 AWS 백엔드 서버의 IP만 허용하도록 제한했습니다.


테스트 인스턴스 배포

GPU 인스턴스 배포 전 검증을 위해 무료 플랜으로 테스트 환경을 구축했습니다:

인스턴스: example-ai-server
├── 머신 타입: e2-medium (2 vCPU, 4GB RAM)
├── 운영체제: Debian GNU/Linux
├── 네트워크: example-ai-vpc
└── 네트워크 태그: ai-server

API 서버 구현

Python Flask를 사용해 간단한 테스트용 API 서버를 구현했습니다:

from flask import Flask, request, jsonify
from PIL import Image
import io
import base64

app = Flask(__name__)

@app.route('/health', methods=['GET'])
def health_check():
    return {"status": "healthy", "service": "image-processor"}

@app.route('/process', methods=['POST'])
def process_image():
    try:
        data = request.json
        image_data = data.get('image')
        
        # 실제로는 AI 모델 처리 로직
        return {"status": "success", "message": "Image processed"}
    except Exception as e:
        return {"status": "error", "message": str(e)}

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

가상환경을 사용해 패키지 의존성을 관리하고, nohup으로 백그라운드에서 실행했습니다.


통신 테스트

AWS 백엔드 서버에서 GCP AI 서버로의 API 호출을 테스트했습니다:

헬스 체크

$ curl http://XXX.XXX.XX.XXX:8080/health
{"service":"image-processor","status":"healthy"}

이미지 처리 API

$ curl -X POST http://XXX.XXX.XX.XXX:8080/process \
  -H "Content-Type: application/json" \
  -d '{"image": "base64_encoded_image_data"}'
{"message":"Image processed","status":"success"}

GCP 서버 로그에서도 정상적인 요청 처리를 확인할 수 있었습니다.

XXX.XXX.XX.XX - - [17/Aug/2025 05:49:21] "GET /health HTTP/1.1" 200 -
XXX.XXX.XX.XX - - [17/Aug/2025 05:58:48] "POST /process HTTP/1.1" 200 -

결과 및 다음 단계

성과

  1. GCP VPC 네트워크 및 보안 인프라 구축 완료
  2. AWS-GCP 간 안전한 API 통신 채널 확립
  3. 확장 가능한 아키텍처 기반 마련

다음 계획

  1. 유료 계정 전환: GPU 사용을 위한 계정 업그레이드 (무료 계정에서는 cpu 인스턴스만 추가할 수 있음)
  2. GPU 인스턴스: NVIDIA Tesla T4 기반 인스턴스 배포
  3. AI 모델 배포: Stable Diffusion 파이프라인 구축
  4. 성능 최적화: 모델 로딩 및 추론 속도 개선

팁 및 주의사항

GCP 특징

  1. AWS와 달리 서브넷이 리전 레벨에서 생성됨
  2. 방화벽 규칙은 태그 기반으로 세밀한 제어 가능
  3. 무료 플랜도 기본 테스트에는 충분함

보안 고려사항

  1. 소스 IP 제한으로 API 엔드포인트 보호
  2. 네트워크 태그를 활용한 리소스별 보안 정책 적용
  3. SSH 접근도 필요한 IP만 허용

이번 작업을 통해 기존 AWS에 구축된 백엔드 서버와 GCP 서버의 통신 테스트를 완료하였습니다.

다음 포스팅에서는 실제 GPU 인스턴스 배포와 AI 모델 구축 과정을 다뤄보겠습니다.