AWS RDS(Relational Database Service)는 관계형 데이터베이스의 설치, 패치, 백업, 복제 등 운영 부담을 AWS가 대신 처리해 주는 관리형 데이터베이스 서비스입니다. MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Aurora를 지원합니다. 개발자는 데이터베이스 엔진 운영 대신 쿼리 최적화와 스키마 설계에 집중할 수 있습니다.
EC2에 MySQL을 직접 설치하면 OS 패치, DB 엔진 업그레이드, 백업 스크립트 작성, 복제 구성 등 모든 작업을 직접 해야 합니다. RDS는 이 작업들을 자동화합니다.
| 항목 | EC2 직접 설치 | RDS |
|---|---|---|
| OS 접근 | 가능 | 불가 |
| 패치·업그레이드 | 직접 | AWS 자동 |
| 백업 | 직접 구성 | 자동 |
| Multi-AZ 구성 | 직접 | 콘솔에서 활성화 |
| 비용 | EC2 비용만 | EC2 + 관리 비용 |
OS에 직접 접근하거나 특수한 DB 설정이 필요한 경우에는 EC2 설치를 선택하지만, 일반적인 운영 환경에서는 RDS가 훨씬 낮은 운영 부담을 제공합니다.
Multi-AZ는 메인 DB 인스턴스와 동일한 데이터를 다른 가용 영역(AZ)의 Standby 인스턴스에 동기적으로 복제하는 고가용성 기능입니다.
AZ-A AZ-B
+----------------+ +----------------+
| Primary DB | -----> | Standby DB |
| (읽기·쓰기) | sync | (대기) |
+----------------+ +----------------+
|
장애 발생 시
|
+----------------+
| Standby DB | <-- 자동 Failover (약 1~2분)
| (Primary 승격)|
+----------------+
Primary 인스턴스에 장애가 발생하면 자동으로 Standby가 Primary로 승격됩니다. 애플리케이션은 동일한 엔드포인트를 유지하므로 코드 변경 없이 복구됩니다. Standby는 읽기 요청을 처리하지 않습니다.
가용 영역(Availability Zone, AZ): AWS 리전 내에서 물리적으로 분리된 데이터센터 그룹. AZ 간 장애는 서로 영향을 주지 않습니다.
Read Replica는 Primary DB에서 비동기적으로 복제된 읽기 전용 복사본입니다. 읽기 요청이 많은 서비스에서 Primary DB의 부하를 분산할 때 사용합니다.
애플리케이션
|-- 쓰기 요청 --> Primary DB
|-- 읽기 요청 --> Read Replica 1
|-- 읽기 요청 --> Read Replica 2
MySQL 기준 최대 5개의 Read Replica를 생성할 수 있습니다. 비동기 복제이므로 Primary와 약간의 복제 지연(Replication Lag)이 존재합니다. 필요 시 Read Replica를 독립적인 DB로 승격시켜 Primary로 전환할 수도 있습니다.
복제 지연(Replication Lag): Primary에서 변경된 데이터가 Replica에 반영되기까지 걸리는 시간. 쓰기 부하가 높을수록 지연이 길어집니다.
RDS는 두 가지 방식으로 데이터를 보존합니다.
자동 백업(Automated Backup)은 매일 지정된 유지 관리 시간에 전체 스냅샷을 찍고, 트랜잭션 로그를 5분 간격으로 저장합니다. 보존 기간(최대 35일) 안의 임의 시점으로 복원하는 Point-in-Time Recovery가 가능합니다.
수동 스냅샷(Manual Snapshot)은 사용자가 직접 생성하며 명시적으로 삭제하기 전까지 보관됩니다. DB 인스턴스를 삭제해도 스냅샷은 유지되므로 나중에 복원할 수 있습니다.
복원은 기존 인스턴스를 덮어쓰지 않고 항상 새 인스턴스를 생성하는 방식으로 이루어집니다. 복원 후 애플리케이션의 연결 엔드포인트를 새 인스턴스로 변경해야 합니다.
DB 엔진의 설정값(예: max_connections, character_set)은 파라미터 그룹으로 관리합니다. RDS 인스턴스는 VPC 내에 배치되며, 보안 그룹으로 접근 허용 IP와 포트를 제어합니다. 퍼블릭 접근을 비활성화하면 동일 VPC 내 EC2나 Lambda에서만 접속할 수 있어 보안을 강화할 수 있습니다.