AWS 다이나모DB는 Amazon Web Services (AWS)에서 제공하는 완전 관리형 NoSQL 키-값 데이터베이스 서비스입니다. 빠른 성능, 탄력적인 확장성, 쉬운 관리를 제공하며, 다양한 규모의 애플리케이션에 적합합니다.
1. AWS Management Console에 로그인한 후, 'DynamoDB'를 검색하여 해당 서비스 페이지로 이동합니다. 이후 "테이블 생성" 버튼을 클릭합니다.
2. 이제 테이블 세부 정보를 설정해야 합니다. "테이블 이름"과 "파티션 키"를 입력하고, 필요에 따라 "정렬 키"를 추가합니다. 여기서 파티션 키는 테이블의 각 항목을 고유하게 식별하는 역할을 합니다.(pk라고 생각하면 편합니다.) 정렬 키는 말 그대로 해당 속성을 이용해서 정렬을 진행할 수 있게 해주는 속성입니다.
키의 경우 문자열, 불린, 숫자 등을 지원하기에 원하시는 타입을 선택하시면 됩니다.
3. 읽기/ 쓰기 용량의 경우 테이블에 관한 성능을 설정하는 곳 입니다. 용량이 클 수록 더 많은 데이터를 처리할 수 있습니다.
프로비저닝의 경우 원하는 만큼 성능을 미리 설정하는 것이고 온디맨드로 하게 되면 aws가 알아서 조절을 해 줍니다. 무료로 이용하기 위해 저는 auto scaling을 끄고 용량을 각각 1로 설정하였습니다.
4. 마지막으로 인덱스 설정입니다. 인덱스를 설정하게 되면 더 빠르게 데이터를 쿼리를 할 수 있습니다.
AWS DynamoDB에서는 두 종류의 보조 인덱스를 사용하여 데이터에 더 빠르게 액세스할 수 있습니다. 각각 Global Secondary Index(GSI)와 Local Secondary Index(LSI)라고 불립니다.
Global Secondary Index (GSI)
GSI는 DynamoDB 테이블의 기본 키와 다른 속성을 기본 키로 사용하는 인덱스입니다. GSI는 테이블의 기본 키 구조를 변경하지 않고도 다양한 쿼리 패턴을 지원합니다.
GSI는 'global'이라는 이름에서 알 수 있듯이, 전체 테이블에 걸쳐 데이터를 쿼리합니다. 이는 GSI가 테이블의 모든 데이터를 복제하여 별도로 유지하기 때문입니다. 따라서 GSI를 사용하면 테이블의 어떤 항목이든 쿼리할 수 있지만, 이로 인해 추가적인 저장 공간이 필요하게 되며 설정시에 쓰기,읽기 용량을 따로 설정해주어야 합니다.
Local Secondary Index (LSI)
LSI는 테이블의 기본 키와 동일한 파티션 키를 사용하지만, 다른 정렬 키를 사용하는 인덱스입니다. LSI는 특정 파티션 키 값에 대한 데이터를 더욱 세밀하게 쿼리하는 데 사용됩니다.
LSI는 'local'이라는 이름에서 알 수 있듯이, 동일한 파티션 키를 가진 항목 내에서만 쿼리를 수행합니다. 이로 인해 LSI는 GSI보다 제한적인 쿼리 옵션을 제공하지만, 저장 공간의 추가 사용 없이 효과적인 쿼리 성능을 제공합니다. 그러나 LSI의 경우에는 테이블 생성하는 경우에만 설정할 수 있으며 개수에도 제한이 있습니다.
때문에 dynamoDB의 경우 테이블 생성 때부터 정확한 설계를 해야 나중에 문제가 생기지 않습니다.(강의를 보면 강사님이 매우 강조하는 부분 중 하나이기도 합니다.)
생성을 완료하게 되면 위와 같이 활성상태가 됩니다.
표 항목 탐색
을 누르게 되면 테이블에 대해서 쿼리를 할 수 있는 창이 뜨게 됩니다. 해당 화면에서 항목 생성을 하게 되면 데이터를 넣을 수 있는 창이 뜨게 됩니다.적절한 파티션 키와 정렬 키를 넣고 항목을 생성하면 데이터가 들어가게 됩니다.
이 때 파티션 키는 중복이 되면 안 되며 만약 위 member_id
,sort_num
속성 외에도 다른 속성 값이 필요하다면 새 속성 추가
로 넣을 수 있습니다.
이때 스캔과 쿼리가 있는데 스캔은 모든 테이블을 훑어보면서 찾는 방식으로 다이나오 DB 특성상 쓴 만큼 비용을 지불해야 하기에 스캔은 지양해야합니다.
대신 쿼리를 사용한다면 더욱 효율적으로 데이터를 가져올 수 있습니다.
DynamoDB 스트림을 이용한다면 DynamoDB에서 삭제,삽입등의 이벤트가 발생한 경우에 aws lambda와 연결하여 특정 이벤트를 처리하도록 할 수 있습니다.
timestamp
속성을 만든 후 이를 지정해주면 해당 timestamp
에 도달한 경우에 자동으로 삭제를 하도록 할 수 있습니다.