AWS 아키텍처
⚠︎ 지난 판 — 2026-07-31. 현재 판은 여기다. 이 문서는 그때의 기록이고 고치지 않는다.
ⓘ 이 판은 사이트 버저닝을 보이려고 채운 자리다. 그날 실제로 쓰인 문서가 아니고, 앞뒤 판에서 끌어와 재구성했다. 지우거나 진짜 기록으로 갈아끼워도 된다.
갱신일 2026-07-31 · 기준:
heymoa-infraTerraform + EC2 실측 Terraform이 만드는 것과 사람이 손으로 하는 것을 갈라 적는다.
확인한 사실
계정 110080810555, 리전 ap-northeast-2. terraform/environments/prod가 소유하는 범위다.
| 리소스 | 값 |
|---|---|
| VPC · subnet | 10.30.0.0/16, public 1 + private data 2(AZ 2개). NAT Gateway 없음 |
| EC2 | t4g.small ARM64 1대, EIP 고정, lifecycle.ignore_changes = [ami, user_data] |
| 인바운드 | 80·443만. SSH 22도 8080도 열지 않는다 — 접속은 SSM |
user_data | SSM Agent 설치·기동뿐. Docker·Git·Nginx·Certbot은 접속 후 사람이 설치 |
| RDS | heymoa-prod-postgres, db.t4g.small, Single-AZ, 백업 7일, publicly_accessible=false |
| RDS 접근 | EC2 보안그룹에서 오는 5432만. IP CIDR 허용 없음 |
| IAM | EC2 Role에 AmazonSSMManagedInstanceCore + 그 Secret 하나의 GetSecretValue만 |
| state | S3 heymoa-prod-terraform-state-110080810555, use_lockfile = true |
쓰지 않는 것도 코드가 말한다 — ALB·ACM·NAT Gateway·SSH key가 없고, module/tfvars 분리도 하지 않았다.
2026-07-26 판에서 미확인이던 것 중 풀린 것
| 무엇 | 이 판에서 확인한 것 |
|---|---|
| heymoa-ai가 어디에 뜨나 | 같은 EC2에 compose로 함께 뜬다. 별도 인스턴스가 아니다 |
heymoa_ai database | RDS가 만드는 것은 heymoa 하나. heymoa_ai는 접속해서 손으로 만들고 CREATE EXTENSION vector도 거기서 돈다 |
| heymoa-web 호스팅 | Vercel. 저장소에 vercel.json이 없고 프로젝트 설정에만 있다 |
배포와 롤백
dev push에서 GitHub Actions가 OIDC로 역할을 맡아 SSM으로 배포한다 (ADR 0004).
server에는 롤백 경로가 없다. deploy.sh에 이전 이미지 캡처가 없고 ddl-auto: validate라, 파괴적 마이그레이션 뒤에 옛 JAR을 올리면 컨테이너가 아예 안 뜬다. 앞으로만 고칠 수 있다.
ai는 다르다. 마이그레이션을 컨테이너 교체보다 먼저 돌리고 헬스체크가 실패하면 앱만 되돌린다.
설계 전제
- 한 대를 손으로 굴린다. EC2 안의 Git·Docker·Nginx·Certbot은 Terraform 밖이고,
ignore_changes가 AMI 갱신으로 인스턴스가 교체되는 것을 막는다. - DB 비밀번호를 코드가 갖지 않는다. RDS가 Secret을 만들고 회전하며, EC2는 IAM Role로 읽는다.
- 공개 진입은 Cloudflare A 레코드 → EIP → EC2의 Nginx 하나뿐이다. 앱 컨테이너는
127.0.0.1에만 바인딩한다. - MVP 비용 상한을 낮게 잡았다. 월 약 $62.
미확인
| 무엇 | 지금 아는 것 |
|---|---|
| RDS 삭제 보호 | deletion_protection = false, skip_final_snapshot = true. 실사용자 데이터가 생기면 둘 다 뒤집기로만 적혀 있다 |
| 관측 스택 | infra 레포에 Prometheus·Loki·Grafana compose가 있으나 이전 서버 템플릿이다. 지금 붙어 있는지 확인 못 했다 |
| Langfuse 운영 키 | 넣으면 전사 원문이 외부로 나간다. .env.prod를 봐야 한다 |