티스토리 뷰

DynamoDB

DynamoDB를 사용하는 이유?

RyanGomdoriPooh 2016. 9. 30. 14:53

AWS를 사용하는 사용자라면, NoSQL을 사용하려고 고려하는 사용자라면, 누구나 한번쯤 들어봤을 수 있는 DB 솔루션입니다.


Google의 BigTable 과 NoSQL의 발전을 위해 노력하고 있는 AWS DynamoDB에 대해서 설명하겠습니다.




DynamoDB의 특징


- 배포가 단순하고 신속합니다. 이 의미는 설계를 해서 그 데이터베이스를 적용하기까지 오랜 시간이 걸리지 않는다는 이야기입니다.


- 확장이 단순하고 신속합니다. 수백만 IOPS를 처리할 수 있는 시스템 설계해두었기 때문에 단순한 인터페이스의 조작만으로 규모를 확장시키기 수월합니다.


- 데이터는 자동으로 복제됩니다. 데이터의 손실을 방지하기 위해서 데이터 베이스를 자동으로 백업해서 복사본을 두고 손실율을 낮추고 있습니다.


- 빠르고 일관된 응답시간. 일단 IO를 하는 시간이 빠른 것은 기본이고 아무리 규모가 증가하고 어떤 장애가 와도 일관적인 응답시간을 보여줍니다.


- 보조 인덱스를 통한 빠른 조회. NoSQL 특성상 관계가 없기 때문에 일반적으로 데이터를 찾기에는 인덱싱이 없으면 속도가 느려지지만 그 부분을 해결해줍니다.


- 사용한만큼 사용료를 지불합니다. 저장소의 사용과 사용하려는 퍼포먼스의 정도에 따라서 사용료를 지불합니다. 그래서 최적화시 킬 수 있습니다.



DynamoDB를 사용하는 목적


DynamoDB를 사용해야 하는 이유는 성능과 편의성, 대규모 DB를 구축하는데 필요한 비용들을 줄일 수 있습니다.


서비스를 구현한다고 하면 서비스는 빈번한 읽기 쓰기로 처리 속도는 빠릅니다.


작은 용량의 데이터를 처리할 경우, DynamoDB는 아주 효과적으로 사용될 수 있습니다.


데이터베이스를 확장해야하고 확장하는 과정에서 분산된 데이터베이스를 관리하기에 힘든 경우 사용하면 유리합니다.


즉, 모바일 게임이나 소셜 네트워크 같은 짧은 작업들을 처리하는 경우 아주 유용하게 사용될 수 있습니다.


DBMS처럼 트랜잭션, JOIN 과 같은 복잡한 테이블 데이터 처리과정이 있는 경우에는 비적합합니다.


NoSQL은 RDBMS처럼 스키마가 정해져 있지않고 비정형적인 데이터를 저장하는데 유용합니다.


정형화된 데이터를 저장해도 되긴 하지만 비정형화된 데이터를 저장해서 Denormalization을 적극적으로 활용하는데에 큰 장점이 있습니다.


적극 Denormailzation을 활용하라는 의미는 기존의 RDBMS에서 정형화하여 모든 종속관계니 도메인 원자값이니 하는 정규화(Normalization)과정을 거쳤는데,


여기 DynamoDB에서는 그런 규약에 얽매히지 않고 데이터를 처리할 수 있는 환경을 구성할 수 있습니다. 단, 스토리지 용량은 늘어나긴 합니다.


DynamoDB는 자동으로 AWS의 Region별로 데이터를 가용영역 3곳에 보통 복제해서 저장을 합니다.


가용 영역 중에 하나가 장애가 발생하여 정지하더라도 DB를 정상적으로 사용이 가능합니다.


높은 가용성과 지속성을 제공하기때문에 사용자가 따로 데이터를 백업할 필요가 전혀 없습니다.


DBA입장에서 보면 엄청나게 큰 강점입니다.


DynamoDB의 저장할 수 있는 용량은 같은 AWS의 S3와 같이 무제한입니다.


데이터 용량이 증가하게되면 스토리지를 늘리고 클러스터를 확장하여 데이터를 분산합니다.


기존의 다른 데이터베이스를 사용하면, 용량이 커지면서 샤딩(Sharding)이라는 방법을 통해 테이블의 데이터를 여러 서버에 분산시키는 작업을 직접해야합니다.


DynamoDB는 Read/Write Throughput을 직접지정할 수 있습니다. 트래픽이 증가하여 사용량이 많아지면 처리량을 늘리고, 사용량이 적어지면 처리량을 줄입니다.


지정한 처리량은 DynamoDB가 알아서 일관되게 유지합니다.


요금표는 http://aws.amazon.com/ko/dynamodb/pricing/  여기를 참고하시면 됩니다.


DynamoDB의 모든 데이터는 SSD(Solid State Drive)에 저장하기에 손실될 위험과 성능의 보장이 가능한 이유 중에 하나가 됩니다.


---------------------------------------------------------------------------------------------------------------------------

* DynamoDB 테이블의 처리량의 변경

이미 생성된 DynamoDB 테이블의 처리량은 한 번에 최대 2배까지 높일 수 있습니다.


갑자기 트래픽이 많아져서 처리량을 높이려고 해도 기본 처리량이 낮게 설정된 상태에서는 한꺼번에 처리량을 높일 수 없습니다.


처리량을 높이는데에 반영 시간이 오래걸리므로 실무에서는 처리량을 적당히 높여놔야합니다.


처리량을 낮추는 횟수는 하루에 4번으로 제한됩니다.


그렇다고 비용면에서 너무 많은 부담을 안하셔도 됩니다. EC2를 이용해서 데이터 베이스를 돌리는 것보다 가격은 저렴합니다.

---------------------------------------------------------------------------------------------------------------------------



결론


저 같은 경우에는 기존에 MySQL 과 MongoDB를 사용해서 개발을 해왔습니다. 


그런데 그렇게 만들어서 서버에 배포해서 관리를 하는 데 드는 시간적 비용과 공부를 해야는 분량이 너무 많아서 항상 부담이 많이 되었습니다.


스타트업에서 사실 웹 프론트엔드 프로그래밍을 하던 저였지만, 다른 동료들이 앱의 UI와 UX, 디자인에 주력하고 있기때문에,


가장 서버와 DB에 관련된 사람이 어쩔 수 없이 저였기 때문에 항상 DB를 관리하고 공부하는데 너무나 많은 시간과 항상 두려움이 있었습니다.


예를 들면, 리눅스 서버를 사용하여 아키텍쳐를 다 구현해놓고, DB와 연결해서 서비스를 하고 사용자가 늘어나게 되면,


해당 DB에 대한 요청을 처리해줘야하는 WAS와 DB가 돌아가고 있는 서버의 스케일 조정부분과 스토리지 확장을 항상 고려하고 데이터를 어떻게 분배해야할지에


대해서 항상 생각을 했습니다. 그 과정에서 배운 것들은 많지만 차라리 그시간에 더 좋은 서비스를 만드는 것이 어떨까에 대해서 생각하고 DynamoDB를 사용하게 되었습니다.


처음에는 만들어준 SaaS를 사용한다는 것에 대해서 뭔가 개발자로써의 자존심에 대해서 생각했지만, 써보니 비용과 퍼포먼스 그리고 부담감을 덜 수 있어서 정말 좋습니다.


어쩌다 보니 광고만 한 셈이네요.


간단하게 요약하자면,


MySQL보다는 불편하다, 개념도 다르다, 그런데 NoSQL을 사용하기로 했다면, 다른 오픈소스 NoSQL보다는 신경이 덜쓰이는 DynamoDB를 사용하는게 편하다. 입니다.


이상 글을 마치겠습니다.


'DynamoDB' 카테고리의 다른 글

DynamoDB란? 기본 개념설명  (7) 2016.09.30
DynamoDB를 사용하는 이유?  (7) 2016.09.30
NoSQL 데이터 모델링 2  (0) 2016.09.27
NoSQL 데이터 모델링 1  (1) 2016.09.24
NoSQL 디자인 팁  (0) 2016.09.23
Dynamo NoSQL 란?  (0) 2016.09.21
댓글
  • 프로필사진 익명 비밀댓글입니다 2016.12.12 16:56
  • 프로필사진 RyanGomdoriPooh 네 공감합니다. 구글링 지겹죠. 그런데 안쓸 수 없는 함정... ㅠ 2016.12.12 16:58 신고
  • 프로필사진 익명 비밀댓글입니다 2016.12.12 16:58
  • 프로필사진 RyanGomdoriPooh 음... 저 같은 경우에는 프로젝트를 새로 하면서 이미 NoSQL로 넘어온 경우라서 RDBMS에서 넘어오는 방법에 대해서는 잘 모르겠는데요.
    아마 AWS에서 직접적으로 서로다른 종류의 데이터베이스를 마이그레이션을 도와주진 않는 것으로 알고 있습니다.
    그래서 해야할게 기존에 데이터베이스에서 옮길 NoSQL을 찾으시고 테이블을 설계하시고 일일히 크롤링 형태로 READ해서 옮길 테이블에 데이터를 옮겨야하지 않을까 싶습니다.
    현재 DynamoDB는 확장을 자동으로 가용성이 보장한 상태로 해주고요.
    유지 비용이 조금 더 나오는 것 빼고는 상당히 쓸 만하다고 생각합니다.
    일 년전만 해도 인덱싱도 테이블 생성시에만 만들 수 있게 락을 걸어놔서 단점이 있었는데 현재는 풀려서 인덱싱을 보조로 쓸 수도 있어서 퍼포먼스와 검색기능이 강화되었습니다.
    검색해보시면 DynamoDB에 대한 글을 써놓은 개념을 보시고 한번 테스팅으로 설계한 번 해보시는 것을 추천합니다. 단점도 꽤 있어서요...
    2016.12.12 17:09 신고
  • 프로필사진 익명 비밀댓글입니다 2016.12.12 19:26
  • 프로필사진 johan 안녕하세요.
    오타 관련 댓글 남깁니다. Thoughput이 Throughput을 말씀하시는 건 아니신지요?
    좋은 글 잘 봤습니다. 감사합니다.
    2019.09.16 10:41
  • 프로필사진 RyanGomdoriPooh 오타 찾아주셔서 감사합니다~!
    잘 봐주셨다니 제가 감사하네요.
    2019.09.16 10:52 신고
댓글쓰기 폼
공지사항
Total
494,172
Today
228
Yesterday
138
링크
TAG
more
«   2022/01   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함