데이터베이스 복제
기술노트
🔗 데이터베이스 복제 (Replication)
데이터베이스 복제는 하나의 데이터베이스(원본, Master)를 다른 여러 데이터베이스(복제본, Replica/Slave)에 실시간으로 복사하는 기술입니다. 이를 통해 데이터의 가용성과 시스템의 성능을 높일 수 있습니다.
🤔 복제는 왜 필요한가?
- 고가용성 (High Availability) : 원본 서버에 장애가 발생하더라도, 복제본 서버 중 하나를 즉시 원본으로 승격시켜 서비스 중단을 최소화할 수 있습니다. (장애 대응, Failover)
- 부하 분산 (Load Balancing) : 데이터베이스의 읽기(Read) 작업을 여러 복제본 서버로 분산시켜, 원본 서버의 부하를 줄이고 전체적인 읽기 성능을 향상시킬 수 있습니다.
일반적으로 데이터베이스 작업은 쓰기(Write)보다 읽기(Read)가 훨씬 빈번하게 발생합니다. 따라서 쓰기 작업은 원본 서버에서만 처리하고, 읽기 작업은 여러 복제본에서 처리하도록 하여 시스템의 효율을 극대화합니다.
⚙️ 복제 방식
- 비동기 복제 (Asynchronous Replication) : 원본 서버는 쓰기 작업을 완료한 후, 복제본 서버가 데이터를 복사해 갈 때까지 기다리지 않습니다. 성능은 좋지만, 원본 서버 장애 시 일부 데이터가 유실될 수 있습니다. 대부분의 시스템에서 이 방식을 사용합니다.
- 동기 복제 (Synchronous Replication) : 원본 서버가 쓰기 작업을 수행하면, 모든 복제본 서버에 해당 내용이 반영될 때까지 기다립니다. 데이터 일관성을 완벽하게 보장하지만, 전체적인 쓰기 성능이 저하됩니다.
💡 개발자 핵심 Point
- 데이터베이스 복제는 읽기 작업이 많은 서비스의 성능을 향상시키고, 서비스의 안정성을 높이는 핵심적인 아키텍처 패턴입니다.
- 애플리케이션 코드에서는 데이터베이스에 연결할 때, 쓰기 작업은 원본 서버의 주소로, 읽기 작업은 복제본 서버의 주소로 연결하도록 로직을 구현해야 합니다.
- 복제본 서버는 원본 서버에 비해 약간의 지연(Replication Lag)이 발생할 수 있습니다. 따라서 방금 쓴 데이터를 바로 읽어야 하는 등 강한 일관성이 필요한 경우에는 반드시 원본 서버에서 읽어야 합니다.
- 클라우드 데이터베이스 서비스(AWS RDS, Google Cloud SQL 등)는 몇 번의 클릭만으로 복제 환경을 매우 쉽게 구축할 수 있는 기능을 제공합니다.