
AWS RDS 완전 정복: 데이터베이스 관리라는 '야간 당직'에서 해방되는 법
새벽 3시에 DB 장애 알림을 받고 출근하던 시대에서, 백업·패치·복구·스케일링이 자동화된 시대로. RDS가 왜 탄생했고, 어떻게 DBA의 일상을 바꿨으며, Aurora는 왜 '재발명'이라 불리는지를 실전 사례와 함께 풀어본다.

새벽 3시에 DB 장애 알림을 받고 출근하던 시대에서, 백업·패치·복구·스케일링이 자동화된 시대로. RDS가 왜 탄생했고, 어떻게 DBA의 일상을 바꿨으며, Aurora는 왜 '재발명'이라 불리는지를 실전 사례와 함께 풀어본다.
데이터베이스 관리자(DBA)에게는 공포의 시나리오가 있다.
새벽 3시, 전화가 울린다. "DB 서버가 응답하지 않습니다." 잠이 덜 깬 채로 VPN에 접속하고, SSH로 서버에 들어가고, MySQL 프로세스 목록을 확인한다. 디스크가 꽉 찼다. 로그 파일이 디스크를 다 먹었다. 급하게 로그를 삭제하고, 서비스를 재시작하고, 데이터가 무사한지 확인하고 — 새벽 5시가 되어서야 다시 잠든다.
이것은 과장이 아니라, EC2에 직접 데이터베이스를 설치·운영하는 기업에서 실제로 반복되던 일상이었다.
데이터베이스는 모든 서비스의 심장이다. 웹 서버가 죽어도 재시작하면 되지만, 데이터베이스가 죽으면 데이터가 사라질 수 있다. 그래서 DB 운영은 모든 인프라 운영 중 가장 까다롭고, 가장 스트레스가 높은 영역이다.
"DB 설치·패치·백업·복구·스케일링을 AWS가 대신 해주면 안 되나?"
이 질문에 대한 답이 RDS(Relational Database Service)다.
EC2 인스턴스에 MySQL을 직접 설치해서 운영하면, 이런 것들을 전부 직접 해야 한다:
| 작업 | 빈도 | 위험도 | 자동화 가능? |
|---|---|---|---|
| DB 엔진 설치·설정 | 초기 1회 | 중 | 부분적 |
| OS 보안 패치 | 월 1~2회 | 중 | 스크립트 |
| DB 엔진 버전 업그레이드 | 분기~연 1회 | 높음 | 어려움 |
| 일일 백업 | 매일 | 높음 | 크론 + 스크립트 |
| 백업 복원 테스트 | 월 1회 | 높음 | 수동 |
| 디스크 용량 모니터링 | 상시 | 중 | 가능 |
| 디스크 확장 | 필요 시 | 높음 | 다운타임 필요 |
| 읽기 복제본(Read Replica) 구성 | 필요 시 | 높음 | 복잡 |
| 장애 시 페일오버 | 장애 발생 시 | 매우 높음 | 복잡한 설정 |
| 성능 튜닝 | 상시 | 중 | 경험 의존 |
핵심 문제: DBA의 시간 대부분이 **"데이터를 안전하게 지키는 것"**에 쓰이고, 정작 **"데이터를 활용하는 것"**에 쓸 시간이 부족하다.
2017년 1월, GitLab에서 벌어진 유명한 사고를 보자. 한 엔지니어가 DB 복제 문제를 해결하려다 프로덕션 데이터베이스를 실수로 삭제했다. 6시간 분량의 데이터가 사라졌다. 5가지 백업 방법 중 제대로 작동하는 것이 하나도 없었다. GitLab은 이 사고를 투명하게 공개하며 라이브 스트리밍으로 복구 과정을 보여줬는데, 전 세계 개발자 커뮤니티에 "백업은 복원 테스트를 해야 의미가 있다"는 교훈을 남겼다.
2009년 10월, AWS는 RDS(Relational Database Service)를 출시했다. 처음에는 MySQL만 지원했다. 핵심 약속:
"데이터베이스 엔진의 설치, 패치, 백업, 복구, 스케일링을 AWS가 대신 한다. 당신은 데이터와 쿼리에만 집중하라."
| 엔진 | 유형 | 대표적 사용 사례 |
|---|---|---|
| MySQL | 오픈소스 RDBMS | 범용 웹 서비스. 가장 널리 사용 |
| PostgreSQL | 오픈소스 RDBMS | 복잡한 쿼리, GIS, JSON 처리 |
| MariaDB | MySQL 포크 | MySQL 대안, 커뮤니티 주도 |
| Oracle | 상용 RDBMS | 레거시 엔터프라이즈 |
| SQL Server | 상용 RDBMS | .NET 생태계 |
| Aurora | AWS 자체 개발 | MySQL/PostgreSQL 호환, 고성능 |
RDS의 가장 중요한 기능. Multi-AZ를 활성화하면 RDS는 다른 가용 영역(AZ)에 동기식 대기(Standby) 복제본을 자동으로 유지한다.
Primary 인스턴스에 장애가 발생하면:
EC2에서 이것을 구현하면? Keepalived, HAProxy, Pacemaker 같은 도구를 설치하고 설정하고 테스트하는 데 며칠~수 주가 걸린다. RDS에서는 체크박스 하나.
트래픽이 증가하면 DB가 병목이 된다. 특히 읽기 쿼리가 대부분인 서비스에서.
RDS Read Replica는 Primary의 데이터를 비동기적으로 복제하는 읽기 전용 인스턴스다:
# 애플리케이션에서의 읽기/쓰기 분리 패턴
import sqlalchemy
# 쓰기는 Primary로
write_engine = sqlalchemy.create_engine("mysql://primary-endpoint:3306/mydb")
# 읽기는 Replica로
read_engine = sqlalchemy.create_engine("mysql://replica-endpoint:3306/mydb")
RDS는 매일 자동으로 DB 스냅샷을 생성하고, 트랜잭션 로그를 5분 간격으로 S3에 저장한다.
시점 복구(Point-in-Time Recovery, PITR): 지난 35일 이내의 아무 시점으로 DB를 복원할 수 있다. "오늘 오후 2시 35분 22초의 DB 상태로 돌려줘"가 가능하다.
aws rds restore-db-instance-to-point-in-time 한 줄로 삭제 직전 시점으로 복구할 수 있었다. 전체 복구 과정이 수 분이면 끝난다.2018년 도입된 RDS의 성능 분석 도구. DB의 병목이 어디인지 시각적으로 보여준다:
별도의 모니터링 도구(Datadog, New Relic)를 설치하지 않아도 상당한 수준의 성능 분석이 가능하다.
2014년 AWS re:Invent에서 발표된 Amazon Aurora는 RDS의 가장 혁신적인 엔진이다. AWS VP Anurag Gupta가 발표하며 사용한 표현: "클라우드를 위해 관계형 데이터베이스를 재발명했다(reinvented)."
기존 MySQL/PostgreSQL을 그대로 클라우드에 올린 것이 아니라, 스토리지 레이어를 완전히 새로 설계했다.
전통적 DB에서는 데이터가 DB 서버의 로컬 디스크에 저장된다. Aurora는 이것을 뒤집었다:
Aurora의 스토리지는:
AWS가 발표한 벤치마크:
2018년 출시된 Aurora Serverless는 서버리스 개념을 DB에 적용한 것이다:
개발/테스트 환경, 트래픽이 불규칙한 서비스에 이상적이다.
해커가 웹 서버를 장악하는 것은 수단이다. 진짜 목표는 데이터베이스에 있는 데이터다 — 사용자 정보, 결제 데이터, 비즈니스 기밀.
1. 네트워크 격리: RDS 인스턴스를 프라이빗 서브넷에 배치. 인터넷에서 직접 접근 불가. 애플리케이션만 접근 가능.
2. 암호화:
require_secure_transport=ON3. IAM 인증: 전통적 사용자/비밀번호 대신 IAM 토큰으로 DB 인증. 비밀번호 관리와 회전이 불필요해진다.
4. Secrets Manager 연동: DB 비밀번호를 코드에 하드코딩하지 말고, Secrets Manager에 저장하고 자동 회전 설정.
| 항목 | 설명 | 비고 |
|---|---|---|
| 인스턴스 | 시간당 과금. 인스턴스 클래스에 따라 다름 | 가장 큰 비용 |
| 스토리지 | GB/월. gp3, io1 등 타입에 따라 다름 | gp3가 대부분 충분 |
| 백업 | DB 크기까지 무료. 초과분 GB/월 과금 | 자동 백업은 무료 범위 내 |
| 데이터 전송 | 리전 내 무료. 리전 간, 인터넷 아웃은 과금 | Read Replica 복제는 무료 |
| Multi-AZ | 인스턴스 비용의 약 2배 | Standby 인스턴스 비용 |
| 라이선스 | Oracle, SQL Server는 라이선스 포함 옵션 | BYOL도 가능 |
1. Reserved Instances: 1~3년 약정으로 최대 60% 할인. 프로덕션 DB처럼 장기 운영하는 인스턴스에 필수.
2. 적정 사이즈: CloudWatch와 Performance Insights로 실제 CPU/메모리 사용률을 확인. 과도한 인스턴스는 한 단계 낮추기.
3. 개발/테스트 환경: Aurora Serverless 사용 → 업무 시간 외에 자동 일시 중지. 또는 스케줄로 인스턴스를 중지/시작.
4. Graviton 인스턴스: ARM 기반 db.r7g, db.m7g 클래스는 x86 대비 20% 저렴하면서 동등 이상의 성능.
db.r7g.large + 1년 RI로 시작하라.| 기준 | EC2 자체 운영 | RDS (MySQL/PostgreSQL) | Aurora |
|---|---|---|---|
| 관리 부담 | 높음 (모두 직접) | 낮음 (AWS 관리) | 매우 낮음 |
| 성능 | 튜닝에 따라 가변 | 표준 수준 | MySQL 5배, PG 3배 |
| 가용성 | 직접 구현 | Multi-AZ 60초 페일오버 | 더 빠른 페일오버 (~30초) |
| 스토리지 | EBS 수동 관리 | EBS 자동 확장 옵션 | 128TB 자동 확장 |
| 읽기 확장 | 수동 Replica 구성 | 최대 5개 Replica | 최대 15개 Replica |
| 비용 | 가장 저렴 (인스턴스만) | 중간 | RDS보다 ~20% 높음 |
| 서버리스 옵션 | 없음 | 없음 | Aurora Serverless v2 |
| 적합한 경우 | 극도의 커스터마이징 필요 | 대부분의 워크로드 | 고성능, 고가용성 |
Airbnb는 자체 관리 PostgreSQL에서 Aurora PostgreSQL로 마이그레이션했다. 결과:
Samsung SmartThings는 전 세계 수억 대의 IoT 기기 데이터를 Aurora에 저장한다. 글로벌 Aurora로 여러 리전에서 저지연 읽기를 제공한다.
언어 학습 앱 Duolingo는 부하가 시간대별로 크게 변동한다. Aurora Serverless v2를 사용하여 새벽에는 최소 용량, 피크 타임에는 자동 확장하여 비용을 40% 절감했다.
2024년 re:Invent에서 발표된 Aurora DSQL은 여러 리전에 걸쳐 강력한 일관성을 가진 분산 SQL 데이터베이스다. Google Spanner에 대한 AWS의 대답으로, 글로벌 서비스에 단일 DB 엔드포인트를 제공한다.
SELECT predict_sentiment(review_text) FROM reviewsRDS의 핵심 가치는 이렇다:
DBA의 시간을 "DB를 살아있게 유지하는 것"에서 "데이터를 활용하는 것"으로 전환시킨 것.
패치를 적용하고, 백업을 확인하고, 디스크를 확장하고, 장애에 대응하는 — 이런 "유지보수"는 가치를 만들지 않는다. 하지만 데이터 모델을 설계하고, 쿼리를 최적화하고, 데이터에서 인사이트를 추출하는 것은 비즈니스 가치를 직접 만든다.
RDS(그리고 Aurora)가 전자를 대신 해줌으로써, DB 전문가는 후자에 집중할 수 있게 됐다. 이것이 "관리형"의 진짜 의미다 — 관리를 없앤 것이 아니라, 관리의 주체를 바꾼 것이다.
코어닷투데이의 AI 서비스에서도 데이터베이스는 핵심이다. AI 모델의 메타데이터, 사용자 데이터, 추론 결과 — 이 모든 것이 Aurora PostgreSQL에 안전하게 저장되고, pgvector로 벡터 검색이 수행되며, Multi-AZ로 데이터가 보호된다. 새벽 3시에 전화가 울리는 대신, DB가 조용히 자기 할 일을 한다.