확장 가능한 NoSQL 분산 데이터베이스를 제공하는 DynamoDB

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

DynamoDB는 NoSQL 데이터베이스를 제공하는 서비스입니다. DynamoDB는 아마존에서 개발한 NoSQL 데이터베이스이며 사용자가 따로 설치, 운영, 확장하지 않아도 원할 때 바로 사용할 수 있도록 만든 서비스입니다.

프리 티어에서 사용 가능
DynamoDB는 프리 티어에서 무료로 사용할 수 있습니다. 2014년 4월 기준으로 매달 스토리지 100MB, 쓰기 용량 5유닛, 읽기 용량 10유닛을 무료로 사용할 수 있습니다.

DynamoDB를 사용해야 하는 이유는 성능과 편의성, 대규모 DB 구축에 필요한 비용을 절감하는데 있습니다. 읽기와 쓰기가 매우 빈번하고 처리 속도가 빨라야 하는 환경, 작은 용량의 데이터가 매우 많을 때, 고가용성High Availability의 분산 데이터베이스를 자체적으로 운영하기에는 부담될 때 적합합니다. 따라서 모바일 게임과 소셜 네트워크와 같은 서비스에 유용합니다. 단 관계형 데이터베이스가 아니기 때문에 트랜잭션Transaction, 조인Join과 같은 복잡한 쿼리가 필요한 환경에는 적합하지 않습니다.

관계형 데이터베이스는 테이블에 데이터를 저장하기 전에, 테이블 구조를 미리 만들어 놓아야 합니다. 또한, 테이블간의 관계를 Primary Key와 Foreign Key를 이용하여 정의해야 합니다. 이것을 데이터베이스 스키마Schema라고 합니다. 그래서 관계형 데이터베이스는 미리 정해진 스키마에 맞게 데이터를 추가해야 하고, 스키마에 맞지 않으면 데이터를 추가할 수 없습니다.

NoSQL 데이터베이스는 기존의 관계형 데이터베이스와는 달리 스키마Schema가 정해져 있지 않습니다. 따라서 그림 14-1에서 보는 것과 같이 비정형 데이터를 저장하는데도 유용합니다. 물론 정형화된 데이터를 저장해도 됩니다.


그림 14-1 관계형 DB와 NoSQL DB의 데이터 구조 차이

DynamoDB는 리전별로 생성할 수 있으며 성능과 가용성을 위해 데이터를 3곳의 가용 영역AZ에 복제하여 저장합니다. 가용 영역이 장애가 발생하여 정지하더라도 DB를 정상적으로 사용할 수가 있습니다. 따라서 높은 가용성과 지속성을 제공하기 때문에 사용자가 따로 데이터를 백업할 필요가 없습니다.


그림 14-2 DynamoDB 시스템 구성도

DynamoDB는 저장할 수 있는 데이터 용량에 제한이 없습니다. 데이터 용량이 증가하면 DynamoDB가 알아서 스토리지를 늘리고 클러스터를 확장하여 데이터를 분산시킵니다.


그림 14-3 데이터가 늘어나면 자동으로 서버 추가

기존 데이터베이스는 테이블의 용량이 커지면 샤딩Sharding이라는 방법을 통해 테이블의 데이터를 여러 서버에 분산해서 저장하였습니다. 그래서 애플리케이션 레벨에서 샤딩을 직접 구현하거나, DB에서 지원하는 샤딩 기능을 이용하는 등 개발과 운영이 상당히 번거로웠습니다. DynamoDB는 이런 것들을 자동으로 처리해주기 때문에 데이터가 늘어나는 것에 대해 신경을 쓸 필요가 없습니다.

샤딩
샤딩(Sharding)은 데이터베이스를 분할(파티셔닝)하여 저장하는 방법입니다. 서버 한대에 대용량의 데이터베이스를 저장하기는 쉽지 않으므로 여러대에 분할하여 저장해야합니다. 테이블 별로 서버를 분할하는 방식, 사용자 이름 순, 날짜 순 등으로 분할하는 방식, 해시 키를 기준으로 분할하는 방식 등 다양한 방식이 있습니다.

DynamoDB는 읽기/쓰기 처리량을 직접 지정할 수 있습니다. 트래픽이 증가하여 사용량이 많아지면 처리량을 늘리면 되고, 사용량이 적어지면 처리량을 줄일 수 있습니다. 지정한 처리량은 DynamoDB가 알아서 일관되게 유지합니다. 자세한 요금은 AWS 사이트의 요금표(http://aws.amazon.com/ko/dynamodb/pricing/)를 참조하기 바랍니다.

DynamoDB와 SSD
DynamoDB의 모든 데이터는 SSD(Solid State Drive)에 저장됩니다.

DynamoDB 테이블 처리량 변경
이미 생성된 DynamoDB 테이블의 처리량은 한번에 최대 2배씩 높일 수 있습니다(처리량을 높이는 횟수는 제한이 없습니다). 갑자기 트래픽이 많아져서 처리량을 높이려고 해도 기본 처리량이 낮게 설정된 상태에서는 한꺼번에 처리량을 높일 수 없습니다. 또한, 처리량을 높여도 반영되는데 시간이 꽤 걸립니다. 따라서 실무에서는 처리량을 넉넉히 설정해야 합니다.

처리량을 낮출 때에는 한번에 최저치까지 낮출 수 있습니다. 하지만 처리량을 낮추는 횟수는 하루에 4번으로 제한되어 있습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.