
Google Cloud Platform의 Compute Engine과 AWS의 EC2 둘 다 클라우드 컴퓨팅 서비스를 제공하는 대표적인 플랫폼임. 두 서비스의 장단점을 표로 정리하면 아래와 같을듯.
| 항목 | AWS EC2 | GCP Compute Engine |
|---|---|---|
| 시장 점유율 | 매우 높음 | 비교적 낮음 |
| 가격 | 복잡하고 다소 비쌀 수 있음 | 단순하고 투명, 일부 서비스 저렴 |
| 서비스 다양성 | 매우 다양 | 다소 제한적 |
| 사용자 친화성 | 복잡할 수 있음 | 직관적이고 사용하기 쉬움 |
| AI/ML 통합 | 강력하지만 설정 복잡 | Google AI 및 ML 서비스와 쉽게 통합 |
| 네트워크 성능 | 우수하지만 위치에 따라 다를 수 있음 | Google 글로벌 네트워크로 매우 우수 |
| 지원 및 커뮤니티 | 방대한 커뮤니티와 많은 리소스 | 상대적으로 적음 |
AWS EC2는 사용해본 경험도 있지만, 새로운 서비스를 이용해보고싶기도 했고, 무엇보다 Gemini Competition을 준비하면서 최대한 구글이 제공하는 서비스를 최대한 활용하자는 우리 팀의 목표에 맞게 GCP의 Compute Engine을 사용하기로 했다.
lingobell-server생각보다 너무 쉽게 VM 인스턴스를 생성했음. AWS EC2도 어렵지 않았지만, Compute Engine은 정말 더 쉬웠던 듯.

GCP의 free tier 인스턴스인 f1-micro 머신은 미국 지역에서만 무료로 제공된다고 함. 서울지역으로 인스턴스 생성하니까 실패가 떴음. 미국 지역을 서버 로케이션으로 설정하면 시간이 더 오래걸릴 것이기때문에 비용이 나가더라도, 서울 지역으로 설정하고 e2-micro 머신 유형을 선택함. 예상비용은 월별 $8이라고 나옴.
참고로 GCP는 첫 서비스 이용자에게 90일안에 $300 비용이 나가는 부분을 지원해줌.
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
gcloud compute ssh 생성한 vm 이름 --zone asia-northeast3-a
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip mysql-server
python3 -m pip install --upgrade pip setuptools
sudo mysql_secure_installation
루트 비밀번호 설정, 익명 사용자 제거, 원격 루트 로그인 비활성화 등 수행.
2. 터미널에서 SQL 명령어 실행 (사용자 생성 및 권한 설정):
CREATE DATABASE lingobell;
CREATE USER '사용자 아이디'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON lingobell.* TO 'your_user'@'%';
FLUSH PRIVILEGES;
git clone <레포지토리 url>
cd LingoBell-BackEnd
nano .env
로컬 환경에서 깃에 푸시할때 env파일을 gitignore했기때문에 가상환경에서 깃을 클론 받을때는 env 파일이 없는 상태. 그래서 추가로 파일을 생성해주고 환경 변수를 추가적으로 설정해주어야 함.
추가로, 가상 환경에 .env 파일을 생성해주고 DB url을 잘 작성해주었음에도 불구하고 DATABASE_URL 을 불러오지못했음. print()로 출력해봐도 None이 떴음. 이것저것 한참을 확인하던 중 팀장님이 디버깅을 도와주셨고, 아래 이미지와 같이 호출하는 위치가 문제였음을 발견함. env를 로드하는 코드가 다른 모든 import 문보다 위에 위치시켰더니 정상적으로 DB url이 불러와졌음.
왜 그런지 이유를 찾아보니 환경 변수를 필요한 모듈들이 올바르게 불러올 수 있게 보장하기 위함이라고 함.
<문제가 있던 코드> 
<load_dotenv()를 최상위로 위치시킨 뒤 문제가 해결된 코드>

DATABASE_URL=mysql+mysqlconnector://아이디:비밀번호@호스트이름:포트번호/디비이름
pip3 install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
성공적으로 Compute Engine을 통해서 가상머신 인스턴스에 백엔드를 실행시킴.

AWS의 RDS와 유사한 서비스로 Cloud SQL이 있음. MySQL, PostgreSQL, SQL Server등 관계형 DB를 쉽게 설정하고 관리할 수 있다고 함.

Cloud SQL의 에디션:
Enterprise가 일반적으로 충분하다고 함. 대규모 사용자 대상이 아니기 때문에 비용 효율적인 Enterprise를 선택함.
인스턴스 이름과 비밀번호를 설정해줬고, MySQL 버전은 8.0으로 세팅함. VM 인스턴스 생성할때와 동일하게 지역은 'asia-northeast3' (서울)을 선택해서 지연시간을 최소화할 수 있게 함.


브라우저에서 인증을 완료한 뒤, 인증 코드를 다시 터미널에 입력. 필요한 접근 권한을 설정할 수 있음.

GCP 프로젝트와 Cloud SQL 인스턴스에 접근
SSH를 통해 VM에 접속:
nano 편집기로 .env 파일 열기:
nano .env
DATABASE_URL=mysql+mysqlconnector://유저아이디:비밀번호@외부IP주소/디비 이름
로컬 DB를 연결해두었었기때문에 Cloud SQL과 연결한 VM 외부 IP주소로 바꿔주었다.
4. FastAPI 애플리케이션 실행:
애플리케이션을 실행시킴.
uvicorn app.main:app --host 0.0.0.0 --port --reload