개요
- GCP의 App Engine 서버리스 컴퓨팅 플랫폼을 사용하여 서버리스 아키텍처 구성
- Private Cloud SQL 서버를 생성하고 Serverless Backend와 연결
App Engine
- 서버리스 컴퓨팅 PaaS
- App Engine은 서버리스 플랫폼으로서 인프라 관리 없이 애플리케이션을 배포할 수 있는 PaaS(Platform as a Service)
- 서버리스 환경에서 서버 관리나 인프라 관리, 자동 스케일링, 보안 패치에 관여하지 않고 사용하는 만큼만 비용이 청구되는 방식
- 인기있는 개발 언어와 도구 지원 - Node.js, Java, Ruby, C#, Go, Python, or PHP

App Engine 생성하기
-
GCP Free trial로 시작
- 최초 가입 시 3개월간 $300 상당의 Credit 지원하여 Cloud 환경에서 기본적인 테스트나 학습을 하는데 충분하다

-
프로젝트 생성하기
- 가이드 문서 참고하여 진행
- 가이드에 따라 Cloud Build API를 활성화하고, Google Cloud CLI를 설치
- Node.js 기반으로 배포할 경우, 아래에 보이는 사진의 표준 환경 문서를 참고한다
NestJS 앱 배포하기
- 기본 NestJS 프로젝트를 생성 후, Node.js 가이드를 참고하여 기본 port를 8080으로 설정
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors();
await app.listen(process.env.PORT || 8080);
}
bootstrap();
- gcloud 배포를 진행하면 아래와 같은 에러(nest not found)가 발생한다

- nest cli의 문제로 보였으나 커뮤니티에서는 아래 package.json 파일의 서버 실행을 “nest” cli를 사용하지 않고 빌드된 디렉토리의 main.js를 node로 실행하도록 가이드하고 있다
"start": "node dist/main.js",
- 프로젝트 루트 디렉토리에 app.yaml 파일을 생성하여 서버 배포 정보를 입력
runtime: nodejs20
service: my-nest-app
- 위와 같이 설정 후, 배포를 진행
- gcloud app deploy (프로젝트 루트 디렉토리에서 동작)
- 서버리스 프로젝트 로그 확인
Next.js 앱 배포
- Next.js도 마찬가지로 기본 프로젝트 생성 후, 배포하게 되면 빌드 관련 에러가 발생함
- Error: ENOENT: no such file or directory, open '/workspace/.next/BUILD_ID
- GAE는 배포 시 기본적으로 gcp-build 스크립트 명령어가 실행되기 때문에 package.json 파일의 scripts 부분에 아래 JSON 키를 추가 등록한다
"gcp-build": "next build",
runtime: nodejs18
service: my-next-app
handlers:
- url: /.*
secure: always
script: auto
- handlers 옵션 설명
- url : 핸들러로 처리할 경로 설정 (/.* = 모든 URL 경로)
- secure : always인 경우 모든 요청이 HTTPS를 사용하도록 강제
- script : auto인 경우 GAE가 자동으로 실행할 스크립트를 감지 (package.json)
- 위와 같이 설정 후, 배포를 진행하고 브라우저에 접속하여 Next.js의 기본 화면을 확인
- gcloud app deploy (프로젝트 루트 디렉토리에서 동작)
- gcloud app browse (프로젝트 루트 디렉토리에서 동작)
Cloud SQL 서버 생성
- Backend 서버에서 사용할 Cloud DB를 생성 (이 문서에서는 PostgreSQL로 진행하였음)
- 테스트 환경에서 사용할 DB 서버를 생성할 것이기 때문에 최소 비용 옵션을 선택

- Region : asia-northeast3 (서울)
- 인스턴스 맞춤 설정 : 리소스 축소

- DB 서버는 내부 VPC IP 주소를 사용하도록 설정

- 생성 완료 후, Cloud SQL Studio를 통해 범용 DB 툴에서 사용하는 것처럼 schema/table 생성 가능

- App Engine과 private DB connection을 위한 설정 : https://cloud.google.com/sql/docs/postgres/connect-instance-app-engine
1. DB 클라이언트 인증서 생성
- Cloud SQL → 연결 → 보안 → 클라이언트 인증서 만들기 → 파일 다운로드
2. Backend 서버의 루트 디렉토리에 certs 폴더를 생성하고 인증서를 카피한 후, app.yaml에 아래와 같이 작성

3. 생성한 SQL 서버의 private IP 주소를 사용하여 Backend 서버와 DB서버 connection 정보 설정
Demo Web Application 배포 결과
마무리
- 서버리스 환경에서의 개발은 인프라 관리에 대해 고려할 필요 없이 오토스케일링을 지원하면서 Application 개발에 집중할 수 있는 장점이 있을 뿐만 아니라, 서버 기반 컴퓨팅과 비교하여 개발환경 수준에서는 비용을 크게 절약할 수 있음
- 간편한 대시보드를 지원하여 모니터링이 용이하며 에러로그나 트래픽을 쉽게 확인 가능
