데이터베이스 복제 구조 이해: Master-Slave vs Multi-Master Replication
대규모 시스템에서 데이터베이스의 부하 분산과 고가용성 확보는 중요한 과제입니다. 이를 위한 대표적인 방법이 데이터베이스 복제이며, 흔히 사용되는 구조로는 Master-Slave 복제와 Multi-Master 복제가 있습니다.
이 글에서는 두 방식의 구조와 동작 원리를 비교하고, 개발자가 고려해야 할 사항들을 정리해 봅니다.
Master-Slave Replication 구조
기본 개념
Master-Slave 구조에서는 하나의 Master 서버와 여러 개의 Slave 서버로 구성됩니다. 쓰기 연산(Insert, Update, Delete 등 DML)은 반드시 Master 서버로 전달되며, 읽기 연산(SELECT 등)은 Slave 서버로 분산하여 처리할 수 있습니다.
DML: Data Manipulation Language의 약자로, 데이터를 조작하는 SQL 구문 (INSERT, UPDATE, DELETE 등)
동작 방식
-
클라이언트는 Master 서버에 DML 쿼리를 전송합니다.
-
Master 서버는 해당 변경 사항을 binary log 파일에 기록합니다.
-
각 Slave 서버는 이 binary log 파일을 복사 및 재생(Replay) 하여 동일한 데이터를 반영합니다.
-
SELECT와 같은 읽기 쿼리는 Slave 서버로 분산 처리되어 읽기 부하를 줄입니다.
장단점
장점 | 단점 |
---|---|
읽기 성능 확장 가능 | Master 서버에 쓰기 병목 발생 |
구현이 단순하고 안정적 | 데이터 반영 지연(latency) 가능성 |
특정 사용 패턴(읽기 위주)에 적합 | 장애 시 Master 전환(failover) 복잡 |
대부분의 웹 애플리케이션은 전체 요청의 약 90% 이상이 읽기 중심이기 때문에, Master-Slave 구조는 실무에서 매우 적합한 방식입니다. 단, Slave 서버는 Master보다 몇 초 뒤처진 데이터를 가지고 있을 수 있으므로, 쓰기 후 즉시 읽는 경우에는 주의가 필요합니다.
개발자가 주의해야 할 점
Master-Slave 구조에서는 개발자가 다음과 같은 방식으로 쿼리 라우팅을 명확히 구분해야 합니다:
-
쓰기 쿼리(DML): 반드시 Master 서버로 전달
-
읽기 쿼리(SELECT): Slave 서버 중 하나로 분산 가능
이는 애플리케이션 코드 혹은 ORM 레벨에서 커넥션 라우팅 로직을 구현하거나, 프록시 레이어를 통해 처리할 수 있습니다.
Multi-Master Replication 구조
기본 개념
Multi-Master 복제는 모든 노드가 읽기와 쓰기를 모두 처리할 수 있는 구조이다. 클라이언트는 어느 노드에나 쓰기 쿼리를 보낼 수 있으며, 복제 시스템이 이를 다른 노드로 동기화한다. 대표적인 예로 Galera Cluster나 MySQL Group Replication이 있으며, 이들은 보통 동기 복제 방식을 사용한다.
장단점
장점 | 단점 |
---|---|
쓰기 처리 병목 없음 | 충돌 해결(conflict resolution) 필요 |
고가용성 및 무중단 유지보수 | 네트워크 및 복제 동기화 설계 복잡 |
클라이언트 라우팅 단순화 | 데이터 정합성 유지 어려움 |
마무리
Master-Slave와 Multi-Master 구조는 각각의 장단점이 분명하며, 서비스 특성과 트래픽 특성에 따라 적절히 선택해야 합니다.
-
읽기 중심 시스템 → Master-Slave 구조 권장
-
고가용성과 동시 쓰기 요구가 큰 환경 → Multi-Master 구조 검토
실제 시스템 설계 시에는 복제 지연, 충돌 처리, 장애 전환 정책 등을 반드시 고려해야 하며, 개발자 역시 복제 구조에 따라 쿼리 설계와 커넥션 처리 방식에 차별을 두는 것이 중요합니다.
댓글
댓글 쓰기