Amazon Dynamo
1. 개요
1. 개요
아마존 다이나모DB는 아마존닷컴이 개발하고 아마존 웹 서비스가 제공하는 완전관리형 NoSQL 데이터베이스 서비스이다. 2012년 1월 18일에 발표되었으며, 키-값 데이터베이스와 도큐먼트 지향 데이터베이스의 특성을 모두 지닌다. 이 서비스는 서버 프로비저닝, 패치 적용, 클러스터 확장과 같은 인프라 관리 부담 없이 애플리케이션 개발에 집중할 수 있도록 설계되었다.
다이나모DB의 핵심은 뛰어난 확장성과 가용성에 있다. 서비스는 사용자의 데이터와 트래픽 양에 따라 자동으로 백그라운드에서 처리 용량을 조정하며, 데이터는 여러 가용 영역에 걸쳐 자동으로 복제되어 하드웨어 장애나 데이터 센터 중단 시에도 내구성과 지속적인 가용성을 보장한다. 이는 아마존 내부의 분산 스토리지 시스템인 다이나모와 개념적 연관성이 있지만, 구현 방식과 아키텍처는 구별된다.
이 서비스는 웹 애플리케이션, 모바일 백엔드, 게임, IoT 디바이스의 데이터 처리, 그리고 실시간 분석을 포함한 다양한 규모의 애플리케이션에 적합하다. 사용자는 표준 API 인터페이스를 통해 데이터를 저장하고 조회할 수 있으며, 크로스 플랫폼으로 제공되어 다양한 운영 체제에서 접근이 가능하다.
2. 역사
2. 역사
아마존 다이나모DB는 2012년 1월 18일, 아마존 웹 서비스의 CTO인 베르너 포겔스에 의해 공식 발표되었다. 이 서비스는 아마존닷컴이 자사의 클라우드 플랫폼인 아마존 웹 서비스 포트폴리오의 일부로 제공하는 완전 관리형 NoSQL 데이터베이스 서비스이다. 발표 당시 이 서비스는 인터넷 규모의 애플리케이션을 위해 설계된 빠르고 확장 가능한 데이터베이스로 소개되었다.
이 서비스의 개발 배경에는 아마존 내부에서 사용되던 고가용성 키-값 스토리지 시스템인 다이나모의 개념과 이름이 영향을 미쳤다. 그러나 아마존 다이나모DB는 원래의 다이나모 시스템과는 근본적으로 다른 구현체를 가진다. 내부 아키텍처는 여러 데이터 센터 간의 동기 복제를 활용하여 높은 내구성과 가용성을 보장하도록 설계되었다.
아마존 다이나모DB는 아마존이 이전에 제공하던 아마존 심플DB 서비스의 진화된 형태로도 간주된다. 심플DB의 제한 사항을 극복하고 더 큰 규모와 성능을 지원하기 위해 개발되었으며, 키-값 데이터베이스와 도큐먼트 지향 데이터베이스의 특성을 모두 지원하는 서비스로 출시되었다. 이로써 개발자들은 서버 관리 부담 없이 유연한 데이터 모델과 탄력적인 확장성을 활용할 수 있게 되었다.
3. 특징
3. 특징
3.1. 데이터 모델
3.1. 데이터 모델
아마존 다이나모DB의 데이터 모델은 기본적으로 키-값 데이터베이스와 도큐먼트 지향 데이터베이스의 특성을 결합한다. 데이터는 테이블에 저장되며, 각 테이블은 파티션 키와 선택적인 정렬 키로 구성된 기본 키를 가진다. 파티션 키는 데이터를 물리적 파티션에 분산시키는 데 사용되며, 정렬 키가 함께 사용되면 복합 기본 키가 되어 동일한 파티션 키 내에서 항목을 정렬할 수 있다.
각 항목은 기본 키와 함께 유연한 속성 집합으로 구성된다. 속성은 이름과 값으로 정의되며, 값은 문자열, 숫자, 이진 데이터, 불린, 널, 리스트, 맵 등 다양한 데이터 타입을 지원한다. 이는 반정형 또는 비정형 데이터를 저장하는 데 적합한 도큐먼트 모델을 가능하게 한다.
이 데이터 모델은 스키마리스 특성을 지녀, 동일한 테이블 내에서도 항목마다 다른 속성 구조를 가질 수 있다. 이는 애플리케이션 요구사항이 빠르게 변화하는 환경에서 유연성을 제공한다. 데이터 접근은 기본적으로 항목의 기본 키를 통한 읽기와 쓰기로 이루어지며, 보조 인덱스를 생성하여 기본 키 외의 속성으로도 효율적인 쿼리가 가능하다.
3.2. 아키텍처
3.2. 아키텍처
아마존 다이나모DB의 아키텍처는 완전 관리형 서비스로서 사용자가 하드웨어 프로비저닝, 설정, 패치, 클러스터 확장과 같은 인프라 관리 부담 없이 데이터베이스 기능에 집중할 수 있도록 설계되었다. 서비스의 핵심은 자동으로 여러 가용 영역에 걸쳐 데이터를 복제하여 높은 내구성과 가용성을 보장하는 것이다. 이는 기본적으로 마스터-슬레이브 복제가 아닌, 다중 리더 방식에 가까운 동기 복제를 통해 이루어지며, 단일 장애점을 제거한다.
서비스의 물리적 구성 요소는 사용자에게 완전히 추상화되어 있다. 사용자는 처리할 초당 요청 수를 기준으로 용량을 지정하기만 하면 되며, 아마존 웹 서비스가 백엔드에서 필요한 서버 리소스를 자동으로 관리하고 조정한다. 데이터는 파티션 키를 기준으로 자동으로 샤딩되어 여러 스토리지 노드에 분산 저장되며, 이로 인해 시스템의 수평적 확장성이 보장된다. 읽기 및 쓰기 작업은 이러한 파티션에 균등하게 분배된다.
이러한 설계는 다이나모라는 아마존의 내부 스토리지 시스템에서 이름을 차용했지만, 구현 방식은 근본적으로 다르다. 원래의 다이나모 시스템이 애플리케이션 계층에 버전 충돌 해결을 맡기는 멀티 리더 디자인이었다면, 다이나모DB는 강력한 일관성 읽기 옵션을 제공하는 등 관리형 서비스로서의 단순함과 강력한 일관성 보장을 더 중시한다. 아키텍처의 중심 목표는 예측 가능한 성능과 인터넷 규모의 애플리케이션을 지원하는 무중단 확장성에 있다.
3.3. 확장성과 가용성
3.3. 확장성과 가용성
아마존 다이나모DB는 서버리스 아키텍처를 기반으로 설계되어 사용자가 서버를 프로비저닝하거나 관리할 필요 없이 자동으로 확장된다. 테이블의 처리량 용량을 미리 프로비저닝하는 방식과 온디맨드 용량 모드를 모두 지원하여, 애플리케이션의 트래픽 패턴에 맞춰 탄력적으로 성능을 조절할 수 있다. 이는 예측 불가능한 워크로드를 처리하는 모바일 애플리케이션, 게임, IoT 플랫폼에 특히 유용하다.
가용성과 내구성 측면에서 다이나모DB는 데이터를 여러 가용 영역에 걸쳐 자동으로 복제하여 저장한다. 이 다중 AZ 복제 덕분에 데이터 센터 전체에 장애가 발생하더라도 서비스 중단 없이 데이터를 지속적으로 사용할 수 있다. 모든 데이터 쓰기에 대한 내구성은 기본적으로 보장되며, 데이터는 SSD에 저장되어 낮은 지연 시간의 성능을 제공한다.
이러한 설계는 아마존닷컴의 전자상거래 플랫폼과 같은 대규모, 고가용성 시스템의 요구사항에서 비롯되었다. 결과적으로 다이나모DB는 99.999%의 가용성을 목표로 하며, 관리형 서비스로서의 장점을 살려 운영 부담을 크게 줄여준다. 사용자는 데이터베이스의 확장성과 안정성에 집중하는 대신 애플리케이션 로직 개발에 더 많은 리소스를 투입할 수 있게 된다.
4. 다이나모와의 차이점
4. 다이나모와의 차이점
아마존 다이나모DB는 2007년 아마존이 논문으로 발표한 분산 키-값 저장소 시스템인 다이나모에서 그 이름을 차용했지만, 실제 구현과 설계 철학에는 근본적인 차이가 있다. 다이나모는 아마존 내부의 장바구니 서비스와 같은 핵심 애플리케이션을 위해 구축된 사설 소프트웨어 시스템이었다. 반면 다이나모DB는 아마존 웹 서비스를 통해 외부 고객에게 제공되는 완전 관리형 클라우드 데이터베이스 서비스이다.
가장 큰 차이는 아키텍처와 데이터 일관성 모델에 있다. 원본 다이나모 시스템은 멀티 리더 복제 방식을 채택하여 여러 노드가 동시에 쓰기를 처리할 수 있도록 했다. 이로 인해 데이터 충돌이 발생할 수 있으며, 애플리케이션 측에서 버전 관리를 통해 이를 해결해야 하는 책임이 있었다. 이는 고가용성을 최우선으로 한 설계였다. 다이나모DB는 이러한 접근법을 버리고, 단일 리더 복제와 다중 리전에 걸친 강력한 일관성을 보장하는 동기식 복제를 기반으로 재설계되었다. 이는 개발자에게 더 단순한 프로그래밍 모델을 제공하며, 트랜잭션 지원과 같은 고급 기능을 구현할 수 있는 토대가 된다.
또한, 다이나모DB는 완전 관리형 서비스로서 사용자가 서버 프로비저닝, 패치 적용, 클러스터 확장 또는 복제 설정과 같은 인프라 관리 작업을 전혀 신경 쓸 필요가 없다. 사용자는 단지 테이블을 생성하고 필요한 처리량을 지정하기만 하면, AWS가 백그라운드에서 모든 운영 부담을 처리한다. 이는 원본 다이나모를 자체 데이터 센터에 구축하고 운영해야 했던 방식과는 대조적이다. 결국 다이나모DB는 다이나모의 핵심 아이디어를 계승하지만, 상용 클라우드 컴퓨팅 환경에 적합하도록 진화한 서비스라고 볼 수 있다.
5. 사용 사례
5. 사용 사례
Amazon DynamoDB는 짧은 지연 시간과 높은 확장성을 요구하는 다양한 애플리케이션에 적합하다. 특히 사용자 프로필, 세션 데이터, 장바구니 정보, 게임 상태, IoT 센서 데이터와 같이 스키마가 유동적이고 대규모로 읽기/쓰기 작업이 빈번한 데이터를 저장하는 데 널리 사용된다. 아마존 웹 서비스의 다른 서비스와의 긴밀한 통합 덕분에 서버리스 아키텍처의 핵심 데이터 저장소로도 자리 잡았다.
주요 사용 사례로는 모바일 앱 백엔드, 웹 애플리케이션, 온라인 게임, 광고 기술, 로깅 및 감사 추적 시스템 등이 있다. 예를 들어, 소셜 미디어 플랫폼에서는 사용자의 실시간 피드나 관계 데이터를 저장하고, 전자 상거래 사이트에서는 제품 카탈로그나 사용자 선호도를 관리하는 데 활용할 수 있다. 또한 스트림 기능을 통해 데이터 변경 사항을 실시간으로 처리하는 이벤트 기반 애플리케이션을 구축하는 데도 유용하다.
마이크로서비스 환경에서 각 서비스의 독립적인 데이터 저장소로서, 또는 대용량 트래픽을 처리해야 하는 메시징 및 채팅 애플리케이션의 백엔드로도 DynamoDB는 빈번히 선택된다. 시계열 데이터를 효율적으로 저장하고 조회하는 패턴 역시 중요한 사용 사례 중 하나이다.
6. 주요 기능
6. 주요 기능
6.1. 테이블 및 항목
6.1. 테이블 및 항목
아마존 다이나모DB의 기본 데이터 구성 단위는 테이블, 항목, 속성이다. 사용자는 먼저 데이터를 저장할 테이블을 생성하며, 각 테이블은 이름과 기본 키를 정의해야 한다. 테이블은 무제한으로 항목을 저장할 수 있으며, 저장 용량이나 성능에 대한 사전 프로비저닝이 필요 없는 서버리스 모델을 지원한다.
테이블 내의 각 레코드는 항목이라고 부른다. 각 항목은 하나의 기본 키를 반드시 가지며, 이 기본 키는 파티션 키만으로 구성되거나 파티션 키와 정렬 키의 조합으로 구성된다. 파티션 키는 데이터의 물리적 저장 위치를 결정하며, 정렬 키는 동일한 파티션 내에서 항목들을 정렬된 순서로 저장할 수 있게 한다. 항목은 기본 키 외에도 다양한 속성을 가질 수 있다.
속성은 이름과 값으로 구성되는 데이터의 가장 작은 단위이다. 아마존 다이나모DB는 JSON 문서 형식과 유사한 유연한 스키마를 지원하는데, 이는 각 항목이 서로 다른 수와 유형의 속성을 가질 수 있음을 의미한다. 지원하는 데이터 유형은 스칼라 타입(문자열, 숫자, 이진 데이터, 불리언, null)과 집합 타입(문자열 집합, 숫자 집합, 이진 데이터 집합), 그리고 문서 타입(리스트, 맵)을 포함한다. 이 유연한 데이터 모델은 도큐먼트 지향 데이터베이스로서의 특징을 잘 보여준다.
6.2. 인덱스
6.2. 인덱스
Amazon DynamoDB는 기본 키를 통한 빠른 데이터 접근을 제공하지만, 보다 복잡한 쿼리 요구사항을 지원하기 위해 인덱스 기능을 제공한다. 인덱스는 테이블의 속성을 사용해 쿼리 성능을 높이는 보조 데이터 구조이다. DynamoDB는 주로 파티션 키와 정렬 키로 구성된 기본 키를 사용하지만, 인덱스를 생성하면 기본 키에 포함되지 않은 다른 속성으로도 효율적인 데이터 검색이 가능해진다.
DynamoDB는 크게 두 가지 유형의 인덱스를 지원한다. 첫 번째는 글로벌 세컨더리 인덱스(GSI)로, 이 인덱스는 파티션 키와 정렬 키를 원본 테이블과 다르게 정의할 수 있으며, 인덱스 자체의 읽기 및 쓰기 처리량을 별도로 설정할 수 있다는 특징이 있다. 두 번째는 로컬 세컨더리 인덱스(LSI)로, 이는 원본 테이블과 동일한 파티션 키를 공유하지만 다른 정렬 키를 사용한다. LSI는 테이블 생성 시에만 설정할 수 있으며, 테이블과 처리량을 공유한다.
인덱스를 효과적으로 사용하면 애플리케이션의 쿼리 패턴을 유연하게 지원할 수 있다. 예를 들어, 사용자 ID를 파티션 키로 하고 생성 날짜를 정렬 키로 하는 테이블에서, 사용자 이메일 주소로 검색해야 하는 요구사항이 생긴다면 이메일을 파티션 키로 하는 글로벌 세컨더리 인덱스를 생성하면 된다. 이를 통해 데이터 모델을 변경하지 않고도 다양한 접근 방식을 제공할 수 있으며, 확장성과 성능을 유지하면서 애플리케이션 개발의 편의성을 크게 높인다.
6.3. 트랜잭션
6.3. 트랜잭션
아마존 다이나모DB는 원자적, 일관적, 격리된, 지속적인 ACID 트랜잭션을 지원한다. 이는 여러 항목에 걸쳐 복잡한 비즈니스 로직을 안전하게 처리할 수 있게 해주는 핵심 기능이다. 다이나모DB의 트랜잭션은 단일 테이블 내에서 또는 여러 테이블 간에 수행될 수 있으며, 읽기와 쓰기 작업을 모두 포함할 수 있다.
트랜잭션 작업은 트랜잭션 쓰기와 트랜잭션 읽기 두 가지 유형으로 제공된다. 트랜잭션 쓰기를 사용하면 최대 100개의 항목에 대해 원자성을 보장하며, 모든 쓰기 작업이 성공하거나 모두 실패하는 All-or-nothing 방식을 따른다. 트랜잭션 읽기는 하나 이상의 테이블에서 최대 100개의 항목을 읽을 때 일관된 스냅샷을 제공하여 데이터의 정확성을 보장한다.
이러한 트랜잭션 지원은 전자상거래의 장바구니 시스템, 금융 서비스의 계좌 이체, 게임의 플레이어 상태 업데이트와 같이 데이터 무결성이 중요한 사용 사례에 필수적이다. 다이나모DB는 트랜잭션을 통해 NoSQL 데이터베이스의 유연성과 확장성을 유지하면서도 전통적인 관계형 데이터베이스 수준의 데이터 일관성 요구 사항을 충족시킨다.
6.4. 스트림
6.4. 스트림
아마존 다이나모DB의 스트림 기능은 테이블 내 데이터 항목에 대한 변경 사항을 시간 순서대로 캡처하고 기록하는 기능이다. 이 기능을 활성화하면 테이블의 항목이 생성, 수정 또는 삭제될 때마다 그 변경 이벤트가 스트림 레코드로 기록된다. 각 레코드는 변경된 항목의 키와 함께 변경 내용을 담고 있으며, 이러한 레코드들의 순서 있는 시퀀스가 스트림을 구성한다.
스트림 레코드는 최대 24시간 동안 보존되며, 애플리케이션은 이를 소비하여 실시간으로 처리할 수 있다. 이를 통해 데이터 변경에 반응하는 다양한 이벤트 기반 애플리케이션을 구축할 수 있다. 대표적인 사용 사례로는 변경 사항에 따른 캐시 무효화, 실시간 데이터 분석, 검색 인덱스 갱신, 그리고 데이터 웨어하우스로의 변경 데이터 캡처 등이 있다.
스트림은 AWS 람다와 같은 서버리스 컴퓨팅 서비스와 쉽게 통합될 수 있다. 람다 함수를 다이나모DB 스트림의 트리거로 지정하면, 새로운 스트림 레코드가 발생할 때마다 해당 함수가 자동으로 실행되어 레코드를 처리한다. 이는 완전 관리형의 실시간 데이터 처리 파이프라인을 구성하는 데 유용한 패턴이다.
스트림은 테이블 생성 시 또는 기존 테이블 설정에서 활성화할 수 있으며, 스트림 뷰 유형을 선택하여 어떤 정보를 캡처할지 결정한다. 옵션으로는 키만, 새 이미지, 이전 이미지, 그리고 새 이미지와 이전 이미지를 모두 포함하는 방식이 있다. 이 기능을 통해 애플리케이션은 데이터의 변경 이력을 추적하고, 복잡한 비즈니스 로직을 구현하며, 다른 AWS 서비스와의 강력한 연동을 가능하게 한다.
7. 장단점
7. 장단점
아마존 다이나모DB는 완전 관리형 서비스로서 운영의 편의성과 확장성을 제공한다. 사용자는 서버 프로비저닝, 소프트웨어 패치, 백업 설정, 복제 구성과 같은 데이터베이스 관리 작업을 직접 수행할 필요가 없다. 시스템은 트래픽 증가에 따라 자동으로 성능을 확장하며, 사용한 만큼의 읽기/쓰기 용량에 대해서만 비용을 지불하는 종량제 모델을 따른다. 이는 예측 불가능한 워크로드를 가진 애플리케이션에 큰 장점이 된다.
이 서비스는 높은 가용성과 내구성을 설계 목표로 한다. 데이터는 자동으로 여러 가용 영역에 걸쳐 동기적으로 복제되어 하드웨어 장애나 데이터 센터 중단 시에도 데이터 손실 없이 서비스를 지속할 수 있다. 또한, 단일 자릿수 밀리초 수준의 짧은 지연 시간을 보장하여 게임, IoT, 실시간 분석과 같은 성능이 중요한 사용 사례에 적합하다.
반면, 아마존 다이나모DB는 몇 가지 제약 사항을 가진다. 쿼리 기능이 관계형 데이터베이스에 비해 제한적이며, 주로 기본 키를 통한 조회에 최적화되어 있다. 복잡한 조인이나 임의의 조건을 통한 쿼리는 인덱스를 추가로 생성해야 하며, 설계 시 데이터 접근 패턴을 신중하게 고려해야 한다. 또한, 온디맨드 용량 모드에서는 예측 가능한 트래픽 패턴보다는 갑작스러운 피크에 유리하지만, 지속적으로 높은 처리량이 필요한 경우 비용이 더 많이 들 수 있다.
마지막으로, 이 서비스는 아마존 웹 서비스 생태계에 깊이 통합되어 있어 다른 클라우드 공급자로의 이전이 어려울 수 있다. 트랜잭션 지원이나 글로벌 테이블과 같은 고급 기능은 사용성을 크게 향상시키지만, 이러한 벤더 종속성은 장기적인 기술 전략을 수립할 때 고려해야 할 요소이다.
8. 관련 서비스
8. 관련 서비스
아마존 웹 서비스의 데이터베이스 및 분석 서비스 포트폴리오는 다이나모DB와 긴밀하게 통합되어 다양한 애플리케이션 요구사항을 지원한다. 관계형 데이터베이스 서비스인 Amazon RDS는 MySQL, PostgreSQL, 마리아DB 등 익숙한 엔진을 완전 관리형 서비스로 제공하며, 다이나모DB와는 다른 데이터 모델을 필요로 하는 워크로드에 사용된다. Amazon Aurora는 클라우드 컴퓨팅에 맞게 구축된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스로, 높은 성능과 가용성을 제공한다.
인메모리 데이터베이스 서비스인 Amazon ElastiCache는 Redis 또는 Memcached를 지원하여 마이크로초 단위의 지연 시간으로 데이터를 캐싱할 수 있어, 다이나모DB의 성능을 보완하는 캐싱 계층으로 자주 활용된다. 데이터 웨어하우스 서비스인 Amazon Redshift는 페타바이트 규모의 데이터에 대한 복잡한 쿼리와 분석을 실행하기 위해 설계되어, 다이나모DB의 운영 데이터를 대규모로 분석하는 데 사용될 수 있다.
또한, Amazon DocumentDB는 MongoDB API와 호환되는 도큐먼트 데이터베이스 서비스이며, Amazon Keyspaces는 Apache Cassandra 프로토콜을 지원하는 관리형 서비스이다. 이 서비스들은 각각 특정 애플리케이션 프로그래밍 인터페이스 호환성이 필요한 경우에 다이나모DB 대신 또는 함께 고려된다.
9. 여담
9. 여담
Amazon DynamoDB라는 서비스명은 아마존이 내부적으로 개발한 고가용성 키-값 스토어 시스템인 다이나모에서 유래한다. 하지만 이 둘은 명칭만 유사할 뿐 근본적으로 다른 시스템이다. 다이나모는 아마존닷컴의 내부 인프라를 위해 설계된 오픈 소스 프로젝트였으며, 멀티리더 복제와 같은 특성을 가졌다. 반면 DynamoDB는 아마존 웹 서비스가 외부 고객에게 제공하는 완전 관리형 클라우드 데이터베이스 서비스로, 단일한 설계 철학을 지닌다.
DynamoDB는 출시 당시 아마존의 심플DB 서비스를 대체하거나 진화시킨 서비스로 소개되었다. 심플DB도 NoSQL 데이터베이스 서비스였지만, DynamoDB는 더 낮은 지연 시간과 훨씬 더 큰 규모의 확장성을 제공하는 것을 목표로 했다. 이 서비스는 아마존의 CTO인 베르너 포겔스에 의해 2012년 1월 공식 발표되었다.
서비스의 성공과 높은 인기는 NoSQL과 클라우드 컴퓨팅의 부상에 중요한 기여를 했다. DynamoDB의 설계 원칙과 운영 경험은 이후 많은 상용 및 오픈 소스 분산 데이터베이스 시스템에 영향을 미쳤다. 또한, DynamoDB는 AWS 생태계 내에서 람다와의 긴밀한 통합을 통해 서버리스 애플리케이션 아키텍처의 핵심 구성 요소로 자리 잡았다.
