Skip to content

Replication / Sharding

데이터베이스의 성능 향상과 가용성 확보, 트래픽 분산을 위해 시스템을 물리적/논리적으로 확장(Scale-out)하는 대표적인 아키텍처 기법이다.

1. Replication (복제)

데이터베이스를 여러 대의 서버에 복제하여 읽기 부하(Read Load)를 분산하고 **가용성(HA)**을 높이는 기법.

  • 구조
    • Master (Primary): 원본 데이터를 가진 서버. 데이터의 변경(Insert, Update, Delete)을 전담한다.
    • Slave (Secondary/Replica): Master와 데이터를 동기화하여 동일한 복사본을 가지는 서버. 주로 읽기(Select) 요청을 전담한다.
  • 동작 방식
    • Master에서 데이터 변경이 발생하면, 해당 변경 내역(예: MySQL의 Binary Log)을 Slave로 전송하여 비동기(또는 동기)적으로 데이터를 동기화한다.
  • 장점
    • 서비스 트래픽의 대부분을 차지하는 읽기 요청을 여러 Slave 서버로 분산시켜 부하를 줄일 수 있다.
    • Master 서버 장애 시 Slave 중 하나를 새로운 Master로 승격시켜 서비스 중단을 막을 수 있다(Failover).
  • 단점
    • 비동기 복제의 경우 Master와 Slave 간 데이터 동기화 지연(Replication Lag)이 발생하여, 쓰기 직후 읽었을 때 과거 데이터가 조회될 수 있다.

2. Sharding (샤딩)

하나의 거대한 데이터베이스 테이블을 여러 개의 데이터베이스 서버에 물리적으로 분할하여 분산 저장하는 기법. (수평 파티셔닝)

  • 목적: 데이터의 크기나 쓰기 트래픽이 한 대의 서버(Master)로 감당하기 어려울 때 쓰기 부하 분산과 용량의 한계 극복을 위해 사용.
  • Shard Key: 데이터를 어떤 서버(Shard)에 저장할지 결정하는 기준값.
    • Hash Sharding: Shard Key의 해시값을 이용해 분산. 데이터가 균등하게 분산되지만, 노드 증설 시 해시 함수가 변경되어 재배치(Rebalancing)가 어렵다.
    • Range Sharding: 특정 범위(예: 1~100만, 100만~200만)를 기준으로 분산. 증설이 쉽지만 특정 범위(예: 최신 데이터)에 트래픽이 몰릴 수 있다.
  • 장점
    • 대용량 데이터 처리 및 빠른 쓰기/조회 성능 확보.
    • 시스템 확장이 매우 유연함(Scale-out).
  • 단점
    • 여러 Shard에 걸친 JOIN 연산이 매우 어려워지거나 불가능하다.
    • 한 번 Sharding을 적용하면 시스템 구조가 매우 복잡해지고, 트랜잭션 관리와 데이터 재분배(Rebalancing) 관리가 까다롭다.