데이터베이스 선택 기준
데이터베이스 선택은 데이터 모델과 접근 패턴에서 시작한다. 트랜잭션과 SQL이 필요한지, 키로 빠르게 조회하는지, 데이터 분석 쿼리가 중심인지에 따라 후보가 달라진다. 서비스 이름을 먼저 고르기보다 쓰기·읽기 패턴, 지연 목표, 운영 부담을 차례로 확인한다.
1. AWS 데이터베이스 서비스 전체 지도
관계형(SQL)
├── RDS — 기존 엔진 리프트&시프트 (MySQL, PostgreSQL, Oracle, SQL Server, MariaDB)
└── Aurora — AWS 재설계 고성능 관계형 DB
NoSQL / 특수 목적
├── DynamoDB — 서버리스 key-value / document, 밀리초 지연
├── ElastiCache — 인메모리 캐시 (Redis / Memcached)
├── MemoryDB — Redis 호환 + 내구성 (영속 저장 가능)
└── DocumentDB — MongoDB 호환 document DB
분석 / 데이터 웨어하우스
├── Redshift — 페타바이트급 OLAP, columnar
├── Athena — S3 위 SQL (서버리스)
└── OpenSearch — 검색 / 로그 분석
그래프 / 시계열 / 원장
├── Neptune — 그래프 DB
├── Timestream — 시계열 DB
└── QLDB — 불변 원장 DB
2. RDS (Relational Database Service)
핵심 개념
RDS는 EC2 위에서 실행되는 관리형 관계형 DB다. OS 패치, 백업, 복제를 AWS가 대신 처리한다.
| 항목 | 내용 |
|---|---|
| 지원 엔진 | MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2 |
| 배포 옵션 | Single-AZ / Multi-AZ / Multi-AZ DB Cluster |
| 스토리지 | gp2, gp3, io1, io2 (EBS 기반) |
| 최대 스토리지 | 64TB (io1/io2), 16TB (gp) |
| 읽기 확장 | Read Replica 최대 5개 (MySQL/PostgreSQL은 최대 15개) |
Multi-AZ vs Read Replica
| 구분 | Multi-AZ | Read Replica |
|---|---|---|
| 목적 | 고가용성 (HA) | 읽기 성능 향상 |
| 동기 방식 | 동기 복제 | 비동기 복제 |
| 엔드포인트 | 단일 DNS (자동 페일오버) | 별도 엔드포인트 |
| 다른 리전 가능 | 불가 | 가능 (Cross-Region) |
| 쓰기 가능 | 스탠바이 불가 | 불가 (읽기 전용) |
| 승격 | 자동 페일오버 | 수동 승격 가능 |
SAP 핵심: HA = Multi-AZ, 성능 = Read Replica. 둘을 함께 써도 된다.
RDS Proxy
Lambda나 짧은 수명의 클라이언트가 DB에 직접 연결하면 커넥션 풀이 폭발한다. RDS Proxy는 커넥션 풀링을 대신 처리해 DB 부하를 줄인다.
- Lambda → RDS 패턴에서 필수 고려
- IAM 인증 지원
- 페일오버 시간 66% 단축
RDS 백업
- 자동 백업: 매일 스냅샷 + 트랜잭션 로그 → 최대 35일 보존, 특정 시점 복구(PITR) 가능
- 수동 스냅샷: 보존 기간 무제한, 계정 간 공유 가능
3. Aurora
Aurora가 RDS와 다른 이유
Aurora는 AWS가 클라우드 환경에 맞게 새로 설계한 관계형 DB다. MySQL·PostgreSQL과 호환되지만 내부 아키텍처가 완전히 다르다.
┌─────────────┐
Write │ Primary DB │
(AZ-a) │ Instance │
└──────┬──────┘
│ 공유 스토리지 볼륨
┌────────────┼────────────┐
AZ-a │ AZ-b │ AZ-c │
Copy1,2│ Copy3,4│ Copy5,6│
스토리지가 3 AZ에 걸쳐 6개 사본 으로 자동 복제된다. 인스턴스가 스토리지를 소유하지 않기 때문에 Read Replica를 추가해도 스토리지 복사가 일어나지 않는다.
Aurora vs RDS 비교
| 항목 | RDS | Aurora |
|---|---|---|
| 스토리지 복제 | EBS 단일 볼륨 | 3 AZ × 2 = 6사본 |
| Read Replica | 최대 5~15개 | 최대 15개 |
| 페일오버 시간 | 약 60~120초 | 약 30초 미만 |
| 스토리지 자동 증가 | 수동 설정 | 10GB 단위 자동 (최대 128TB) |
| 비용 | 표준 | RDS 대비 약 20% 높음 |
| 쓰기 처리량 | 표준 | MySQL 대비 최대 5배 |
Aurora 주요 기능
Aurora Serverless v2
- 트래픽에 따라 0.5 ACU 단위로 자동 스케일 업/다운
- 예측 불가능한 부하, 개발/테스트 환경에 적합
- v1은 콜드 스타트 있음, v2는 즉시 스케일
Aurora Global Database
- 최대 5개 보조 리전
- 보조 리전 복제 지연 < 1초
- 재해 복구 시 보조 리전을 Primary로 승격 (RPO < 1초, RTO < 1분)
Aurora Multi-Master
- 모든 인스턴스가 쓰기 가능
- 단, 충돌 해결은 애플리케이션 책임
SAP 핵심: 글로벌 DR = Aurora Global Database, 서버리스 = Aurora Serverless v2
4. DynamoDB
핵심 특성
DynamoDB는 완전 관리형 서버리스 NoSQL DB다. 스키마가 없고, 수평 확장이 무한에 가깝다.
| 항목 | 내용 |
|---|---|
| 데이터 모델 | Key-Value + Document (JSON) |
| 지연 시간 | 한 자릿수 밀리초 |
| 스케일 | 페타바이트, 초당 수백만 요청 |
| 내구성 | 3 AZ 자동 복제 |
| 서버 관리 | 불필요 |
기본 구조
테이블
└── 아이템 (행)
└── 속성 (열, 동적 스키마)
기본키 구성:
- Partition Key (PK) 단독
- Partition Key + Sort Key (복합키)
용량 모드
| 구분 | On-Demand | Provisioned |
|---|---|---|
| 설정 | 불필요 | RCU/WCU 직접 설정 |
| 비용 | 요청당 과금 | 프로비저닝량 기반 |
| 적합 | 예측 불가한 트래픽 | 일정한 트래픽 |
| Auto Scaling | 해당 없음 | 지원 |
RCU = 1 강한 일관성 읽기 또는 2 최종 일관성 읽기 (4KB 단위) WCU = 1 쓰기 (1KB 단위)
DynamoDB 주요 기능
DynamoDB Accelerator (DAX)
- DynamoDB 전용 인메모리 캐시
- 읽기 지연을 밀리초 → 마이크로초로 단축
- 애플리케이션 코드 변경 최소화 (SDK 호환)
DynamoDB Streams
- 테이블 변경 이벤트를 스트림으로 발행
- Lambda와 조합해 이벤트 기반 아키텍처 구현
- 변경 후 24시간 보존
Global Tables
- 다중 리전 복제 (Active-Active)
- 어느 리전에서든 읽기/쓰기 가능
- 리전 간 지연 < 1초 목표
TTL (Time To Live)
- 아이템에 만료 시각 속성 설정
- 만료된 아이템 자동 삭제 (비용 무료)
- 세션 데이터, 임시 토큰에 유용
DynamoDB 일관성 모델
| 구분 | 최종 일관성 | 강한 일관성 |
|---|---|---|
| 기본값 | O | X |
| 비용 | 표준 | RCU 2배 소비 |
| 사용 | 대부분의 읽기 | 금융, 재고 등 |
5. ElastiCache
Redis vs Memcached
| 항목 | Redis | Memcached |
|---|---|---|
| 데이터 구조 | String, List, Set, Hash, ZSet 등 | String만 |
| 영속성 | AOF/RDB 지원 | 없음 |
| 복제 | 지원 (Multi-AZ) | 없음 |
| 클러스터 | 지원 | 지원 |
| Pub/Sub | 지원 | 없음 |
| 순위판 | ZSet으로 구현 | 불가 |
SAP 핵심: 기능이 필요하다면 Redis, 단순 캐시만 필요하다면 Memcached
ElastiCache 패턴
Lazy Loading (Cache-Aside)
1. 앱 → 캐시 조회
2. 캐시 미스 → DB 조회
3. DB 결과를 캐시에 저장
4. 앱에 반환
- 캐시에 실제 사용된 데이터만 저장
- 캐시 미스 시 3번의 왕복 발생
Write-Through
1. 앱 → DB 쓰기
2. 동시에 캐시에도 쓰기
- 캐시가 항상 최신 상태
- 쓰기 레이턴시 증가
MemoryDB for Redis
- Redis 호환 + 내구성 있는 데이터 저장
- 트랜잭션 로그를 Multi-AZ에 기록
- ElastiCache Redis가 캐시 계층이라면, MemoryDB는 주 데이터베이스로 사용 가능
- 마이크로초 읽기, 한 자릿수 밀리초 쓰기
6. Redshift
OLTP vs OLAP
| 구분 | OLTP | OLAP |
|---|---|---|
| 대표 서비스 | RDS, Aurora, DynamoDB | Redshift |
| 쿼리 특성 | 짧고 빈번한 트랜잭션 | 복잡한 집계, 분석 |
| 데이터 크기 | GB ~ TB | TB ~ PB |
| 스토리지 방식 | Row-based | Columnar |
Redshift는 컬럼형 스토리지를 사용해 집계 쿼리를 매우 빠르게 처리한다.
주요 특성
| 항목 | 내용 |
|---|---|
| 노드 타입 | RA3 (스토리지 분리), DC2 (로컬 SSD) |
| 최대 규모 | 페타바이트급 |
| 인터페이스 | PostgreSQL 호환 SQL |
| 병렬 처리 | MPP (Massively Parallel Processing) |
Redshift 주요 기능
Redshift Spectrum
- Redshift 클러스터에서 S3 데이터를 직접 쿼리
- S3에 데이터를 두고 필요할 때만 조회 (비용 절감)
Redshift Serverless
- 클러스터 관리 불필요
- 자동 스케일, 사용량 기반 과금
AQUA (Advanced Query Accelerator)
- 하드웨어 기반 쿼리 가속
- RA3 노드에서 자동 활성화
7. SAP 시나리오별 DB 선택 가이드
시나리오 패턴 정리
패턴 1: 기존 관계형 DB 마이그레이션
Oracle/SQL Server → RDS (같은 엔진) 또는 Aurora (MySQL/PostgreSQL 호환으로 전환)
패턴 2: 글로벌 서비스, 낮은 지연 필요
단일 리전 → Aurora Global Database Active-Active 필요 → DynamoDB Global Tables
패턴 3: 예측 불가한 트래픽, 서버리스 아키텍처
관계형 필요 → Aurora Serverless v2 NoSQL 가능 → DynamoDB On-Demand
패턴 4: 세션 저장소, 리더보드, 실시간 캐시
ElastiCache Redis 순위판(Leaderboard) → Redis Sorted Set
패턴 5: Lambda + DB 연결 시 커넥션 폭발
RDS Proxy 필수
패턴 6: 수백만 req/s, 밀리초 미만 응답
DynamoDB + DAX
패턴 7: 데이터 분석, BI 대시보드, 로그 집계
Redshift (페타바이트 분석) Athena (S3 위 서버리스 SQL, 간단한 분석)
패턴 8: IoT 시계열 데이터
Timestream
패턴 9: SNS/MongoDB처럼 유연한 문서 저장
DocumentDB (MongoDB 호환)
패턴 10: 소셜 그래프, 추천 엔진
Neptune (그래프 DB)
빠른 판단 체크리스트
SQL이 필요한가?
Y → 기존 엔진 유지해야 하나?
Y → RDS
N → Aurora (성능/HA 더 좋음)
N → 얼마나 빠른 응답이 필요한가?
마이크로초 → DynamoDB + DAX
밀리초 → DynamoDB
분석/집계 → Redshift or Athena
캐시 → ElastiCache Redis
글로벌 복제가 필요한가?
관계형 → Aurora Global Database
NoSQL → DynamoDB Global Tables
서버리스여야 하나?
관계형 → Aurora Serverless v2
NoSQL → DynamoDB On-Demand
분석 → Athena / Redshift Serverless
8. 데이터베이스 마이그레이션
AWS DMS (Database Migration Service)
- 이기종 DB 마이그레이션 도구
- CDC(Change Data Capture) 로 무중단 마이그레이션 가능
- 소스 → DMS 복제 인스턴스 → 타겟
온프레미스 Oracle
→ DMS (Full Load + CDC)
→ Aurora PostgreSQL
SCT (Schema Conversion Tool)
- 스키마, 저장 프로시저, 함수를 타겟 DB에 맞게 자동 변환
- DMS 전에 SCT로 스키마 먼저 변환
9. 핵심 암기 포인트
| 키워드 | 선택 |
|---|---|
| 고가용성 (HA) | Multi-AZ |
| 읽기 성능 향상 | Read Replica |
| 글로벌 DR < 1초 | Aurora Global Database |
| Active-Active 글로벌 | DynamoDB Global Tables |
| Lambda + DB 커넥션 | RDS Proxy |
| 밀리초 미만 캐시 | DAX (DynamoDB), ElastiCache |
| 페타바이트 분석 | Redshift |
| 서버리스 SQL | Aurora Serverless v2 |
| 이벤트 기반 DB 변경 | DynamoDB Streams + Lambda |
| TTL 자동 삭제 | DynamoDB TTL |
| 세션/리더보드/Pub-Sub | ElastiCache Redis |
| MongoDB 호환 | DocumentDB |
| 그래프 | Neptune |
| 시계열 | Timestream |
마무리
이번 포스트에서 다룬 내용을 한 줄로 요약하면:
- 관계형 + HA → Aurora (또는 RDS Multi-AZ)
- 글로벌 + 낮은 지연 → Aurora Global / DynamoDB Global Tables
- 서버리스 + 예측 불가 트래픽 → Aurora Serverless v2 / DynamoDB On-Demand
- 캐시 → ElastiCache Redis
- 분석 → Redshift
- NoSQL 밀리초 → DynamoDB
이어 읽기: 07. S3·EBS·EFS·FSx 스토리지 선택