고성능 데이터베이스 솔루션

Aurora, DynamoDB, ElastiCache, Read Replica 등 고성능 DB 설계를 정리합니다.

SAA-C03 시험에서 데이터베이스 문제는 전체 출제 비중의 약 26%를 차지하는 설계(Design) 영역에 속합니다. "이 시나리오에 어떤 DB가 최적인가?", "DB 성능을 어떻게 향상시킬 것인가?" 두 가지 유형의 질문이 반복됩니다.

 

왜 DB를 선택하는 게 중요한가요?

집을 짓기 전에 땅의 특성을 알아야 합니다. 데이터베이스도 마찬가지입니다. 데이터의 구조, 접근 패턴, 트래픽 규모를 먼저 파악해야 적절한 DB를 선택할 수 있습니다. 틀린 DB를 선택하면 나중에 이전하기 매우 어렵습니다.

 

DB 선택 가이드 — 어떤 상황에 어떤 DB를?

관계형 DB가 필요하고 최고 성능을 원한다면 → Aurora

관계형 데이터베이스는 행과 열로 이루어진 테이블 구조를 씁니다. 주문 정보, 고객 데이터, 인벤토리처럼 구조화된 데이터에 씁니다. Aurora는 MySQL 또는 PostgreSQL과 완전히 호환되면서도 AWS가 직접 엔진을 최적화하여 성능을 크게 높인 제품입니다.

관계형 DB가 필요하고 Oracle이나 SQL Server가 필요하다면 → RDS

AWS가 직접 관리해주는 관계형 DB 서비스입니다. Oracle, SQL Server, MySQL, PostgreSQL, MariaDB를 지원합니다. 기존 애플리케이션이 특정 DB 엔진에 종속되어 있을 때 씁니다.

키-값 구조, 초고속 응답, 자동 스케일링이 필요하다면 → DynamoDB

SQL이 아닌 NoSQL 방식의 DB입니다. 테이블 스키마가 유연하고, 초당 수백만 건의 요청을 처리할 수 있으며, 서버리스로 운영할 수 있습니다. 모바일 게임 데이터, IoT 센서 데이터, 세션 관리에 씁니다.

DB 응답이 너무 느리다면 → ElastiCache

데이터베이스 앞에 캐시 레이어를 두어 자주 조회되는 데이터를 메모리에 보관합니다. 캐시에서 응답하면 DB까지 가지 않아도 됩니다.

대규모 데이터 분석이 필요하다면 → Redshift

수억 건의 데이터를 집계하고 분석하는 OLAP(분석처리) 용도의 데이터 웨어하우스입니다. 일반 트랜잭션 처리(OLTP)가 아닌 분석 전용입니다.

그래프 데이터라면 → Neptune

사람들 간의 관계, SNS 팔로워 관계, 추천 엔진처럼 데이터 사이의 관계가 핵심인 경우에 씁니다.

MongoDB 호환 문서 DB가 필요하다면 → DocumentDB

JSON 형태의 문서를 저장하고 MongoDB API와 호환되는 완전 관리형 서비스입니다.

!데이터베이스 선택: Aurora, RDS, DynamoDB, ElastiCache, Redshift

Aurora — 일반 차를 럭셔리 세단으로 업그레이드

Aurora를 한 문장으로 설명한다면: MySQL이나 PostgreSQL을 그대로 쓰면서 성능은 5배 이상 높인 서비스입니다.

왜 Aurora를 쓰나요?

일반 MySQL을 RDS에서 운영하면 단일 서버에 의존합니다. Aurora는 처음부터 클라우드 분산 환경에 맞게 설계되었습니다. 데이터를 3개 가용 영역에 걸쳐 6개 복사본으로 자동 유지하기 때문에 장애가 나도 데이터가 보호됩니다.

Aurora의 주요 특징

스토리지는 자동으로 10GB에서 128TB까지 늘어납니다. 최대 15개의 읽기 전용 복제본을 추가할 수 있습니다. 읽기 복제본은 마치 인기 도서관 책의 복사본과 같습니다. 원본(마스터)에는 대출 기록을 적고, 복사본들은 책 내용을 읽고 싶은 독자들에게 나눠줍니다. 이렇게 하면 마스터 DB에 걸리는 읽기 부하를 크게 줄일 수 있습니다.

Aurora Serverless v2

트래픽이 없을 때는 비용이 거의 발생하지 않다가, 트래픽이 몰리면 자동으로 용량이 늘어납니다. 개발/테스트 환경이나 트래픽이 불규칙한 서비스에 최적입니다.

Aurora Global Database

기본 리전에서 보조 리전으로 1초 이내에 복제합니다. 한국 사용자는 서울 리전에서, 미국 사용자는 버지니아 리전에서 읽기 성능을 높일 수 있습니다. 재해 복구(DR) 전략에도 핵심적으로 씁니다.

 

DynamoDB — 수백만 개 항목을 다루는 유연한 공책

DynamoDB를 한 문장으로 설명한다면: 스키마가 없어서 어떤 구조의 데이터도 저장할 수 있고, 수백만 건의 요청을 밀리초 안에 처리하는 NoSQL 데이터베이스입니다.

용량 모드 선택

프로비저닝 모드: 미리 읽기/쓰기 처리량을 지정합니다. 트래픽이 예측 가능하고 일정한 경우에 적합합니다. 예약 용량을 사면 비용을 절감할 수 있습니다.

온디맨드 모드: AWS가 트래픽에 맞게 알아서 조정합니다. 트래픽이 예측 불가능하거나 갑자기 급증할 수 있는 경우에 씁니다. 사용한 만큼만 과금합니다.

DAX (DynamoDB Accelerator) — 전화 단축번호

자주 통화하는 번호는 단축번호에 저장해서 번호 전체를 누르지 않아도 바로 전화합니다. DAX는 DynamoDB 앞에 설치하는 완전 관리형 인메모리 캐시입니다. 캐시에 있는 데이터는 마이크로초 응답이 가능합니다. 코드 수정도 거의 없이 DynamoDB SDK를 DAX 엔드포인트로 바꾸기만 하면 됩니다.

DynamoDB Global Tables

여러 리전에서 동시에 읽기와 쓰기를 모두 할 수 있는 액티브-액티브 멀티 리전 테이블입니다. 글로벌 사용자에게 낮은 지연 시간을 제공할 때 씁니다.

DynamoDB Streams

테이블에 변경(삽입, 수정, 삭제)이 발생하면 이벤트가 스트림으로 발행됩니다. Lambda를 트리거하여 데이터 변경에 반응하는 이벤트 기반 아키텍처를 만들 수 있습니다.

 

ElastiCache — DB 앞의 초고속 단기 기억

캐시는 자주 쓰는 데이터를 메모리에 올려두어 DB까지 가지 않고 바로 돌려주는 역할을 합니다. DB 쿼리를 줄이면 DB 부하가 줄고, 응답 시간이 빨라집니다.

ElastiCache for Redis — 스위스 아미 나이프

Redis는 단순한 캐시를 넘어 다양한 기능을 가진 인메모리 데이터 스토어입니다. 데이터 복제, 지속성(Persistence), 고가용성 클러스터, 다양한 데이터 구조(리스트, 셋, 정렬된 셋)를 지원합니다. 리더보드, 세션 스토어, 실시간 분석에 씁니다.

ElastiCache for Memcached — 단순 드라이버

기능은 Redis보다 적지만 그만큼 단순하고 빠릅니다. 단순 키-값 캐싱, 수평 확장이 필요할 때 씁니다. 복제나 지속성이 필요 없고 단순한 캐시만 필요할 때 선택합니다.

언제 Redis, 언제 Memcached?

복제, 지속성, 고급 자료 구조가 필요하면 → Redis 단순 캐싱, 복제 불필요, 수평 확장 우선이면 → Memcached

 

Read Replica — 인기 도서관 책의 복사본

읽기 트래픽이 많아서 마스터 DB에 과부하가 걸릴 때, 읽기 전용 복제본(Read Replica)을 만들어 읽기 쿼리를 분산합니다. 원본 마스터에는 쓰기만 하고, 여러 복제본에 읽기를 분산합니다.

Aurora는 최대 15개 읽기 복제본을 지원합니다. RDS는 최대 5개를 지원합니다. 복제본은 같은 리전 또는 다른 리전에 만들 수 있습니다.

 

시험 핵심 정리

"MySQL/PostgreSQL 호환, 최고 성능, 클라우드 네이티브" -- Aurora

"3개 AZ에 6개 복사본, 자동 스토리지 확장" -- Aurora의 핵심 특징

블로그 목록으로 돌아가기