마스터-슬레이브 복제란?
마스터-슬레이브 복제(Master-Slave Replication)는 하나의 데이터베이스 서버(마스터)에서 발생한 데이터 변경 사항을 하나 이상의 다른 서버(슬레이브)로 자동 복사하는 구조입니다. 마스터는 쓰기(INSERT, UPDATE, DELETE) 작업을 전담하고, 슬레이브는 마스터의 데이터를 그대로 복제하여 읽기(SELECT) 작업을 처리합니다. 흔히 회사의 원본 문서와 복사본을 떠올리면 이해가 쉽습니다. 원본 문서(마스터)에만 수정이 가해지고, 여러 부서에 배포된 복사본(슬레이브)은 그 수정 내용을 그대로 반영받아 사람들이 열람만 하는 구조와 비슷합니다.
동작 원리와 예시
대표적으로 MySQL의 복제 방식을 예로 들면 다음과 같은 흐름으로 동작합니다.
- 마스터 서버는 데이터 변경 내역을
binary log라는 파일에 순서대로 기록합니다. - 슬레이브 서버는
I/O Thread를 통해 마스터의 binary log를 지속적으로 가져옵니다. - 가져온 로그는 슬레이브 내부의
relay log에 저장되고,SQL Thread가 이를 순차적으로 실행해 데이터를 동기화합니다.
이 과정은 기본적으로 비동기(asynchronous) 방식으로 이루어지기 때문에, 마스터에서 데이터가 변경된 직후 아주 짧은 시간 동안 슬레이브와 데이터가 일치하지 않는 복제 지연(Replication Lag)이 발생할 수 있습니다. 이는 트래픽이 많거나 네트워크 상태가 불안정할 때 더 커질 수 있어, 실시간 정합성이 중요한 서비스에서는 반드시 고려해야 할 요소입니다.
실무에서 왜 사용할까?
마스터-슬레이브 구조를 도입하는 가장 큰 이유는 읽기와 쓰기 부하를 분산시키기 위해서입니다. 대부분의 서비스는 쓰기보다 읽기 요청이 훨씬 많은데, 모든 요청을 하나의 서버가 처리하면 병목이 발생하기 쉽습니다. 이때 여러 대의 슬레이브를 두고 조회 요청을 분산시키면 전체 시스템의 응답 속도와 처리량이 크게 개선됩니다.
또한 장애 대응 측면에서도 유용합니다. 마스터 서버에 장애가 발생했을 때, 슬레이브 중 하나를 새로운 마스터로 승격시키는 Failover 전략을 통해 서비스 중단 시간을 최소화할 수 있습니다. 실제로 많은 서비스에서 백업(Backup) 용도로도 슬레이브를 활용하는데, 마스터에 직접 부하를 주지 않고 슬레이브에서 데이터를 백업받아 안정성을 높이는 방식입니다.
다만 복제 지연으로 인한 데이터 불일치 가능성, 슬레이브 증가에 따른 관리 복잡도 상승 등은 설계 시 반드시 함께 고려해야 할 트레이드오프입니다.