티스토리 뷰

Node.js로 DynamoDB 시작하기[1] -linux에 Local DynamoDB 설치

저번 글에서는 linux 환경에 local DynamoDB를 설치하였다. 

이번 글에서는 node.js로 aws sdk를 이용하여 저번 글에서 설치한 local DynamoDB를 제어해보려고 한다.

#SetUp

npm init
npm install aws-sdk

#CreateTable.js 

설치가 끝났다면 현재 디렉토리에 CreateTable.js라는 파일 생성하여 아래와 같이 작성해준다.

우리는 dynamodb를 tokyo region에서 생성했기 때문에 4번째 줄의 region에 tokyo region인 "ap-northeast-1"을 기입해준다. 만약 타 리전의 dynamodb 를 설치하였다면 region을 다르게 기입해주어야 한다. 

 

26번 줄을 보면 AWS SDK에서 지원하는 createTable 함수를 사용하기 위하여 파라미터가 필요한데 이는 10번 라인부터 정의되어 있다.

파라미터가 의미하는 건 생성하려는 dynamodb table에 대한 정보인데 TableName에는 생성하려는 테이블 이름을 적어주면 된다.

이제 아래에 KeySchema를 적게 되는데 그 전에 간단하게 DynamoDB의 키에 대해 설명하겠다.

 

#DynamoDB KEY

DynamoDB는 1개 혹은 2개의 key를 가질 수 있다.

Nosql의 특징 때문에 DynamoDB는 table에 item을 삽입할 때 item 안에 사전에 정의되지 않은 Attribute를 사용할 수 있다. 

단 각 item들은 미리 Table이 Key로 정의한 1개 혹은 2개의 Attribute를 가져야만 한다. 

 

[1개의 KEY를 가지는 경우 (해쉬키)]

이 경우에 Key가 되는 Attribute는 무조건 HASH 타입이 된다. 

이 경우에는 해쉬키를 기준으로 데이터를 분산시켜 저장하여 데이터 모델을 단순화하고, 정렬을 하지 않고 저장하게 된다.

즉 해쉬키는 일치 방식의 검색만 지원한다. 즉 키 AttributeName이 Student이고 해당 값이 "jason"인 것을 검색한다면 정확히 Student가 jason인 아이템들만 반환하게 된다.

또 한 Hash Key는 중복이 없는 고유 값을 가져야 만 한다.

 

[2개의 KEY를 가지는 경우(해쉬키+범위키)]

위에서 처럼 해쉬키만을 사용하는 경우에는 해쉬키가 동일 할 경우 table에 item을 저장할 수 없다. 

해쉬키와 범위키를 동시에 사용하는 경우에는 해쉬키+범위키가 고유 값을 가지면 되므로 위와 같은 문제가 해소된다.

또 범위키(Range type Key)를 이용하여 Hash Key만 사용할 때와는 달리 일치,부등호,포함 등의 범위를 지정할 수 있는 검색을 할 수 있게 된다. 

즉 해쉬키는 partition key 역할을 범위키는 sort key 역할을 하게 된다.

다시 아까의 소스코드로 넘어가서 이제 보면 name은 해쉬키 age는 범위키로 2개의 KEY를 가지는 Table을 생성하려 함을 알 수 있다.

16번째 라인을 보면 키가 되는 Attribute의 Type에 대해 정의한다.

이 때 AttributeType에는 S,N,B 오로지 세 속성만 올 수 있으며 S-문자열 형식의 속성, N-숫자 형식의 속성, B-이진 형식의 속성 을 의미한다.

21,22번째 줄의 Read,Write CapacityUnits은 DynamoDB가 ThrottlingException을 반환하기 전에 초당 사용되는 최대 읽기,쓰기 수이다.

 

자 이제 우리가 생성하려는 테이블은 University라는 이름을 가지며 두개의 Attribute를 Key로 가지며 HASH키는 name이며 String 타입, RANGE키는 age며 Number 타입임을 알 수 있다.

 

#테이블 생성

자 이제 터미널을 열고 해당 스크립트를 작동시켜보자.

#node CreateTable.js

Table이 생성되었다는 log와 함께 우리가 생성한 테이블의 정보가 출력된다.

이제 저번 글에서 입력하였던 커멘드를 이용하여 테이블 목록을 조회해보자.

#aws dynamodb list-tables --endpoint-url [DynamoDB Endpoint URL]

University 테이블이 생성 된 걸 확인할 수 있다.

댓글
댓글쓰기 폼