클라우드
stg, 5만 명 부하 테스트 환경
dev에서 확인한 한계와 스펙을 입력으로, 비용을 따져 AWS에 다시 설계한 부하 테스트 환경. Terraform으로 EKS 노드 7대(app 4대, booking 2대, 관측 1대)를 AZ 3개에 구성. 서비스는 ALB로 인터넷 공개(443), EKS API와 Grafana는 집 공인 IP만 허용.
클라우드 구조
설계 결정
온프레미스 대비
| 항목 | 선택 | 이유 |
|---|---|---|
| 입구 | MetalLB와 Traefik, cert-manager에서 ALB ACM으로 | MetalLB는 VPC에서 동작하지 않고, ALB가 TLS까지 종료해 cert-manager가 필요 없음 |
| 쿠버네티스 | k3s(VM 3대 직접 설치)에서 EKS 관리형으로 | k3s는 노드가 컨트롤 플레인까지 실행해 파드용 메모리가 줄어듦. EKS는 컨트롤 플레인을 AWS가 맡음 |
| 스토리지 | 정적 PV에서 EBS CSI 드라이버와 gp3 동적 생성으로 | PVC마다 볼륨이 자동 생성됨. 대신 볼륨은 생성된 AZ에서만 연결 |
| MySQL과 Redis | 파드에서 RDS Multi-AZ와 ElastiCache 복제본 1로 | MySQL은 prd에서 쓸 관리형으로 측정. 둘 다 AZ 장애 시 AWS가 자동 전환 |
| Kafka와 관측 | 클러스터 안 유지 | MSK는 하루 약 $3.6이 추가되고, 관측은 dev와 같은 차트로 구성 |
stg에서 정한 것
| 항목 | 선택 | 이유 |
|---|---|---|
| 노드 배치 | AZ 3개에 app 4대, booking 2대(AZ별 taint), 관측 1대(AZ 고정) | Kafka 브로커를 AZ마다 1대 두어 AZ 장애에도 과반 유지. booking은 JVM 컴파일이 브로커 CPU를 점유해 분리 |
| 노드 타입과 수 | m5.xlarge 고정. t 계열과 오토스케일은 쓰지 않음 | 크레딧이 고갈되거나 자동 증설이 있으면 먼저 막힌 곳을 구분할 수 없음 |
| 파드의 AWS 권한 | IRSA 역할 4개. EBS CSI, ALB Controller, 관측 S3, CloudWatch | 노드 역할에 주면 그 노드의 모든 파드가 가지게 됨. ServiceAccount 단위로 분리 |
| Redis 접근 | TLS와 AUTH | 인증이 없으면 6379에 닿는 파드 하나가 대기열과 좌석 락, 입장 인증을 읽고 씀. 보안 그룹은 출발지만 확인 |
트러블슈팅
| 증상 | 원인 | 조치 |
|---|---|---|
노드그룹이 CREATING에서 20분 넘게 멈춤. CloudTrail에 오류 없음 | 계정 vCPU 한도 32 소진. 원인은 ASG scaling activities에만 기록됨 | 한도를 64로 증설해 1분 23초 뒤 ACTIVE |
| 관측 노드 교체 후 Mimir ingester 95분 Pending으로 metric 저장 중단 | 노드그룹에 서브넷 3개를 지정해 새 노드가 2b에 생성됐는데, EBS 볼륨은 2c에만 연결 가능 | 관측 노드그룹을 볼륨이 있는 AZ로 고정 |
결과
- Terraform 자원 65개로 AWS EKS stg 구축: 첫 생성 30-40분
- stg에서 5만 명까지 부하 테스트 수행: 판정과 병목은 부하 테스트
- AWS 비용 US$198.96: stg 3일(2026-09-12에서 14)에 부하 발생기 포함. 크레딧 US$198.75 적용(크레딧 소진), 종료 후 AWS 자원 전부 삭제
- EC2 $130.42: EKS 노드 m5.xlarge 7대(app 4, booking 2, 관측 1)와 부하 발생기 c5.2xlarge 최대 4대
- RDS $26.54: MySQL db.m5.large Multi-AZ
- ElastiCache $21.39: Redis cache.m5.large 2대(주와 복제본)
- EKS 컨트롤 플레인 $5.54, EC2 기타 $5.26, ALB $4.19, VPC $4.02, 기타 $1.60
한계
- 가동 기간 3일: 구축과 부하 검증용으로만 띄운 뒤 정리. 장기 가동과 업그레이드, 장애 대응 경험이 없음
- 노드가 퍼블릭 서브넷: AZ별 NAT 비용을 피해 보안 그룹으로 제한. prd는 프라이빗 서브넷과 AZ별 NAT
- DB 보안 그룹은 노드 단위: 출구 NetworkPolicy가 없는 파드(관측 Job)도 RDS에 연결됨
- 허브가 집에 위치: 집 공인 IP가 바뀌면 EKS API 허용 목록을 다시 적용
- 관측 단일 AZ: 해당 AZ에 장애가 나면 관측이 중단
기술 스택
AWS(EKS, VPC, IAM/IRSA, RDS, ElastiCache, S3, ECR, ACM, ALB, Secrets Manager, CloudWatch), Terraform, Strimzi