다크 모드
AWS 아키텍처
전체 아키텍처 다이어그램
네트워킹
VPC
| 항목 | 구성 |
|---|---|
| CIDR | 10.0.0.0/16 |
| DNS Hostnames | 활성화 |
| DNS Support | 활성화 |
Subnet 레이아웃
모든 환경에서 동일한 서브넷 구조를 사용합니다.
| 서브넷 | CIDR | 가용 영역 | 용도 |
|---|---|---|---|
public-subnet-2a | 10.0.0.0/20 | ap-northeast-2a | ALB, NAT Gateway |
public-subnet-2b | 10.0.16.0/20 | ap-northeast-2b | ALB (Multi-AZ) |
private-subnet-2a | 10.0.128.0/20 | ap-northeast-2a | ECS, RDS, Redis |
private-subnet-2b | 10.0.144.0/20 | ap-northeast-2b | ECS, RDS (Multi-AZ) |
NAT Gateway
Private Subnet의 ECS 컨테이너가 인터넷에 접근하기 위한 NAT Gateway가 public-subnet-2a에 배치됩니다. Elastic IP가 할당되어 고정 IP로 아웃바운드 트래픽을 처리합니다.
VPC Endpoints
SSM Session Manager를 위한 Interface 타입 VPC Endpoint가 Private Subnet에 구성되어 있습니다. 전용 Security Group(truloop-vpc-endpoints-{env})이 VPC CIDR에서의 HTTPS 트래픽을 허용합니다.
ssm— AWS Systems Manager API 호출ssmmessages— SSM 세션 데이터 채널ec2messages— SSM Agent 하트비트
Security Group
ALB Security Group은 truloop-infra에서 관리하며, ECS/RDS/Redis Security Group은 truloop-core의 서비스별 인프라에서 관리합니다.
ALB Security Group
| 방향 | 포트 | 프로토콜 | 소스 | 설명 |
|---|---|---|---|---|
| Ingress | 80 | TCP | 0.0.0.0/0 | HTTP |
| Ingress | 443 | TCP | 0.0.0.0/0 | HTTPS |
| Egress | 전체 | 전체 | 0.0.0.0/0 | Health Check |
ALB (Application Load Balancer)
ALB는 HTTPS 트래픽을 각 ECS 서비스로 라우팅합니다.
Listener 구성
| Listener | 포트 | 동작 |
|---|---|---|
| HTTP | 80 | 기본: 404 응답 (서비스별 규칙으로 리다이렉트) |
| HTTPS | 443 | ACM 인증서 사용, 기본: 404 응답 |
정보
Target Group과 Listener Rule은 각 서비스 레포의 인프라 코드에서 관리합니다. truloop-infra는 ALB와 Listener만 생성합니다. 예외적으로 Grafana Target Group(Dev 환경)만 truloop-infra에서 관리합니다.
ECS Cluster
ECS Cluster는 Fargate 기반으로 운영되며, AWS Cloud Map을 통한 Service Discovery를 지원합니다.
Service Connect
ECS Service Connect가 활성화되어 있으며, Private DNS Namespace(truloop-{env}.local)를 통해 서비스 간 통신이 가능합니다.
서비스 목록
| 서비스 | 포트 | 용도 |
|---|---|---|
truloop-core-dev | 8080 | 메인 API 서버 (Ktor) |
chatter-dev | 8080 | AI 비서 서비스 |
truloop-ai-server-fastapi-dev | 8080 | AI 서버 (FastAPI) |
truloop-ai-server-celery-worker-dev | - | 비동기 작업 워커 |
truloop-media-service-dev | 8080 | 미디어 처리 서비스 (Go) |
prometheus | 9090 | 메트릭 수집 |
grafana | 3000 | 대시보드 |
주의
Task Definition은 각 서비스의 CI/CD (GitHub Actions)에서 관리합니다. Pulumi는 ignoreChanges: ["taskDefinition"]으로 이를 추적하지 않습니다.
데이터 저장소
Aurora PostgreSQL
- Dev: 단일 인스턴스 (
truloop-dev) - Prod: 2개 인스턴스 Writer + Reader (
truloop-prod)
ElastiCache Redis
- Dev: 단일 노드 (
truloop-dev-redis-single) - Prod: 복제 구성 (
truloop-prod-redis)
정보
RDS와 ElastiCache의 세부 설정(인스턴스 타입, 파라미터 등)은 truloop-core의 서비스별 인프라에서 관리합니다.
S3 스토리지
| 버킷 | Dev | Prod | 용도 |
|---|---|---|---|
| Main | truloop-dev-bucket | truloop-prod-bucket | 범용 스토리지 |
| Assets | truloop-assets-dev | truloop-assets-prod | 정적 에셋 (CloudFront 연동) |
| Configs | truloop-configs-dev | - | 설정 파일 |
| Images | truloop-images-dev | - | 이미지 저장 |
정보
userContents 버킷은 truloop-media-service 레포에서 별도로 관리합니다.
CDN (CloudFront)
Assets CDN은 S3 버킷의 정적 에셋을 CloudFront를 통해 배포합니다.
| 항목 | Dev | Prod |
|---|---|---|
| 도메인 | assets-dev.truloop.app | assets.truloop.app |
| Origin | S3 (OAC 인증) | S3 (OAC 인증) |
| Price Class | PriceClass_200 | PriceClass_200 |
| TLS | TLSv1.2_2021 | TLSv1.2_2021 |
CloudFront는 Origin Access Control(OAC)을 통해 S3 버킷에 접근하며, ACM 인증서는 us-east-1 리전에 별도 생성됩니다.
SSM Bastion
RDS 데이터베이스에 직접 접근하기 위해 EC2 기반 SSM Bastion을 사용합니다. SSH 키 없이 AWS SSM Session Manager의 Port Forwarding을 통해 안전하게 접속합니다.
| 항목 | 구성 |
|---|---|
| 인스턴스 타입 | t4g.nano (ARM, ~$3/월) |
| AMI | Amazon Linux 2023 (ARM64) |
| 볼륨 | 8GB gp3, 암호화 |
| 서브넷 | Private Subnet 2a |
| IAM | AmazonSSMManagedInstanceCore 정책 |
| IMDSv2 | 필수 (보안 강화) |
정보
ECS Fargate의 execute-command agent는 AWS-StartPortForwardingSessionToRemoteHost document를 완전히 지원하지 않으므로, EC2 기반 Bastion을 사용합니다.
bash
# SSM Port Forwarding으로 RDS 접근
aws ssm start-session \
--target <bastion-instance-id> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["<rds-endpoint>"],"portNumber":["5432"],"localPortNumber":["5432"]}'변경 이력
| 날짜 | 변경 내용 |
|---|---|
| 2026-03-10 | 소스 코드 검증: 아키텍처 다이어그램에 media-service 추가, ECS 서비스 목록에 media-service 추가, SSM Bastion 인스턴스 상세 추가, VPC Endpoints Security Group 설명 추가, Grafana Target Group 관리 주체 명시 |