서론
개인 개발로 여러 웹 애플리케이션을 만들 때, 매번 인프라를 구축하는 번거로움이 발생합니다.
그래서, 애플리케이션의 템플릿과 클라우드 리소스를 자동으로 생성하는 도구인 "AppFactory"를 만들었습니다.
AppFactory란 무엇인가
AppFactory는 Google Cloud와 Neon을 이용하여 웹 애플리케이션 개발 환경을 자동 생성해 주는 도구입니다.
주로 다음 작업을 수행합니다.
- Node.js 22의 HTTP 서버를 포함하는 애플리케이션 템플릿 생성
- Neon 프로젝트 생성
- GCP Secret Manager에 데이터베이스 연결 정보 등록
- Cloud Run용 서비스 계정(Service Account) 생성
- Cloud Build와 Cloud Run을 이용한 배포 환경 제공
GCP 프로젝트와 Artifact Registry는 여러 애플리케이션에서 공유하고, Cloud Run 서비스와 Neon 프로젝트는 애플리케이션별로 분리됩니다.
생성된 애플리케이션은 독립적인 Git 리포지토리로 관리할 수 있습니다.
전제 조건
다음 환경을 준비합니다.
- Linux 또는 WSL
- Python 3.9 이상
- Bash 4 이상, GNU Make, Git, jq 등
- Google Cloud CLI
- Neon CLI 5.x
- 기존의 GCP 프로젝트 (결제 설정 완료)
- OpenAI API 키, Google Maps API 키
필요한 GCP 운영 권한도 사전에 설정해 둡니다.
사용 방법
git clone https://github.com/Kotakageyama/AppFactory.git
cd AppFactory
Google Cloud와 Neon에 로그인합니다.
gcloud auth login
neon login
사용할 GCP 프로젝트를 지정합니다.
export GCP_PROJECT=your-project-id
export GCP_REGION=asia-northeast1
export ARTIFACT_REPOSITORY=apps
...
"make setup"을 통해 필요한 Google Cloud API의 활성화와 Artifact Registry 생성을 수행합니다.
AppFactory에서는 OpenAI와 Google Maps의 API 키를 공통 Secret Manager 시크릿(Secret)으로 관리합니다.
다음은 OpenAI API 키 등록 예시입니다.
secret=OPENAI_API_KEY
gcloud secrets create "$secret" \
--replication-policy=automatic \
...
"GOOGLE_MAPS_API_KEY"도 마찬가지로 등록합니다. 기존 시크릿이 있는 경우 생성 명령어는 생략합니다.
설정 후, 환경을 확인합니다.
다음 명령어로 애플리케이션을 만듭니다.
make create APP=sampleapp
이로 인해 상위 디렉토리에 "sampleapp"이 생성됩니다.
동시에, Neon 프로젝트, 데이터베이스 연결용 시크릿, Cloud Run용 서비스 계정이 생성됩니다.
생성 위치는 "DIR"을 통해 변경 가능합니다.
make create APP=sampleapp DIR=/path/to/sampleapp
Neon 조직(Organization)이 여러 개 존재하는 경우, "NEON_ORG_ID"를 지정합니다.
생성된 애플리케이션으로 이동합니다.
cd ../sampleapp
make doctor
make deploy
"make deploy"는 Cloud Build로 컨테이너 이미지를 구축하고, Artifact Registry에 저장한 후 Cloud Run에 배포를 수행합니다.
배포 완료 후 Cloud Run의 URL이 표시됩니다.
생성된 "config/app.yaml"에서 각종 설정을 관리합니다.
name: sampleapp
gcp:
project: your-project-id
...
CPU, 메모리, 인스턴스 수, 공개 설정 등을 변경할 수 있습니다.
기본적으로 Cloud Run에 대한 미인증 접근이 허용됩니다. 비공개로 하려면 "allow_unauthenticated: false"를 지정해야 합니다.
생성된 리포지토리에는 운영용 Makefile이 준비되어 있습니다.
# 상태 확인
make status
# 로그 확인
...
"make destroy"로는 Cloud Run 서비스만 삭제됩니다. Neon 프로젝트나 Secret Manager의 시크릿 등은 별도로 삭제가 필요합니다.
보충 및 주의사항
- AppFactory는 애플리케이션 생성을 위한 도구이며, 생성된 앱을 일괄 관리하지 않습니다.
- 생성되는 Node.js 서버는 최소 구성입니다. 실제 애플리케이션 처리나 데이터베이스 작업은 별도로 구현해야 합니다.
- 생성 과정이 중간에 실패한 경우에는 동일한 인수로 "make create"를 재실행하여 복구할 수 있습니다.
- Cloud Run, Cloud Build, Secret Manager, Neon 등의 이용에는 비용이 발생할 수 있습니다.
맺음말
모두가 블로그 글을 AI에게 읽히게 할 것 같아서 AI에게 작성하게 했습니다.
저는 개인적으로 이걸로 서비스를 대량으로 만들었다 지우기를 반복하고 있습니다. 여러분도 꼭 개인 개발을 해보세요!!
Discussion