본문 바로가기
개발일기

DynamoDB는 어렵다.

by Nhahan 2023. 12. 24.
DynamoDB의 장점
1. 일정하게, 매우 빠르다.
2. NoSQL이므로 스키마가 자유롭다. (초기 설계가 잘 되었단 가정 하에)
3. 무제한적인 DB 볼륨.
4. 온디맨드 방식으로 자유로운 오토 스케일링.
5. 서버리스.
6. 다른 AWS 서비스들 간의 조합 지원이 잘 되고 자유로움.

 

위 중 1, 4, 5, 6 장점에 입각하여 사이드 프로젝트에 DynamoDB를 사용해보려고 했다.

 

 

하지만 너무 제한 조건이 많았다.

 

가장 크게 다가온 단점들이 몇가지 있는데,

1. GSI 설정시 요금이 GSI 개수 만큼 n배로 증가.

- 솔직히 이건 트래픽이 많지 않을 것이기에 그렇다치는데, 그럼에도 불구하고 내가 원하는데로 인덱스를 설정하지 못하는 것에 대한 불만이 있었다. GSI 최대 설정 개수가 20인데 과연 20개를 설정할 부자가 있을까?

2. getItem 시에 반드시 partition key와 sort key를 모두 조건으로 걸어야함.

- 가장 크게 다가온 진입 장벽이다. DynamoDB는 key/value DB이고, 그렇기에 빠른 쿼리를 원한다면 partition key로 검색을 해야하는데 이게 자유롭지 않았다. Query 기능을 이용하면 된다고 하지만, partition key는 또 like 검색이 안된다니?

3. 쓸만한 GUI 툴의 부재.

- GUI 툴 없이 DB를 다루는 것은 다소 어려운 일일 것이라고 생각한다. 그런데 DynamoDB는 쓸만한 GUI 툴이 없었고, 그나마 있는 것들도 모두 유료였다. AWS에서 자체 제공하고 있는 NoSQL Workbench는 기능이 매우 부족했다. NoSQL Workbench로는 도커로 띄운 local DynamoDB에 접속하는 것도 불가능했다(모르는 것일 수도 있지만 그만큼 기능이 제한적이고 UI/UX가 불친절). 그리고 DataGrip에서 지원을 안한다... ㅠㅠ

그나마 찾은 IntelliJ의 플러그인. 하지만 30일 이후 유료!

4. 높은 진입 장벽

- MongoDB와 다르게 제한이 많고 알아야할 기능(GSI, LSI, sort key, query, scan...)도 많다. MongoDB는 아무 생각 없이 가볍게 쓸 수 있다고 생각하는데, DynamoDB는 어느 정도 공부하고 쓰지 않으면 속수무책으로 에러가 발생할 확률이 100%다.

5. 레퍼런스 없음

- 한국, 외국 다 합쳐도 자료가 거의 없다. Webflux + DynamoDB 조합으로 하다보니 더 그랬다. `DynamoDbEnhancedAsyncClient`라는 생소한 인터페이스를 사용했었는데 그냥 레퍼런스가 없다.

 

 

이틀간 시간 박치기를 한 결과 써보기를 포기하고, 다른 DB로 넘어갔다. DynamoDB를 포기하자 개발 속도 수직 상승...

 

 


 

 

써보고 나니 DynamoDB를 쓸만한 경우가 개인적으로는 아래와 같이 좁혀졌다.

  1. 오토 스케일링이 필요하면서 성능이 유지되어야하는 초대규모 트래픽 서비스 (초당 100만, 1000만 건이라던가)
  2. 그런 비용을 지불할 수 있는 자본력
  3. DynamoDB는 단일로 쓰기는 어려우며, 다른 데이터베이스와 조합되어야한다는 의견(전체 검색, 페이징 어려움)
  4. '3'을 가능하게 숙달된 아키텍쳐 설계력

일단 현재 나의 능력으로는 부족한 것 같다. 🥲

경험해본 것으로 만족.

 

댓글