서비스 트래픽이 증가하면 하나의 DB 서버로는 성능과 안정성에 한계가 생긴다.
DB 다중화는 이러한 문제를 해결하기 위한 대표적인 방법이며, 이번 글에서는 그 중 레플리케이션(Replication) 방식에 대해 정리한다.
레플리케이션이란?
레플리케이션은 하나의 Master DB에서 발생한 변경 내용을 Slave DB로 복제하는 방식이다.
Master는 쓰기 작업을 담당하고, Slave는 읽기 작업을 담당하는 구조로 많이 사용된다.
핵심 특징은 다음과 같다.
- Master → Slave 단방향 복제
- 읽기(Read) 성능 향상
- 구조가 비교적 단순
- 쓰기 병목은 여전히 Master에 집중됨
레플리케이션 구조 요약
- Master
- INSERT / UPDATE / DELETE 처리
- Binary Log(binlog)를 기록
- Slave
- Master의 binlog를 읽어 동일한 변경 사항을 반영
- SELECT 위주의 트래픽 처리

즉, 쓰기 1대 + 읽기 N대 구조
레플리케이션의 장점과 한계
장점
- 읽기 성능 향상
- 트래픽 분산 가능
- 설정과 이해가 비교적 쉬움
- 백업, 통계 조회용 DB 분리 가능
단점
- 쓰기 성능은 여전히 Master에 의존
- Master 장애 시 서비스 중단 가능
- 복제 지연(Replication Lag) 발생 가능
이러한 한계 때문에 고가용성(HA) 이 필요한 경우에는 다음 글에서 다룰 클러스터 방식이 필요해진다.
MariaDB 레플리케이션 실습 구성
- DB1: Master
- DB2: Slave
- 동일한 네트워크 대역에서 구성
- Binary Log 기반 복제 방식 사용
데이터 백업 및 복구
# DB1 컴퓨터에서 데이터 백업
mysqldump -u root -p --all-databases > backup.sql
# DB1 컴퓨터에서 백업 파일을 DB2로 복사
scp ./backup.sql test@192.168.146.201:/tmp/backup.sql
# DB2 컴퓨터에서 데이터 복구
mariadb -u root -p < /tmp/backup.sql
# MySQL Workbench에서 데이터 복구(sql파일로 데이터 백업)
sever → data export
DB1 컴퓨터 (Master 설정)
# Master 설정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb]
log-bin
server_id=1
log-basename=master1 # 로그 파일 이름
binlog-format=mixed # statement + row 혼합 방식
# meriadb 재실행
systemctl restart mariadb
Master 상태 확인
mariadb -u root -p
show master status;

이 명령을 통해 File, Position 두 값을 확인한다.
→ Slave 설정 시 반드시 필요
복제본 사용자 생성
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;
- 일반 사용자 계정이 아닌 복제 전용 계정
- 최소 권한 원칙 적용
DB2 컴퓨터 (Slave 설정)
# DB 서버 설정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb]
server_id=2
# mariadb 재실행
systemctl restart mariadb
Master 정보 저장
# mariadb 접속
mariadb -u root -p
CHANGE MASTER TO
MASTER_HOST='192.168.146.200',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='master1-bin.000001',
MASTER_LOG_POS=780,
MASTER_CONNECT_RETRY=10;
# Slave 시작
START SLAVE;
Slave 상태 확인
SHOW SLAVE STATUS\G

아래 두 항목이 Yes 여야 정상이다.
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
하나라도 No라면 복제가 정상적으로 동작하지 않는다.
설정이 잘못되었을 때 초기화 방법
# Slave 중지
STOP SLAVE;
RESET SLAVE;
# 데이터 백업 및 복구
# Master 재지정
CHANGE MASTER TO
MASTER_HOST='[Master 서버 IP]',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[File]',
MASTER_LOG_POS=[Position],
MASTER_CONNECT_RETRY=10;
START SLAVE;
애플리케이션에서의 사용 예시
- 쓰기 작업 → Master
- insert, update, delete
- 예: signup.jsp
- 읽기 작업 → Slave
- select
- 예: login.jsp
이렇게 역할을 분리하면 DB 부하를 효과적으로 분산할 수 있다.
정리
- 레플리케이션은 읽기 성능 향상에 특화된 DB 다중화 방식
- 구조가 단순하고 실습 및 운영 난이도가 낮음
- 하지만 Master 장애에 취약하고, 쓰기 확장에는 한계가 있음
- 고가용성(HA)이 필요한 환경에서는 클러스터 방식이 필요
다음 글에서는 DB 다중화 방식 중 클러스터링 방식을 다룰 예정이다.
'🔗 CS > 💿 DATABASE' 카테고리의 다른 글
| [DATABASE] DB 다중화 - 클러스터 (0) | 2026.01.04 |
|---|