Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

65장. Aurora — 클라우드 네이티브 RDS

이 장에서 말하고자 하는 것

RDS는 기존 관계형 DB 엔진을 그대로 관리해주는 서비스다.

AWS는 한 발 더 나아가
“클라우드 환경에 맞춰 새로 설계한” 관계형 DB를 만들었다.

Amazon Aurora

다.

Aurora는 MySQL · PostgreSQL 과 호환 되지만
내부 구조는 완전히 다르다.


1. Aurora가 다른 점

스토리지가 분리되어 있다

일반 RDS:
  [DB 인스턴스] = 컴퓨트 + 스토리지 한 묶음

Aurora:
  [Writer · Reader 인스턴스]
       ↓ 공유
  [Aurora Storage Layer (10GB 단위로 6 AZ에 분산 복제)]
  • 스토리지가 자동 확장 (10GB → 최대 128TB)
  • 6중 복제 (3 AZ × 2)
  • 한 노드가 죽어도 스토리지는 살아 있음

Replica가 같은 스토리지를 본다

Writer ──┐
         ├─ 같은 스토리지를 공유
Reader 1 ┤
Reader 2 ┘
  • Replica 복제 지연이 매우 작다 (보통 < 10ms)
  • Replica 추가가 빠르다 (스토리지를 새로 만들지 않으므로)

2. RDS vs Aurora 핵심 비교

항목RDSAurora
호환 엔진PG · MySQL · Oracle 등PG · MySQL 호환
스토리지인스턴스에 붙음분리된 클러스터 스토리지
복제 지연수 초까지보통 < 10ms
Replica 추가 속도느림빠름
최대 스토리지64 TB (엔진별)128 TB
비용일반적으로 더 쌈약간 더 비쌈
페일오버60~120초30초 내외

3. Aurora Serverless v2

Aurora는 서버리스 옵션을 제공한다.

워크로드에 따라 ACU (Aurora Capacity Unit) 가 자동 확장
0.5 ACU ~ 128 ACU 범위
  • 트래픽 없으면 작게, 폭증하면 자동 확장
  • 개발/스테이징 · 들쭉날쭉한 워크로드에 적합

“들쭉날쭉” + “관계형” 이면 Aurora Serverless v2 가 답일 수 있다


4. Aurora Global Database

여러 리전에 클러스터를 두고 통합 관리할 수 있다.

[ap-northeast-2: Primary 리전]
       ↓ 빠른 복제 (보통 < 1초)
[us-east-1: Secondary 리전 (읽기)]
  • 리전 간 복제 지연이 매우 작다
  • 리전 전체 장애 시 다른 리전을 승격 (DR)

5. 어떤 걸 고를까 — RDS vs Aurora

간단하고 비용을 최대한 낮추고 싶다 → RDS
복제 지연을 짧게 두고 싶다       → Aurora
Replica를 빠르게 늘리고 싶다     → Aurora
들쭉날쭉한 워크로드             → Aurora Serverless v2
글로벌 / DR이 중요              → Aurora Global Database
Oracle · SQL Server 호환 필요   → RDS (Aurora 미지원)

6. 우리 서비스에서

이 책의 척추 구조에서는 두 선택지가 다 자연스럽다.

초기 단계: RDS PostgreSQL Multi-AZ
중대형 단계: Aurora PostgreSQL 호환으로 마이그레이션
글로벌 단계: Aurora Global Database

시작은 RDS, 자라면 Aurora — 두 단계 진화가 흔하다


7. 직접 확인해보기 — CLI

Aurora 클러스터 만들기

aws rds create-db-cluster \
  --db-cluster-identifier orders-aurora \
  --engine aurora-postgresql \
  --engine-version 16 \
  --master-username appadmin \
  --manage-master-user-password \
  --db-subnet-group-name private-subnets \
  --vpc-security-group-ids sg-xxx

Writer · Reader 인스턴스 추가

aws rds create-db-instance \
  --db-instance-identifier orders-aurora-writer \
  --db-cluster-identifier orders-aurora \
  --engine aurora-postgresql \
  --db-instance-class db.r6g.large

aws rds create-db-instance \
  --db-instance-identifier orders-aurora-reader-1 \
  --db-cluster-identifier orders-aurora \
  --engine aurora-postgresql \
  --db-instance-class db.r6g.large

8. 코드로는 이렇게 생겼다 — Terraform

resource "aws_rds_cluster" "orders" {
  cluster_identifier      = "orders-aurora"
  engine                  = "aurora-postgresql"
  engine_version          = "16"

  master_username             = "appadmin"
  manage_master_user_password = true

  db_subnet_group_name   = aws_db_subnet_group.main.name
  vpc_security_group_ids = [aws_security_group.db.id]

  backup_retention_period = 7
  deletion_protection     = true
}

resource "aws_rds_cluster_instance" "writer" {
  identifier         = "orders-aurora-writer"
  cluster_identifier = aws_rds_cluster.orders.id
  engine             = aws_rds_cluster.orders.engine
  instance_class     = "db.r6g.large"
  publicly_accessible = false
}

resource "aws_rds_cluster_instance" "reader" {
  identifier         = "orders-aurora-reader-1"
  cluster_identifier = aws_rds_cluster.orders.id
  engine             = aws_rds_cluster.orders.engine
  instance_class     = "db.r6g.large"
  publicly_accessible = false
}

Aurora 클러스터의 두 엔드포인트:

  • cluster_endpoint — Writer
  • reader_endpoint — Reader 로드 밸런싱

9. 두 엔드포인트의 운영

Writer 엔드포인트  → 쓰기 + 강한 일관성 읽기
Reader 엔드포인트  → 읽기 (여러 Reader에 분산)

Writer 페일오버가 일어나면 cluster_endpoint가 자동으로 새 Writer를 가리킨다.

애플리케이션이 cluster_endpoint를 쓰면 페일오버에 따로 신경 쓸 게 거의 없다


10. 이렇게 쓰면 망한다 — 안티패턴

안티패턴 1. Aurora에 RDS와 똑같은 사고로 접근

Aurora의 빠른 Replica · Serverless · Global 같은 강점을 안 쓰면 그냥 더 비싼 RDS가 된다.

안티패턴 2. Reader 엔드포인트로 강한 일관성 읽기를 보낸다

복제 지연이 작아도 0은 아니다.

방금 만든 데이터를 즉시 보는 화면은 Writer로

안티패턴 3. Aurora Serverless v1 을 새로 시작한다

v1은 사실상 deprecated. 신규는 무조건 v2.

안티패턴 4. Aurora 클러스터를 한 AZ에만 둔다

서브넷 그룹이 한 AZ만 가지면 Aurora의 6중 복제 의미가 줄어든다.


11. 한 줄로 정리

Aurora는 스토리지가 분리된 클라우드 네이티브 관계형 DB이며,
복제 지연 · 빠른 Replica · 서버리스 · 글로벌이 RDS와 결정적으로 다른 점이다


12. 이 장의 핵심 정리

  1. Aurora는 RDS와 호환되지만 내부 구조가 다른 DB다.
  2. 스토리지가 분리돼 있어 Replica 추가가 빠르고 복제 지연이 작다.
  3. Aurora Serverless v2는 들쭉날쭉한 워크로드에 적합하다.
  4. Aurora Global Database로 리전 간 복제·DR을 다룰 수 있다.
  5. 시작은 RDS, 자라면 Aurora 가 흔한 진화 경로다.
  6. cluster_endpoint / reader_endpoint 두 엔드포인트 운영이 표준이다.