RDS는 사용자가 데이터베이스를 직접 설치하고 운영하는 번거로움을 대신해주는 관리형 서비스이다.
1. 백업 (Backup & Restore)
데이터베이스에서 가장 중요한 것인 데이터를 잃지 않는 것이다.
- 자동 백업 (Automatic Backup)
- RDS는 매일 전체 스냅샷을 찍고 트랜잭션 로그를 저장한다.
- 보존 기간: 보통 7~35일로 설정하여 이 기간 내라면 어떤 시점이라도 복구 가능하다 (Point-in-Time Recovery)
- 수동 스냅샷 (Manual Snapshot)
- 사용자가 직접 원하는 시점에 생성하며 명시적으로 삭제하기 전까지는 영구 보관된다.
- 서비스 업데이트 직전 등 중요한 이벤트 전에 수행한다.
- 복구 방식
- 기존 DB를 덮어쓰는 것이 아니라 백업 데이터를 바탕으로 새로운 RDS 인스턴스를 생성한다.
2. 패치 및 유지 관리 (Patching & Maintenance)
소프트웨어는 보안과 안정성을 위해 업데이트가 필수이다.
- 자동 부이너 버전 업그레이드: MySQL의 마이너 버전 업데이트를 AWS가 자동으로 수행하도록 설정할 수 있다.
- 유지 관리 창 (Maintenance Window)
- 업데이트가 진행될 시간대를 정할 수 있다
- 보통 사용자가 가장 적은 새벽 시간대를 사용한다.
- 업데이트 중에는 아주 짧은 연결 끊김이 발생할 수 있으므로 애플리케이션에 재시도 로직이 구현되어 있어야하낟.
3. 고가용성 및 성능 확장 (Multi-AZ & Read Replica)
MySQL 인프라를 설계할 때 가장 핵심이 되는 부분이다.
3.1. Multi-AZ (고가용성)
- 구조: 다른 가용 영역(AZ)에 대기용(Standby) DB를 하나 더 둔다.
- 작동: 메인 DB에 문제가 생기면 AWS가 자동으로 대기용 DB를 메인으로 승격시킨다 (Failover)
- 목적: 데이터 보존과 서비스 지속성이 목적이다 (성능 향상 용도가 아님)
3.2. 읽기 전용 복제본 (Read Replica)
- 구조: 메인 DB의 데이터를 실시간으로 복제하는 별도의 DB 인스턴스를 만든다.
- 작동
- Write(CUD) 요청은 메인 DB로 보낸다
- Read(R) 요청은 복제본으로 보낸다.
- 백엔드 개발자 적용: 애플리케이션 코드(예: Springboot의
@Trancational(readOnly = true))에서 읽기 전용 DB 커넥션을 분리하여 전체적인 성능을 높일 수 있다.
4. MySQL 사용자를 위한 실무 팁
- 파라미터 그룹 (Parameter Group)
- MySQL의
my.cnf 설정을 AWS 콘솔에서 관리하는 기능이다.
max_connections, wait_timeout, character_ser_server (utf8mb4 필수) 등을 여기서 수정한다.
- 스토리지 오토스케일링
- 데이터가 쌓여서 용량이 부족해지면 자동으로 하드디스크 크기를 늘려주는 기능을 켜두는 것이 좋다.
- 보안 그룹 설정
- RDS는 무조건 Private Subnet에 두고, 보안 그룹에서 API 서버의 보안 그룹 ID로부터 오는 3306 포트만 허용해야 한다.
5. 백엔드 개발자 체크리스트
- 백업 기간은 충분한가? (보통 7일 이상)
- Multi-AZ가 켜져있는가? (운영 환경이라면 필수)
- 읽기 부하가 심한데 Read Replica를 고려했는가?
- DB 암호를 Secret Manager에 저장했는가?
- Slow Query 로그를 활성화하여 성능을 모니터링하고 있는가?