핵심 요약
PlanetScale + Vitess 19로 자체 MySQL 클러스터(8 샤드, 1.2TB)를 6개월 운영. 스키마 변경이 무중단으로 한 줄, 글로벌 읽기 복제 자동, 백업·PITR 운영 부담 0. 다만 일부 SQL 제약(FK, 일부 join)과 단가가 약점.
1. 무엇이 좋은가
- Branch — git branch처럼 스키마 변경 격리 후 deploy
- VReplication — 무중단 스키마 변경, 샤드 분할
- 관측 — Vitess 자체 보드 + custom
- SOC2 · HIPAA
2. Branch 워크플로
pscale branch create main feature/add-coupon
pscale deploy-request create main feature/add-coupon
# 검토 후 merge — 무중단 적용
대규모 ALTER TABLE이 백그라운드 카피로 진행. 사용자 영향 0, 적용 시간만 길어짐(억 단위 행은 시간 단위).
3. 샤딩 — Vindex
# vschema.json
{
"sharded": true,
"vindexes": {"hash_md5": {"type":"hash"}},
"tables": {
"orders": {"column_vindexes":[{"column":"user_id","name":"hash_md5"}]}
}
}
한 사용자의 주문이 같은 샤드에 모이도록. cross-shard join은 비싸니 schema 설계 단계에서 결정.
4. 성능
| 워크로드 | 단일 RDS | PS Vitess |
|---|---|---|
| 단일 키 조회 | 1.2ms | 1.4ms |
| 샤드 키 포함 쿼리 | 3ms | 3.5ms |
| cross-shard fan-out | — | 15~40ms |
| 스키마 변경(억 단위) | 1시간+ 락 | 4시간 무중단 |
5. 제약 — 신중하게
- 외래 키(FK) 미지원 — 애플리케이션 보장
- cross-shard 조인은 가능하지만 비용 큼
- auto_increment 대신 UUID 또는 sharded sequence 권장
6. 비용
| 월 비용 | |
|---|---|
| self-host MySQL + Percona toolkit | $1,200 |
| RDS Aurora MySQL | $2,400 |
| PlanetScale Pro(우리 규모) | $3,800 |
인력비 포함하면 PS가 손익분기 가깝거나 우세.
7. 결정 가이드
- 샤딩이 임박했거나 트래픽 폭증 가능 → PS Vitess
- FK·복잡 join 중요 → Postgres 또는 RDS MySQL
- 운영 인력 부족 → PS
자주 묻는 질문
Q. self-host Vitess? 가능. 다만 Vitess 운영은 K8s + 전담 SRE 1명 수준. PS의 가치는 그 부분을 대신.

댓글 0