MCP 아키텍처 선언 — 플랫폼의 새로운 청사진
요약: 기존 구조를 완전히 폐기하고, REINDEERS의 모든 시스템은 MCP(Modular Cloud Platform) 형태로 재설계되었다. 각 모듈은 독립 배포, 자동 복구, 글로벌 라우팅이 가능하며, Tencent Cloud 기반의 멀티 리전 구조로 운용된다.
1. MCP(Modular Cloud Platform) 개요
MCP는 REINDEERS의 핵심 인프라 아키텍처로, 모든 기능을 독립된 모듈로 분리하고, 각 모듈이 자체 CI/CD 파이프라인을 통해 배포되며, 장애 시 자동으로 재배포 및 복구되는 구조를 목표로 설계되었다.
- 모듈화: 모든 서비스(API, AI, 물류, 결제, WMS 등)는 컨테이너 단위로 격리
- 복제: 리전 간 데이터 실시간 복제 (DTS + GTID 기반)
- 자동화: Drone CI/CD, COS 업로드, CDN 캐시 자동 무효화
- 보안: IAM 최소 권한, HTTPS + mTLS 내부 통신, VPC 내 Private Endpoint
2. 글로벌 인프라 구조 — 홍콩 메인 / 서울 DR
REINDEERS MCP는 Tencent Cloud 상에 구축되어 있으며, 홍콩(ap-hongkong)을 메인 리전, 서울(ap-seoul)을 재해복구 리전으로 구성한다. 데이터는 TencentDB for MySQL의 DTS(Data Transmission Service)를 통해 실시간으로 비동기 복제된다.
아키텍처 구성
[Global Routing]
DNSPod Geo Routing (TTL=60s, Health Monitor Enabled)
↓
[ap-hongkong]
- COS + CDN Edge (Static)
- API Gateway (Private)
- CVM/TKE Containers
- Lavin MQ (CloudAMQP)
- Redis Cluster (Session, Cache)
- TencentDB (MySQL Master)
↓ DTS (Async, GTID)
[ap-seoul]
- TencentDB Replica
- Standby Containers
- AutoFailover via Cloud Function + DNSPod API
Cloud Monitor가 DB 혹은 API 응답 실패를 감지하면, Cloud Function이 DNSPod API를 호출하여 자동으로 DR 리전으로 트래픽을 전환한다. Failover 과정은 평균 45~60초 내에 완료된다.
3. Drone CI/CD 파이프라인 — 완전 자동화된 배포
CI/CD는 Drone으로 표준화되었다.
모든 서비스는 YAML 기반 파이프라인으로 정의되며,
COS 업로드 시 올바른 Content-Type과 ACL 설정을 자동 적용한다.
kind: pipeline
type: docker
name: reindeers-deploy
steps:
- name: build
image: node:20
commands:
- npm ci
- npm run build
- name: upload
image: tencentcloud/tencentcloud-cli
environment:
COS_BUCKET: reindeers-fe
COS_REGION: ap-hongkong
commands:
- tccli cos PutObject --bucket $COS_BUCKET \
--region $COS_REGION \
--file ./.output/public \
--key / \
--content-type text/html \
--acl public-read
- name: purge-cdn
image: alpine/curl
commands:
- curl -X POST https://cdn.tencentcloudapi.com/purge?path=https://static.reindeers.com/assets/*
- curl -X POST https://cdn.tencentcloudapi.com/purge?path=https://static.reindeers.com/api-doc/*
- name: notify
image: plugins/slack
settings:
webhook: https://hooks.slack.com/services/xxxx/yyyy
channel: "#deploy"
template: "✅ Build {{build.number}} of {{repo.name}} succeeded ({{build.branch}})"
배포는 Git push 이벤트로 트리거되며, 빌드 완료 후 COS 업로드, CDN 캐시 무효화, Slack 알림까지 25초 내 완료된다.
4. DNSPod Geo Routing & Health Monitoring
글로벌 접근 시 DNSPod의 Smart Routing 정책을 사용한다. TTL은 60초, Health Monitoring 기능은 5초 간격으로 API Gateway를 검사하며, 응답이 2회 연속 실패하면 DR 리전으로 자동 전환된다.
reindeers.com (A)
├── KR, JP → ap-seoul (203.0.113.40)
├── TH, MY, SG → ap-hongkong (203.0.113.20)
├── CN → ap-shanghai (203.0.113.60)
└── Default → ap-hongkong
TTL = 60s
Health Monitor:
Check Interval = 5s
Fail Threshold = 2
Action = DNS Record Switch
5. 데이터 동기화 — DTS 복제 및 복구 정책
데이터는 DTS 비동기 복제로 동기화되며,
GTID 기반으로 트랜잭션 일관성을 유지한다.
복제 지연 평균은 2~3초이며, 장애 시 자동 Resume 기능이 활성화된다.
DTS 설정 예시
Source: TencentDB (ap-hongkong)
Target: TencentDB (ap-seoul)
Mode: Async
Heartbeat: 5s
Fail Recovery: Auto
Binlog Retention: 7 days
GTID: Enabled
장애 발생 후 복구 시 Last GTID Position부터 복제를 재개해 데이터 손실을 방지한다.
또한 DR 복제본은 주기적으로 Read-Only Health Check를 수행한다.
6. MQ·Redis 통합 구조 — 동기화와 이벤트 분리
MQ는 서비스 간 비동기 이벤트 전달에, Redis는 세션과 캐시 관리에 사용된다. 두 시스템은 서로 다른 목적을 가진다.
- Redis: Cluster Mode, Session TTL = 3600s, Cache TTL = 300s
- LavinMQ: Topic Exchange, 평균 처리량 3,800 msg/s
exchange: reindeers.global
type: topic
durable: true
bindings:
- routing_key: order.created
queue: order_worker
- routing_key: shipment.updated
queue: logistics_worker
7. 보안과 권한 관리 — 최소 권한 원칙
IAM 정책은 “최소 권한(Least Privilege)” 원칙을 따른다. 예를 들어, 배포 봇은 COS에만 쓰기 권한을 갖는다.
{
"Version": "2.0",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cos:PutObject",
"cos:GetObject"
],
"Resource": "qcs::cos:ap-hongkong:uid/1234567890:reindeers-fe/*"
}
]
}
API와 데이터 접근은 모두 HTTPS + JWT 기반으로 인증되며, 내부 컨테이너 간 통신은 mTLS로 암호화된다.
8. 결론 — 자동화, 복제, 회복, 그리고 일관성
MCP는 단순히 기술적 구조가 아니라, REINDEERS가 지속적으로 확장될 수 있는 기반이 되었다. 이제 하나의 코드베이스가 네 개의 리전에서 동일하게 배포되고, 데이터는 실시간으로 복제되며, 장애 시 자동으로 복구된다.
“MCP는 단순한 시스템이 아니라, 운영 그 자체를 자동화한 구조다.”
Comments
Post a Comment