데이터베이스 리플리케이션(Replication)은 실시간 복제본 데이터베이스 서버를 운용하는 것을 의미합니다. 기준이 되는 서버를 마스터 서버라 하고, 마스터 서버와 동일한 내용을 갖는 또 다른 서버를 ‘리플리카(Replica)’라 합니다.
어플리케이션은 데이터베이스에 SQL 명령을 보내 데이터를 삽입/변경/삭제하게 되는데, 마스터 서버는 SQL 명령을 수신하면 그 SQL 명령을 리플리카 서버에도 똑같이 보냅니다. 이렇게 되면 마스터 서버와 리플리카 서버의 데이터가 동일한 상태로 유지됩니다.
데이터베이스 리플리케이션의 목적
데이터베이스 리플리케이션은 기본적으로 데이터 안정성을 위함입니다.
어떠한 원인으로 인해 데이터가 손상되었을 때, 가장 기초적인 대처는 가장 최신의 백업본을 복구하여 사용하는 것입니다. 그러나 백업본을 이용한 대처는 큰 단점이 있습니다. 데이터 백업을 주기적이고 자동으로 되도록 해놓았다고 하더라도 백업된 시간과 장애가 발생한 시간 사이의 데이터 변경 사항들은 모두 소실되게 됩니다.
리플리카 서버는 ‘아주 약간의 딜레이가 있긴 하지만’ 거의 실시간으로 마스터 서버와 동일한 데이터를 갖고 있기 때문에, 장애 복구 시 데이터 소실이 최소화됩니다. 리플리카 서버는 마스터 서버로 승격이 가능하기에, 마스터 서버로 승격시켜 기존 마스터 서버를 대체하는 방식으로 복구가 진행됩니다. 리플리카 서버를 마스터 서버로 승격한 후, 이 새로운 마스터 서버에 대한 리플리카 서버를 생성하면 복구가 완료됩니다.
데이터베이스 리플리케이션의 응용
리플리카 서버는 기본적으로 읽기전용으로 운용됩니다. 이러한 특성을 활용하면 데이터베이스 서버의 부하를 줄이고, 데이터베이스를 억세스하는 어플리케이션의 동작 성능을 개선할 수 있습니다.
어플리케이션 개발 시, 데이터의 억세스 시간이 중요한 읽기쓰기 SQL 작업은 마스터 서버에 접속하여 수행하고, 데이터의 억세스 시간이 중요하지 않는 ‘읽기전용’ 작업은 리플리카 서버에 접속하여 수행하도록 합니다.
예를 들어, 서비스 어플리케이션은 항시 마스터 데이터베이스 서버에서 데이터를 조작하도록 하고, ‘많은 부하가 유발될 수 있는’ 관리자 사이트의 특정 내역 조회 기능에 대해서는 리플리카 데이터베이스 서버로부터 데이터를 가져오도록 하는 것입니다.
이렇게 하면, 큰 규모의 데이터에서 자료를 추출하게 될 때 발생하는 데이터베이스 서버 부하를 리플리카 서버가 대신 받아 처리하기에 마스터 서버가 받게 되는 부하가 크게 줄어듭니다.
AWS에서의 데이터베이스 리플리케이션
아마존 웹 서비스의 데이터베이스 제품인 RDS는 특정 데이터베이스 타입에 대해서 리플리케이션(Replication) 기능을 지원합니다. 복제 서버인 리플리카는 기본적으로 읽기전용입니다.
RDS가 리플리케이션을 지원하는 데이터베이스는 포스트그레스큐엘(Postgresql), 마이에스큐엘(MySql), 마리아DB(MariaDB) 입니다.
마무리
시범적인 서비스가 아닌 상용 서비스의 경우 모든 데이터는 매우 치명적이기에 데이터의 안정성을 보장하는 것은 간과해서는 안될 중요한 일입니다. 모든 서버는 언제든 장애가 발생할 수 있습니다. 중요 서비스에 대해 데이터베이스 서버 자동 백업 정책에만 의존하는 것은 너무 안일한 생각이라고 할 수 있습니다.
상용 서비스를 운용중이라면, 안정성과 속도라는 두 마리 토끼를 동시에 잡을 수 있는 ‘데이터베이스 리플리케이션’의 적용에 대해 적극 고민해보아야 합니다.