YugabyteDB
PostgreSQL 호환 분산 SQL 데이터베이스
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 샤딩을 명시적으로 설정하는 게 좋습니다."
개발자: "알겠습니다. 테이블 설계에 샤딩 전략 추가할게요."