AWS에서는 DynamoDB라는 NoSQL 데이터베이스 서비스를 제공한다. 파이썬 프로젝트라면 AWS에서 제공하는 boto를 이용해 DynamoDB를 관리할 수 있다. boto의 DynamoDB 인터페이스는 DynamoDBConnection 부분과 그 외의 부분으로 나눌 수 있다. DynamoDBConnection은 저수준 인터페이스로 DynamoDB 명세를 충실하게 구현해 두었고, 나머지는 이를 쉽게 이용할 수 있게 만든 고수준 인터페이스다.
프로젝트에서 DynamoDB를 이용하기로 결정해서 boto를 사용하기로 했다. 하지만 boto를 이용해 관리해보니 몇가지 불편한 점이 있었다. 가장 크게 불편했던 것은 테이블의 schema를 정의할 수 없다는 것이었다. 테이블의 schema를 정의할 수 없다보니 속성 이름과 아이템 속성에 어떤 타입이 들어가야 하는지 헷갈리는 경우도 있었고, 고수준 인터페이스를 이용해 가져온 아이템의 속성값은 문자열 키를 이용해 접근해야만 했다. 다른 불편함은 Complex Lookup을 포함한 몇 몇 기능들이 고수준 인터페이스에서 숨겨져 있다는 것과 실제 사용하기에도 불편하다는 것이었다.
어딘가에는 이런 불편함을 해결해준 패키지가 있을 것 같아서 다른 DynamoDB 파이썬 인터페이스를 찾아보다가 PynamoDB를 발견하게 되었다. 개발 중 가장 크게 불편하게 느꼈던 schema부분을 해결해줄 수 있었다. 상당히 잘 짜여진 인터페이스처럼 느껴져서 사용해볼까 하다가 말았다. boto와는 동떨어진 독립적인 프로젝트 이면서도 DynamoDB의 모든 기능을 제공하지 않아 제공하지 않는 기능을 사용하려면 boto를 사용해야 했기 때문이다. Complex Lookup이 그 중 하나인데 이 기능을 사용할 수 있는 방법이 PynamoDB에 아예 없었다. 또 boto에서 제공하지 않는 기능은 똑같히 제공하지 않고 있어 고쳐 사용하려면 boto, PynamoDB 둘 다 고쳐야 했기 때문이다. boto에서 List와 몇가지 타입을 제공하지 않고 있었는데, PynamoDB도 똑같히 제공하지 않고있었다. (관련 boto issue). 한마디로 DynamoDB를 사용하는데 두개의 독립된 패키지에 의존하게 되는게 불편했다.
그래서 PynamoDB를 패치할까, boto에 기능을 추가하고 더 쉽게 사용할 수 있는 인터페이스를 만들어 사용할까 하다가 후자를 선택했다. 그리고 나와 같은 불편함을 느끼는 사람이 있을 것 같아서 파이썬 패키지로 GitHub에 공개해두었다. BynamoDB에서 확인할 수 있다. 이름의 의미는 그냥 boto에 의존성을 가지고 있어서 B로 시작하게 했다. BynamoDB의 특징은 각 프로젝트에서 사용하고 있는 boto에 의존해 사용할 수 있다는 것이다. 사용하고 있는 boto에서 List 타입 패치를 적용하면 BynamoDB에 ListAttribute만 추가해 사용하면 된다. 또 하나는 모든 API가 boto의 DynamoDBConnection을 이용한다는 것이다.
내 책임 하에 있는 패키지를 처음 작성해 본 것이라 어설픈 점이 많이 보일 수 있다. 그리고 우리 프로젝트에 사용하는 것을 우선해 우리 프로젝트에서 사용하지 않는, 혹은 중요도가 떨어지는 기능은 아직 구현하지 않았다. 예를 들면 batch get API라던가 filter expression에서의 몇 몇 연산자들이 있다. 사용하고 싶은데 어색한 부분이나 추가하고 싶은 기능이 있으면 알려주시거나 패치해서 풀리퀘 부탁드립니다 :)
댓글 없음:
댓글 쓰기