🗄️ 데이터베이스

YugabyteDB

PostgreSQL 호환 분산 SQL 데이터베이스

📖 상세 설명

YugabyteDB는 PostgreSQL과 호환되는 오픈소스 분산 SQL 데이터베이스입니다. Google Spanner에서 영감을 받아 설계되었으며, ACID 트랜잭션을 유지하면서 수평 확장과 고가용성을 제공합니다.

핵심 특징으로 PostgreSQL 호환(기존 앱 마이그레이션 용이), 자동 샤딩, 분산 트랜잭션(2PC 없이 강력한 일관성), 멀티 리전 배포, 자동 리밸런싱 등이 있습니다. Cassandra 호환 API(YCQL)도 지원합니다.

기존 PostgreSQL/MySQL 애플리케이션을 코드 변경 최소화로 분산 환경으로 전환하고 싶을 때 적합합니다.

💻 코드 예제

# YugabyteDB 클러스터 시작 (Docker)
docker run -d --name yugabyte \
  -p 5433:5433 -p 9000:9000 \
  yugabytedb/yugabyte:latest \
  bin/yugabyted start --daemon=false

# PostgreSQL 클라이언트로 연결
psql -h localhost -p 5433 -U yugabyte

-- 테이블 생성 (PostgreSQL 문법 그대로)
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    total DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW()
) SPLIT INTO 3 TABLETS;  -- 샤딩 설정

-- Python에서 사용 (psycopg2 그대로 사용)
import psycopg2

conn = psycopg2.connect(
    host="localhost",
    port=5433,
    database="yugabyte",
    user="yugabyte"
)

cursor = conn.cursor()
# 분산 트랜잭션 자동 지원
cursor.execute("BEGIN")
cursor.execute("INSERT INTO orders (user_id, total) VALUES (%s, %s)", (1, 99.99))
cursor.execute("UPDATE users SET order_count = order_count + 1 WHERE id = %s", (1,))
conn.commit()

🗣️ 실무 대화 예시

아키텍트: "PostgreSQL에서 글로벌 서비스 확장이 필요한데, 어떤 옵션이 있을까요?"

DBA: "YugabyteDB가 좋을 것 같아요. PostgreSQL 호환이라 기존 코드 거의 그대로 쓰고, 멀티 리전 배포로 지연시간도 줄일 수 있어요."

아키텍트: "CockroachDB랑 뭐가 다른가요?"

DBA: "둘 다 분산 SQL인데, YugabyteDB는 PostgreSQL 호환성이 더 높고, Cassandra API도 지원해서 유연해요. 성능 튜닝 옵션도 더 다양하고요."

면접관: "분산 SQL 데이터베이스 경험이 있나요?"

지원자: "YugabyteDB로 글로벌 서비스 DB를 구축한 경험이 있습니다. 한국-미국-유럽 3개 리전에 배포해서 각 지역 사용자에게 100ms 미만 지연시간을 달성했습니다."

면접관: "마이그레이션은 어떻게 했나요?"

지원자: "PostgreSQL 호환이라 pg_dump로 스키마 익스포트하고, 테이블별로 SPLIT INTO로 샤딩 설정만 추가했습니다. 애플리케이션 코드는 연결 문자열만 변경했습니다."

리뷰어: "이 쿼리에서 TABLET_SPLIT 힌트가 빠져 있어요. 데이터 분포는 고려했나요?"

개발자: "기본 샤딩으로 두면 안 되나요?"

리뷰어: "초기에는 괜찮은데, user_id 분포가 불균형하면 핫스팟 생겨요. HASH 샤딩이나 RANGE 샤딩을 명시적으로 설정하는 게 좋습니다."

개발자: "알겠습니다. 테이블 설계에 샤딩 전략 추가할게요."

⚠️ 주의사항

🔗 관련 용어

📚 더 배우기