샤딩과 레플리케이션의 차이를 설명해주세요.
답변 포인트
분할 저장과 복제 저장의 차이를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.
정답 및 해설
빠른 요약
샤딩은 데이터를 여러 노드로 나누어 저장하는 확장 전략이고, 레플리케이션은 같은 데이터를 복제해 읽기 확장과 장애 대응을 돕는 전략입니다. 실무 예시: 쿼리를 개선할 때는 인덱스 존재 여부뿐 아니라 실제 실행 계획과 반환 행 수를 함께 확인해야 합니다.
샤딩과 레플리케이션은 모두 데이터를 여러 노드에 배치하지만 목적이 다릅니다. 샤딩은 데이터를 나누어 저장해 용량과 쓰기 부하를 분산하고, 레플리케이션은 같은 데이터를 복제해 가용성과 읽기 확장을 얻습니다.
레플리케이션
Primary DB -> Replica 1
-> Replica 2Primary에서 쓰고 Replica로 변경 사항을 복제합니다. 읽기 트래픽을 Replica로 분산하거나 Primary 장애 시 승격(failover)할 수 있습니다.
주의점
- 비동기 복제에서는 replication lag 때문에 방금 쓴 데이터를 replica에서 못 볼 수 있습니다.
- failover 시 split-brain, 데이터 유실 가능성을 고려해야 합니다.
- 읽기 분산만으로 쓰기 병목은 해결되지 않습니다.
샤딩
user_id % 4 = 0 -> shard A
user_id % 4 = 1 -> shard B
user_id % 4 = 2 -> shard C
user_id % 4 = 3 -> shard D데이터를 shard key 기준으로 나누어 여러 DB에 저장합니다. 각 shard가 전체 데이터의 일부만 담당하므로 저장 용량과 쓰기 부하를 분산할 수 있습니다.
주의점
- shard key 선택이 매우 중요합니다. 특정 shard에 트래픽이 몰리면 hotspot이 생깁니다.
- shard를 넘는 join, transaction, aggregate가 어려워집니다.
- resharding은 운영 난도가 높습니다.
함께 쓰는 경우
대규모 서비스는 shard마다 primary-replica 구성을 둡니다. 즉 “데이터는 샤딩으로 나누고, 각 조각은 레플리케이션으로 복제”합니다.
면접 답변 포인트
레플리케이션은 같은 데이터를 복사해 읽기 확장과 장애 대응을 돕고, 샤딩은 데이터를 분할해 저장 용량과 쓰기 처리량을 확장합니다. 각각 lag와 failover, shard key와 cross-shard 쿼리 문제가 핵심 trade-off입니다.