아마존AWS 다이나모DynamoDB String Set 타입 정렬 문제 기술 이야기 2015. 9. 23. 21:47

아마존AWS 다이나모DynamoDB String Set 타입 정렬 문제에 대해 사용팁과 고생의 흔적을 남긴다.

문제

String Set 타입을 사용해서 배열을 저장하는데 의도하지 않은 순서로 정렬됨.

유투브ID를 배열로 저장해서 다이나모DB에 저장하고 꺼내 쓰려 했다. PutItemRequest와 GetItemRequest로 손쉽게 구현해서 테스트를 해보는데...어랏? 순서가 이상한데?
처음엔 내가 잘 못한 줄 알고 내 코드를 보다가 종착점에 다이나모DB가 있었다. 이상한데? 아마존 콘솔로 DB를 확인해보니 순서가 이상하게 저장이 된다. 흠...자동으로 정렬이 되는 것 같은데...정렬, sort, order로 검색해도 뚜렷한 답이 없다. 아무래도 사용자가 적어서 그런듯.ㅠ

결국 아마존 문서에서 원인을 찾았다.


원인과 해결책

이유인즉, 다이나모DB의 데이터 타입이 원래 그렇게 지원된다. 정리해 보면,

  1. 문자열 셋, 숫자 셋, 바이너리 셋등이 있다.
  2. 셋 내부의 아이템은 중복되면 안된다! (AWS Service Exception 발생)
  3. 셋은 정렬되지 않으며, 순서는 유지되지 않는다.
    (정렬되지 않는다고 했지만 정렬해서 저장되는 듯)

Multi-Valued Data Types DynamoDB also supports types that represent number sets, string sets and binary sets. Multi-valued attributes such as an Authors attribute in a book item and a Color attribute of a product item are examples of String Set type attributes. Because each of these types is a set, the values in each must be unique. Attribute sets are not ordered; the order of the values returned in a set is not preserved. DynamoDB does not support empty sets.AWS Developer Guide

해결책

해결책은 여러가지가 있겠지만, 나는 그냥 스트링으로 저장했다.ㅋ 저장하려는 문자열 사이에 구분자가 될 문자를 넣어서 하나의 스트링으로 만들어서 저장한다음, 꺼내서 사용할 때 그냥 쓰거나 필요에 따라서 배열로 변경해서 사용!

별것도 아닌데 시간을 낭비했구만...ㅠ

댓글