🗄️ 데이터베이스

Vitess

Vitess

MySQL 수평 확장 미들웨어. YouTube에서 개발.

📖 상세 설명

Vitess는 MySQL의 수평 확장(horizontal scaling)을 가능하게 하는 데이터베이스 클러스터링 시스템입니다. YouTube에서 대규모 MySQL 워크로드를 처리하기 위해 개발되었으며, 현재 CNCF(Cloud Native Computing Foundation) 졸업 프로젝트입니다.

Vitess의 핵심 기능은 자동 샤딩(VSchema로 샤딩 로직 정의), 쿼리 라우팅(애플리케이션은 단일 엔드포인트 사용), 커넥션 풀링, 쿼리 재작성(복잡한 쿼리 최적화), 온라인 스키마 변경 등입니다.

Slack, Square, GitHub, HubSpot 등 대규모 서비스에서 MySQL을 페타바이트 규모로 운영하는 데 사용됩니다. Kubernetes 환경에 최적화되어 있습니다.

💻 코드 예제

# Vitess VSchema 예시 (샤딩 설정)
# 파일: vschema.json
{
  "sharded": true,
  "vindexes": {
    "hash": {
      "type": "hash"
    }
  },
  "tables": {
    "users": {
      "column_vindexes": [
        {
          "column": "user_id",
          "name": "hash"
        }
      ]
    },
    "orders": {
      "column_vindexes": [
        {
          "column": "user_id",
          "name": "hash"
        }
      ]
    }
  }
}

# vtgate 연결 (MySQL 호환 프로토콜)
mysql -h vtgate-host -P 15306 -u user -p

# 애플리케이션에서는 일반 MySQL 드라이버 사용
import mysql.connector

conn = mysql.connector.connect(
    host="vtgate-host",
    port=15306,
    user="app_user",
    database="commerce"
)

# 쿼리는 Vitess가 자동으로 샤드에 라우팅
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE user_id = 12345")
cursor.execute("SELECT * FROM orders WHERE user_id = 12345")  # 같은 샤드

🗣️ 실무 대화 예시

CTO: "MySQL 단일 인스턴스로는 더 이상 스케일 업이 안 돼요. 옵션이 뭐가 있죠?"

DBA: "Vitess 도입하면 기존 MySQL 유지하면서 샤딩할 수 있어요. 애플리케이션 코드 변경 최소화하고요."

CTO: "직접 샤딩하는 것과 뭐가 다른가요?"

DBA: "VSchema로 샤딩 로직 선언하면 Vitess가 쿼리 라우팅, 조인 처리, 리밸런싱을 자동으로 해줍니다. 운영 부담이 크게 줄어요."

면접관: "MySQL 샤딩을 어떻게 구현하셨나요?"

지원자: "Vitess를 도입해서 user_id 기반 해시 샤딩을 적용했습니다. VSchema로 샤딩 키를 정의하고, vtgate가 쿼리를 적절한 샤드로 라우팅합니다."

면접관: "크로스 샤드 쿼리는 어떻게 처리하나요?"

지원자: "Vitess가 scatter-gather 방식으로 여러 샤드에서 결과를 모아줍니다. 하지만 성능을 위해 가능하면 단일 샤드 쿼리로 설계하고, 크로스 샤드는 비동기 처리로 분리했습니다."

리뷰어: "이 쿼리 보면 WHERE 절에 user_id가 없어서 전체 샤드 스캔될 것 같아요."

개발자: "아, 조회 조건에 샤딩 키를 안 넣었네요."

리뷰어: "Vitess에서 샤딩 키 없는 쿼리는 모든 샤드에 브로드캐스트돼요. 가능하면 user_id 조건을 추가하거나, 불가피하면 캐시 레이어를 앞에 두세요."

개발자: "알겠습니다. API 설계부터 다시 검토해볼게요."

⚠️ 주의사항

🔗 관련 용어

📚 더 배우기