๊ณ ๊ฐ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ด๊ฐ์ธํ ํต์ ์๋น์ค ๋ถ์ ๋ฐ ์ถ์ฒ ํ๋ซํผ
Holliverse๋ ๋ถ์ฐ๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํตํฉํด, ์ฌ์ฉ์์๊ฒ๋ ์ต์ ์ ์ํ์ ์ถ์ฒํ๊ณ
์ด์์์๊ฒ๋ ์ ๊ตํ ๋น์ฆ๋์ค ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ CRM / CDP(Customer Data Platform) ์งํฅ ์๋น์ค์ ๋๋ค.
์ด ์ ์ฅ์๋ Holliverse์ AWS ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค์ Infra Repository ์ ๋๋ค.
์ฃผ์ ๊ด๋ฆฌ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- VPC, Subnet, Route Table, NAT Gateway
- Application Load Balancer (Customer / Admin)
- ECS Cluster / ECS Service / Task Definition
- RDS PostgreSQL
- MSK / MSK Connect
- Monitoring EC2 (Grafana, Prometheus, pg_exporter)
- Route53 / ACM / CloudFront / DNS
- GitHub Actions ๊ธฐ๋ฐ CI/CD/CT ์ํฌํ๋ก
- ์ ํด ์๊ฐ๋ ๋ฆฌ์์ค ์ค์ง/์ฌ๊ธฐ๋ ์๋ํ
์ฆ, ์๋น์ค ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํ๋ค๋ฉด,
์ด ์ ์ฅ์๋ ๋ฐฐํฌ ๊ฒฝ๋ก, ๋คํธ์ํฌ ๊ฒฝ๊ณ, ์ด์ ์ ์ฑ
, ๊ณตํต ์ธํ๋ผ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
2 ALB ยท 2 AZ ยท 4 Subnets ยท 9 Security Groups
์๋น์ค ๋ฐฐํฌ 50.9% ๋จ์ถ ยท ๋ชจ๋ํฐ๋ง ๋ฐ์ 81.6% ๋จ์ถ
๊ณ ๊ฐ/๊ด๋ฆฌ์ ํธ๋ํฝ์ ๋คํธ์ํฌ ๋ ๋ฒจ์์ ๋จผ์ ๋ถ๋ฆฌํ๊ณ ,
์ค์ Infra Repository๋ฅผ ํตํด ๋ฐฐํฌ ์ ์ฑ ๊ณผ ์ด์ ํ๋ฆ์ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
| ํญ๋ชฉ | ์์น | ์๋ฏธ |
|---|---|---|
| ๋คํธ์ํฌ ์ง์ ์ | 2 ALB | Customer / Admin ํธ๋ํฝ์ ์ง์ ์ ๋ถํฐ ๋ถ๋ฆฌ |
| ๊ฐ์ฉ ์์ญ | 2 AZ | AZ ๋จ์ ๋ถ์ฐ ๊ตฌ์กฐ ํ๋ณด |
| ์๋ธ๋ท ๊ตฌ์กฐ | 4 Subnets | Public 2 / Private 2 ๋ถ๋ฆฌ |
| ๋ณด์ ๊ฒฝ๊ณ | 9 Security Groups | ๋ฆฌ์์ค ์ญํ ๋ณ ์ต์ ๊ถํ ํต์ ์ ์ด |
| ์๋น์ค ๋ฐฐํฌ ์๊ฐ | 449.1์ด โ 220.4์ด | ECS service rollout ์ ํ์ผ๋ก 50.9% ๋จ์ถ |
| ๋ชจ๋ํฐ๋ง ๋ฐ์ ์๊ฐ | 449.1์ด โ 82.7์ด | MonitoringStack ๋ถ๋ฆฌ๋ก 81.6% ๋จ์ถ |
| ์๋น์ค ๋ฐฐํฌ ์ฒ๋ฆฌ๋ | 8.0 โ 16.3ํ/์๊ฐ | ๋์ผ ์๊ฐ ๋ด ๋ฐฐํฌ ๊ฐ๋ฅ ํ์ +103.7% |
| ๋ชจ๋ํฐ๋ง ๋ฐฐํฌ ์ฒ๋ฆฌ๋ | 8.0 โ 43.5ํ/์๊ฐ | monitoring-only ๋ณ๊ฒฝ ๋ฐ์ ํจ์จ +442.8% |
| ํ ํ๋ฆฟ ๋๊ธฐํ ๋ฒ์ | 6๊ฐ ์๋น์ค ๋ ํฌ | ์ค์ ์ ์ฑ ๋ณ๊ฒฝ์ ๋ฉํฐ ๋ ํฌ์ ์๋ ๋ฐ์ |
| ๋ก๊ทธ ์ ์ฌ ์ง์ฐ | ์ต๋ 60์ด | raw click log๋ฅผ ์ด์ ๊ฐ๋ฅํ ์ฃผ๊ธฐ๋ก S3 ์ ์ฌ |
| ๋ก๊ทธ ์ ์ฌ ๊ฐ์ ์จ | 98.3% | 1์๊ฐ ํํฐ์ ๊ธฐ์ค ๋๋น ๋ ๋น ๋ฅธ ์๋ณธ ์ ์ฅ |
์ด ์ธํ๋ผ๋ ์๋ 5๊ฐ์ง ์์น์ ๊ธฐ์ค์ผ๋ก ์ค๊ณํ์ต๋๋ค.
- ๊ณ ๊ฐ ํธ๋ํฝ๊ณผ ๊ด๋ฆฌ์ ํธ๋ํฝ์ ๋คํธ์ํฌ ๋ ๋ฒจ์์ ๋จผ์ ๋ถ๋ฆฌํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก Private Subnet์ ๋ฐฐ์นํ๋ค.
- ๊ฐ์ VPC ๋ด๋ถ๋ผ๋ Security Group์ผ๋ก ํต์ ๋ฐฉํฅ๊ณผ ํฌํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ํํ๋ค.
- ์ด์์ฑ๋ณด๋ค ๋ณด์์ ์ฐ์ ํด์ผ ํ๋ ์์(Admin, DB, Monitoring)์ ์ง์ ๋ ธ์ถํ์ง ์๋๋ค.
- ๋ฐฐํฌ๋ ์๋น์ค๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ๋, ์ ์ฑ ๊ณผ ์คํ ํ๋ฆ์ ์ค์ Infra Repository์์ ํต์ ํ๋ค.
user -> root domain (Vercel) -> api.<domain> -> Customer ALB -> Customer API ECS -> RDS
admin user -> admin.<domain> -> Admin ALB -> Admin Web ECS -> Admin API ECS -> RDS
Customer/Admin API -> MSK -> MSK Connect / Intelligence Server / Batch Worker
Application / DB / AWS Metrics -> Prometheus / pg_exporter / CloudWatch -> Grafana
Holliverse๋ ๊ณ ๊ฐ์ฉ ์น ํธ๋ํฝ๊ณผ ๊ด๋ฆฌ์์ฉ ์ด์ ํธ๋ํฝ์ ์ฑ๊ฒฉ์ด ๋ค๋ฆ ๋๋ค.
- ๊ณ ๊ฐ ํธ๋ํฝ์ ์ธ๋ถ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ๋ ๊ณต๊ฐ ์๋น์ค์ ๋๋ค.
- ๊ด๋ฆฌ์ ํธ๋ํฝ์ ํ์ฉ๋ IP ๋์ญ์์๋ง ์ ๊ทผํด์ผ ํ๋ ์ด์ ์์คํ ์ ๋๋ค.
๋ฐ๋ผ์ ํ๋์ ALB์์ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ๊ถํ ์ ์ด๋ง์ผ๋ก ๊ตฌ๋ถํ๊ธฐ๋ณด๋ค,
Customer ALB / Admin ALB๋ฅผ ๋ถ๋ฆฌํด ๋คํธ์ํฌ ์ง์
์ ์์ฒด๋ฅผ ๋๋๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
- ๊ณ ๊ฐ/๊ด๋ฆฌ์ ๋ผ์ฐํ ๊ท์น ๋ถ๋ฆฌ
- ๊ด๋ฆฌ์ ์ธ๋ฐ์ด๋ IP ์ ํ ์ ์ฉ
- ๋ณด์ ์ ์ฑ ๊ณผ ์ฅ์ ์ํฅ ๋ฒ์ ๋ถ๋ฆฌ
- ์ถํ WAF / ์ธ์ฆ ์ ์ฑ / ์ด์ ์ ์ฑ ์ ๋ ๋ฆฝ ์ ์ฉ ๊ฐ๋ฅ
์ฆ, ์ ํ๋ฆฌ์ผ์ด์
๋ด๋ถ ๊ถํ ์ฒ๋ฆฌ์๋ง ์์กดํ์ง ์๊ณ
๋คํธ์ํฌ ๊ฒฝ๊ณ์์๋ถํฐ ๋จผ์ ๋ถ๋ฆฌํ๋ ๋ณด์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ฒ ๋์์ต๋๋ค.
| Source | Destination | Port | Purpose |
|---|---|---|---|
| Internet | Customer ALB | 443 | ๊ณ ๊ฐ ์๋น์ค HTTPS ์ง์ ์ |
| Allowed Admin CIDRs | Admin ALB | 443 | ๊ด๋ฆฌ์ ์ฝ์ ์ ๊ทผ |
| Customer ALB | Customer API ECS | 8080 | ๊ณ ๊ฐ API ์ ๋ฌ |
| Admin ALB | Admin Web ECS | 3000 | ๊ด๋ฆฌ์ ์น ์ ๋ฌ |
| Admin Web ECS | Admin API ECS | 8080 | ๊ด๋ฆฌ์ ์น-API ๋ด๋ถ ํต์ |
| Customer API ECS | RDS | 5432 | ๊ณ ๊ฐ ์๋น์ค DB ์ ๊ทผ |
| Admin API ECS | RDS | 5432 | ๊ด๋ฆฌ์ ์๋น์ค DB ์ ๊ทผ |
| Intelligence Server | RDS | 5432 | ๋ถ์ ๋ฐ์ดํฐ ์ ์ฅ/์กฐํ |
| Monitoring EC2 | RDS | 5432 | DB ๊ด์ธก |
| ECS Services | MSK | 9098 | Kafka IAM/TLS ํต์ |
์ญํ ๋ณ Security Group์ ๋ถ๋ฆฌํด ์ ์ฉํจ์ผ๋ก์จ,
โ๊ฐ์ VPC ์์ด๋ฉด ๋ชจ๋ ํต์ ๊ฐ๋ฅโํ ๊ตฌ์กฐ๋ฅผ ํผํ๊ณ
๋๊ฐ ๋๊ตฌ์๊ฒ ์ด๋ค ํฌํธ๋ก ์ ๊ทผํ ์ ์๋์ง ๋ช
์์ ์ผ๋ก ์ ์ดํฉ๋๋ค.
์ด ์ ์ฅ์๋ ์๋น์ค๋ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํฌ์งํ ๋ฆฌ์ ๋ถ๋ฆฌ๋ ์ค์ Infra Repository ๋ก ๋์ํฉ๋๋ค.
๋ฐฐํฌ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋น์ค ๋ ํฌ์งํ ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ Docker ์ด๋ฏธ์ง ๋น๋์ ์ง์คํฉ๋๋ค.
- ์ธํ๋ผ ๋ ํฌ์งํ ๋ฆฌ๋ AWS ๋ฆฌ์์ค ์ ์์ ๋ฐฐํฌ ์ ์ฑ ์ ๊ด๋ฆฌํฉ๋๋ค.
- ์๋น์ค ์ด๋ฏธ์ง ๋ณ๊ฒฝ ์์๋ ECS service rollout ์ค์ฌ์ผ๋ก ๋ฐฐํฌํฉ๋๋ค.
- ์ธํ๋ผ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์์๋ง CloudFormation / CDK stack deploy ๋ฅผ ์ํํฉ๋๋ค.
- Monitoring๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ๋ฆฌ์์ค๋ ๋ณ๋ stack ์ผ๋ก ๋ถ๋ฆฌํด ๋ฐ์ํฉ๋๋ค.
๊ธฐ์กด์๋ cdk deploy EcsClusterStack ์ค์ฌ ๊ตฌ์กฐ๋ก ์ธํด,
์๋น์ค ํ๋์ ์ด๋ฏธ์ง๊ฐ ๋ณ๊ฒฝ๋์ด๋ ECS ๊ด๋ จ ์คํ ์ ์ฒด๋ฅผ ๋ค์ ๋ฐ์ํ๋ ํ๋ฆ์ ๊ฐ๊น์ ์ต๋๋ค.
ํ์ฌ๋ ์๋ ์์๋ก ๋์ํฉ๋๋ค.
- ํ์ฌ Task Definition ์กฐํ
- ์ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๋ฐ์ํ Revision ๋ฑ๋ก
aws ecs update-service์คํaws ecs wait services-stable๋ก ์์ ํ ๋๊ธฐ
์ฆ, ๋ฐฐํฌ๋ฅผ stack deploy ์ค์ฌ์์ service rollout ์ค์ฌ์ผ๋ก ์ ํํ์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ:
- ์๋น์ค ๋ฐฐํฌ ์๊ฐ:
449.1์ด โ 220.4์ด(50.9% ๋จ์ถ) - ์๋น์ค ๋ฐฐํฌ ์ฒ๋ฆฌ๋:
8.0 โ 16.3ํ/์๊ฐ(+103.7%) - ๋ชจ๋ํฐ๋ง ๋ฐ์ ์๊ฐ:
449.1์ด โ 82.7์ด(81.6% ๋จ์ถ) - ๋ชจ๋ํฐ๋ง ๋ฐฐํฌ ์ฒ๋ฆฌ๋:
8.0 โ 43.5ํ/์๊ฐ(+442.8%)
ํ์ฌ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ ์งํ๋ฅผ ์ค์ ์ ์ผ๋ก ์์งํฉ๋๋ค.
- ECS CPU / Memory / Task Count
- ALB Request Count / Target Response Time / HTTP 4xx, 5xx
- RDS CPU / Connections / Freeable Memory / Read/Write Latency
- Spring Boot Actuator / Micrometer ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฉํธ๋ฆญ
- PostgreSQL ๋ด๋ถ ์ํ(pg_exporter)
- ๋ฐฐํฌ ์ดํ ECS service steady state ๋๋ฌ ์๊ฐ
์ด์์๋ Grafana๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
, DB, AWS ์ธํ๋ผ ์งํ๋ฅผ ํ ๊ณณ์์ ํ์ธํ ์ ์์ผ๋ฉฐ,
์ ๊ทผ์ SSM Port Forwarding ์ผ๋ก๋ง ํ์ฉํฉ๋๋ค.
์ฆ, ๊ด์ธก ๋๊ตฌ ์ญ์ ์ธ๋ถ์ ์ง์ ๋
ธ์ถํ์ง ์๊ณ
๋ด๋ถ๋ง ๊ธฐ๋ฐ + IAM/Secrets ์ค์ฌ์ ์ด์ ๋ณด์ ๊ตฌ์กฐ๋ฅผ ์ ์งํฉ๋๋ค.
๋น ๋ฅธ ๋ฐฐํฌ๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํด reusable workflow ๊ธฐ๋ฐ CT๋ฅผ ๊ตฌ์ฑํ๊ณ ,
PostgreSQL ํ
์คํธ ํ๊ฒฝ ์์์ Gradle ํ
์คํธ์ JaCoCo ๋ฆฌํฌํธ๋ฅผ ํ๊ฐํฉ๋๋ค.
ํ์ฌ ํ์ง ๊ฒ์ดํธ๋ ๋ค์ ์๊ณ์น๋ก ๊ด๋ฆฌํฉ๋๋ค.
- overall line coverage: 70%
- overall branch coverage: 70%
- changed line coverage: 80%
- changed branch coverage: 80%
์ฆ,
CI๋ ์ค์๋ฅผ ๋น ๋ฅด๊ฒ ๋๋ฌ๋ด๊ณ ,
CD๋ ๋ณ๊ฒฝ์ ์๊ฒ ๋ฐ์ํ๋ฉฐ,
CT๋ ๊ทธ ๋น ๋ฅธ ํ๋ฆ์ ๋ฒํธ ์ ์๊ฒ ๋ง๋๋ ์ต์ ํ์ง ๊ธฐ์ค์ผ๋ก ๋์ํฉ๋๋ค.
MSK Connect S3 Sink๋ ์๋ ๊ธฐ์ค์ผ๋ก ์ด์ํฉ๋๋ค.
flush.size=1000rotate.interval.ms=60000partition.duration.ms=3600000
์ด๋ฅผ ํตํด raw click log๋ฅผ ์ต๋ 60์ด ์ด๋ด์ S3๋ก ์ ์ฌํ ์ ์๊ณ ,
1์๊ฐ ํํฐ์
๊ธฐ์ค๊ณผ ๋น๊ตํ๋ฉด 98.3% ๋ ๋น ๋ฅด๊ฒ ์๋ณธ ๋ก๊ทธ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.