내가 직접 규칙을 정한다
Source: Dev.to
Background
일반 업무에서는 회사에서 승인되지 않은 AWS 서비스를 사용할 기회가 거의 없습니다. 그래서 AWS Amplify 같은 서비스를 개인 프로젝트에 사용하는 것이 약간 스캔들을 일으키는 느낌이죠—마치 갈 수 없다고 들은 파티에 가기 위해 창문을 뛰어내리는 것과 같습니다. 기술을 어떻게 활용할지 스스로 규칙을 정하고, 예상치 못한 새로운 수준을 열어가는 경험이 재미있습니다.
Using AWS Amplify
Amplify는 빠른 배포라는 약속을 실현합니다. Copilot을 사용해 React 프런트엔드를 스캐폴딩한 뒤, Amplify가 즉시 앱을 배포했습니다. Amplify 애플리케이션을 브랜치를 자동 감지하고 자동 빌드하도록 설정했기 때문에, 컴파일이 성공하는 푸시마다 완전하게 처리되는 빌드·배포 파이프라인이 실행됩니다.
Choosing Not to Use Amplify’s Backend Features
Amplify를 함수, 스토리지, 데이터 옵션과 직접 통합하지 않기로 했습니다. 이러한 통합이 큰 장점이긴 하지만, 저는 더 많은 제어권을 원했습니다:
- API Gateway – Lambda를 노출시키기 위해 사용하며, 세밀한 검증과 오류 처리를 가능하게 합니다.
- Managed Authorizer – Bedrock 모델을 호출해 콘텐츠를 생성하고 S3에서 다운로드하는 Lambda를 보호합니다.
- Backend Language – TypeScript 대신 제가 익숙한 언어로 백엔드를 작성하고 싶습니다. React 프런트엔드만으로도 2026년에 충분히 학습할 수 있습니다.
Terraform Experiment
이전 글에서 개인 프로젝트에 대한 리소스 배포 방식을 물어봤었습니다. 이번에는 수동 배포 후 Terraform(TF)을 만들기로 했는데, 이는 제공자에 있는 Amplify 리소스에 익숙하지 않기 때문입니다. 콘솔 설정을 복제하는 데 필요한 Terraform을 빠르게 생성할 수 있는지 확인하고 싶었습니다.
일상 업무에서 가장 흔히 겪는 마찰점은 리소스를 프로비저닝하기 위해 Terraform을 작성하는 일입니다. 현재 AWS Terraform 제공자는 Amplify 앱의 모니터링이나 알림을 관리·커스터마이징할 리소스를 노출하지 않으므로, 해당 부분은 여전히 콘솔에서 처리해야 합니다.
Example Terraform Configuration
아래는 프런트엔드 앱을 배포하기 위해 Amplify를 구성한 Terraform 스니펫입니다:
resource "aws_amplify_app" "homeschool_app" {
name = "homeschool-app"
repository = "https://github.com/homeschool-app" # Replace with your GH repository
build_spec = <<-EOT
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
EOT
enable_auto_branch_creation = true
auto_branch_creation_patterns = [
"*",
"*/**",
]
auto_branch_creation_config {
enable_auto_build = true
}
environment_variables = {
# Cognito User Pool Domain (without the .auth.region.amazoncognito.com part)
VITE_COGNITO_DOMAIN = "your-cognito-domain"
# Cognito User Pool App Client ID
VITE_COGNITO_CLIENT_ID = "your-cognito-client-id"
# AWS Region (optional - defaults to us-east-1)
VITE_AWS_REGION = "us-east-1"
# Redirect URI after successful login (optional - defaults to current origin)
VITE_COGNITO_REDIRECT_URI = "http://localhost:3000" # Local development redirect
# For production: VITE_COGNITO_REDIRECT_URI = "https://your-domain.com"
# API Configuration
# Main API Gateway URL for backend endpoints
VITE_API_ENDPOINT = "https://your-api-gateway.execute-api.us-east-1.amazonaws.com/prod"
}
}