회사에서 Spring 동작 과정에 관한 설명을 듣던 중 MasterMapper와 SlaveMapper라 되어있는 Persistence(JPA에선 아마 Repository)내부의 파일들을 보았고 이것은 어떤 것들을 의미하는지 물어보앗다. 이것은 Master DB와 Slave DB에 따로 요청을 보내기 때문에 작성된 것이라 하였고 과면 Master DB와 Slave DB가 도대체 어떤 것인지 궁금해서 찾아보게 되었다.
Replication은 복제라는 뜻을 가지고 있다. DB는 매우 중요한 요소여서 하나로만 관리할 수 없고 하나의 DB로만 업무를 처리하게 되면 많은 부하가 생기는 문제가 있다. 따라서 Master와 Slave라는 두 DB를 생성하여 안전성을 높이고 주로 Master는 CUD를 Slave는 R을 처리하게 하여 쿼리를 분산시킴으로써 DB의 부하를 분산시킨다.
복제(Replication)는 Master에서 이루어지며 그 결과 Slave에게 전달된다. 방식은 동기(Sync)와 비동기(Async) 방식이 있으며 두 방식의 장점을 적절히 조합한 Semi-sync 방식도 존재한다. 각각의 방식마다 구현한 방법도 다양하고 복잡하기 때문에 자세한 설명은 생략한다.
데이터를 복제하는 방법 또한 여러가지이다. Query를 그대로 전송하여 그대로 Replay하는 방법(Statement Based Replication)이나 Record(Row) 자체를 전송하는 방법(Row Based Replication), 두 방식을 자동으로 섞에서 사용하는 Mixed Based Replication이 존재하고 상황에 따라 적절하게 사용된다.
MySQL에서 Replication구조는 다음과 같은 특성들을 통해 다양하게 구성될 수 있다.
https://it-sunny-333.tistory.com/148
http://cloudrain21.com/mysql-replication