이번 장은 AWS의 데이터베이스 서비스를 다룬다.
데이터베이스를 직접 서버에 설치해 운영하면 백업, 패치, 장애 대응이 모두 내 몫이다.
관리형 데이터베이스는 이 운영 부담을 AWS가 대신 진다.
이 장의 목표는 다음과 같다.
- RDS와 Aurora가 무엇인지 안다.
- 관계형(SQL)과 비관계형(NoSQL)을 구분한다.
- 멀티AZ와 읽기 복제본의 차이를 이해한다.
1. RDS — 관리형 관계형 DB
RDS는 Relational Database Service의 약자다.
MySQL, PostgreSQL, MariaDB, Oracle, SQL Server 같은 관계형 DB를 관리형으로 제공한다.
RDS를 쓰면 AWS가 다음을 대신 해 준다.
- 자동 백업과 스냅샷
- 소프트웨어 패치
- 장애 시 자동 복구
내가 SQL을 쓰고 데이터를 다루는 데만 집중하면 된다.
2. 멀티AZ — 고가용성
멀티AZ(Multi-AZ)는 DB를 두 AZ에 두는 구성이다.
- 주(primary) DB가 한 AZ에 있고, 대기(standby) DB가 다른 AZ에 자동 복제된다.
- 주 DB에 장애가 나면 대기 DB로 자동 전환(failover)된다.
주의할 점은 대기 DB는 읽기용이 아니다. 오직 장애 대비용이다.
멀티AZ의 목적은 "가용성"이지 "성능"이 아니다.
3. 읽기 복제본 — 읽기 성능 확장
읽기 복제본(Read Replica)은 성능을 위한 복제본이다.
읽기 요청이 많을 때, 복제본을 여러 개 만들어 읽기를 분산한다.
- 쓰기는 주 DB로, 읽기는 복제본으로 보낸다.
- 복제본은 비동기로 복제되어 약간의 지연이 있을 수 있다.
정리하면 이렇다.
| 구성 | 목적 | 읽기 처리 |
|---|---|---|
| 멀티AZ | 고가용성(장애 대비) | 대기본은 읽기 불가 |
| 읽기 복제본 | 성능(읽기 분산) | 복제본에서 읽기 가능 |
두 가지는 함께 쓸 수 있다.
4. Aurora — AWS의 고성능 DB
Aurora는 AWS가 직접 만든 관계형 DB 엔진이다.
MySQL, PostgreSQL과 호환되면서 성능과 가용성이 훨씬 좋다.
- 스토리지가 자동으로 늘어난다.
- 데이터를 3개 AZ에 6벌 복제해 매우 안전하다.
- Aurora Serverless는 트래픽에 따라 용량이 자동으로 늘고 준다.
성능이 중요하고 예산이 되면 RDS보다 Aurora를 고려한다.
5. DynamoDB — 관리형 NoSQL
DynamoDB는 완전 관리형 NoSQL(키-값/문서) 데이터베이스다.
관계형 DB와는 성격이 완전히 다르다.
- 스키마가 유연하다. 행마다 속성이 달라도 된다.
- 수평 확장이 자유로워 초대형 트래픽도 밀리초 단위로 응답한다.
- 서버를 신경 쓸 필요가 없다(서버리스).
기본 개념은 다음과 같다.
- 테이블: 항목(item)의 모음.
- 파티션 키: 데이터를 분산하는 기준. 잘 고르는 게 성능의 핵심이다.
- 정렬 키: 파티션 안에서 정렬 기준(선택).
간단한 CLI 예시:
aws dynamodb put-item \
--table-name Users \
--item '{"userId": {"S": "u123"}, "name": {"S": "Lee"}}'
6. 언제 무엇을 쓰나
- 복잡한 조인, 트랜잭션, 정형 데이터 → RDS/Aurora (SQL)
- 초대형 규모, 단순 조회, 유연한 스키마 → DynamoDB (NoSQL)
- 캐시로 DB 부하를 줄이고 싶다 → ElastiCache (Redis/Memcached)
정답은 하나가 아니다. 데이터 성격과 접근 패턴으로 고른다.
정리
- RDS는 관리형 관계형 DB, Aurora는 그 고성능 버전이다.
- 멀티AZ는 고가용성, 읽기 복제본은 읽기 성능 확장이다.
- DynamoDB는 초대형 규모에 강한 관리형 NoSQL이다.
- 데이터 성격에 따라 SQL과 NoSQL을 골라 쓴다.
다음 장에서는 트래픽을 분산하고 서버를 자동으로 늘리는 방법을 다룬다.
댓글 0
댓글은 운영자만 작성할 수 있어요.