AWS Amplify
Source: Dev.to
개요
이전 글에서 언급한 AWS Amplify에 대해 좀 더 자세히 살펴보고, 프론트엔드 개발을 진행하면서 배운 점을 공유하고자 합니다. Amplify는 빠른 배포라는 약속을 실현합니다: Copilot을 사용해 React 앱을 스캐폴딩한 만큼 빠르게, Amplify가 즉시 빌드하고 배포합니다. 자동 브랜치 감지와 자동 빌드가 활성화되어 있으면, 컴파일이 성공하는 모든 푸시가 완전하게 처리되는 빌드·배포 파이프라인을 트리거합니다.
Amplify 백엔드 기능을 통합하지 않기로 선택한 이유
저는 Amplify를 함수, 스토리지, 데이터 서비스와 직접 연결하는 것을 의도적으로 피했습니다. Amplify가 많은 AWS 리소스를 프로비저닝하고 관리해줄 수 있지만, 저는 보다 세밀한 제어를 원했습니다. 그래서 Lambda 앞에 API Gateway를 두어 맞춤형 검증과 오류 처리를 할 수 있게 했습니다. 관리형 인증자는 Bedrock 모델을 호출하고 S3에서 객체를 가져오는 Lambda를 보호합니다. 또한 백엔드를 TypeScript로 작성하고 싶지 않았습니다—2026년 현재 React만 배우는 것으로 충분하고, 백엔드에는 제가 더 익숙한 언어를 사용할 계획입니다.
Terraform vs. 수동 배포
이전 글에서 개인 프로젝트 리소스를 어떻게 배포하는지 물어본 적이 있습니다. 이번 글에서는 제가 콘솔에서 수동으로 설정하던 방식을 Terraform으로 전환한 이유를 설명합니다. 비록 Amplify 리소스에 대한 Terraform 제공자가 아직 제한적이라 익숙하지 않았지만, 전환 과정에서 공통적인 마찰 지점을 발견했습니다: 현재 AWS Terraform 제공자는 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"
# Example: VITE_COGNITO_CLIENT_ID=1a2b3c4d5e6f7g8h9i0j1k2l3m
# 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"
# For production: VITE_COGNITO_REDIRECT_URI=https://your-domain.com
# API Configuration
# Main API Gateway URL for general endpoints
VITE_API_ENDPOINT = "https://your-api-gateway.execute-api.us-east-1.amazonaws.com/prod"
}
}
결론
Amplify는 프론트엔드 배포를 매우 간편하게 만들어 주지만, 백엔드 서비스에 대해 더 엄격한 제어가 필요할 때는 API Gateway, Lambda, Terraform을 결합하는 것이 현재 완전 관리형 Amplify 스택이 제공하지 못하는 유연성과 가시성을 제공합니다. 이 접근 방식은 Terraform 제공자에 존재하는 격차를 드러내어, 향후 프로젝트에서는 수동 처리가 필요할 수 있음을 기억해 두어야 합니다.