종식당
DB Replication이란? 본문
🍪 DB Replication
DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술이다. 특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(source) 서버와 복제(Replica) 서버 간의 데이터 동기화는 필수이다. MySQL기준으로 살펴보겠다.
🍯 바이너리 로그를 저장하는 방식은?
Replication은 Source서버에서 발생하는 모든 데이터 변경 사항을 Replica 서버로 복제하여 두 서버 간의 데이터 일관성을 유지하는 메커니즘이다. 이러한 과정은 주로 Binary log를 기반으로 이루어지며, Binary log는 Source서버에서 실행된 모든 데이터 변경 쿼리를 기록하는 역할을 한다. MySQL에서는 이 Binary log를 저장하는 방식으로 Row, Statement, Mixed의 세 가지 방식을 제공하며, 각 방식은 고유한 장단점을 가지고 있다.
- ROW
Row방식은 데이터베이스의 각 행별로 변경된 내용을 정확히 기록한다. 이 방식은 데이터 일관성을 매우 높게 유지할 수 있다는 큰 장점이 있다. 예를 들어, 특정 행이 수정되었을 때 그 행의 이전 상태와 변경된 상태를 모두 기록하므로, 복제 서버에서도 원본 서버와 동일한 데이터 상태를 유지할 수 있다. 그러나 모든 행의 변경 사항을 저장하기 때문에 Binary log파일의 크기가 급격히 증가할 수 있어 저장 공간에 부담을 줄 수 있는 단점이 존재한다. - Statement
반면에 Statement방식은 데이터 변경을 일으킨 SQL문 자체를 Binary log에 기록한다. 이 방식은 로그 파일의 크기를 상대적으로 작게 유지할 수 있어 저장 공간을 절약할 수 있는 장점이 있다. 하지만 실행할 때마다 다른 값을 반환하는 함수와 같이 비확정적 SQL쿼리가 실행될 경우, 동일한 쿼리가 Source와 Replica서버에서 다른 결과를 초래할 수 있어 데이터 불일치 문제가 발생할 수 있다.
예를 들어, SELECT NOW()와 같은 함수는 실행 시점에 따라 다른 결과를 반환할 수 있기 때문에, 이를 포함한 쿼리는 복제 시 문제가 될 수 있다. - Mixed
이러한 문제를 보완하기 위해 MySQL은 Mixed방식을 제공한다. Mixed방식은 상황에 따라 row기반과 statement기반을 혼합하여 로그를 기록한다. 비확정적 SQL이 아닌 경우에는 statement방식을 사용하여 저장 공간을 절약하고, 비확정적 SQL이 실행되는 경우네는 row방식을 사용하여 데이터 일관성을 유지한다. 이를 통해 두 방식의 장점을 모두 활용할 수 있으며, 데이터 불일치 문제를 최소화할 수 있다.
🍩 복제 과정
Source서버에서 데이터 변경 쿼리가 실행되고, 선택된 로그 저장 방식에 따라 Binary log에 기록된 후, Replica 서버의 IO Thread가 Binary log를 읽어와 Replica서버의 Relay log로 전송한다. Relay log는 Replica서버에서 Source서버의 Binary log를 저장하는 임시 저장소 역할을 하며, 이곳에 저장된 로그를 기반으로 Replica 서버의 SQL스레드가 실제 데이터베이스에 변경 사항을 적용한다. 이 과정은 매우 효율적으로 설계되어 있어 일반적으로 약 100밀리 초 이내에 데이터 공기화가 완료된다. 이러한 빠른 동기화 속도 덕분에 원본과 복제 서버 간의 데이터 일관성이 실시간에 가깝게 유지될 수 있다.
'매일메일' 카테고리의 다른 글
다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점 (0) | 2025.04.03 |
---|---|
SOLID 원칙 (0) | 2025.04.02 |
Record를 DTO로 사용하는 이유 (0) | 2025.03.27 |
HTTPS란? (0) | 2025.03.26 |
WAS와 Web Server의 차이점 (0) | 2025.03.24 |