데이터 모델링은 지정된 데이터베이스에서 애플리케이션이 데이터를 저장하는 방법을 설계하는 프로세스입니다. DynamoDB와 같은 NoSQL 데이터베이스를 사용하는 데이터 모델링은 관계형 데이터베이스를 사용하는 모델링과 다릅니다. 관계형 데이터베이스는 유연성을 위해 구축되었으며, 분석 애플리케이션에 매우 적합합니다. 관계형 데이터 모델링에서는 엔터티에서 먼저 시작합니다. 정규화된 관계형 모델이 있으면 애플리케이션에 필요한 모든 쿼리 패턴을 충족시킬 수 있습니다.
NoSQL(비관계형) 데이터베이스는 유연성이 아니라, 속도 및 확장성을 위해 설계되었습니다. 확장할 경우 관계형 데이터베이스 성능이 저하될 수 있지만, DynamoDB와 같은 수평 확장 데이터베이스는 어떤 규모에서든 일관된 성능을 제공합니다. 일부 DynamoDB 사용자는 100TB보다 큰 테이블을 가지고 있으며, 해당 테이블의 읽기 및 쓰기 성능은 케이블 크기가 1GB 미만일 때와 같습니다.
DynamoDB와 같은 NoSQL 데이터베이스에서 최상의 결과를 얻으려면 일반 관계형 데이터베이스에서 사고의 전환이 필요합니다. DynamoDB에서 데이터를 모델링하는 경우 다음 모범 사례를 사용합니다.
1. 액세스 패턴에 집중
어떤 종류의 데이터 모델링을 수행하든, 애플리케이션에서 서로 다른 오브젝트나 엔터티 및 이들의 연결 방식이나 엔터티 간의 관계를 설명하는 엔터티-관계 다이어그램에서 시작합니다.
관계형 데이터베이스에서 테이블에 직접 엔터티를 배치하고 외부 키를 사용하여 관계를 지정합니다. 데이터 테이블을 정의한 후에 관계형 데이터베이스는 필요한 형태로 데이터를 반환하도록 유연한 쿼리 언어를 제공합니다.
DynamoDB에서 테이블을 모델링하기 전에 액세스 패턴을 검토합니다. NoSQL 데이터베이스는 유연성이 아니라, 속도에 초점을 맞춥니다. 먼저, 데이터에 액세스하는 방법을 질문하고, 액세스하는 형태로 데이터를 모델링합니다.
DynamoDB 테이블을 설계하기 전에 애플리케이션에서 데이터를 읽고 쓸 때 필요한 모든 사항을 문서화합니다. 애플리케이션에서 모든 흐름을 철저하게 검토해야 합니다. 액세스 패턴에 맞게 테이블을 최적화하기 때문입니다.
2. DynamoDB에 대한 요청 수 최적화
애플리케이션의 액세스 패턴 요구 사항을 문서화한 후에는 테이블을 설계할 준비가 되었습니다. 각 액세스 패턴에 대해 DynamoDB로의 요청 수를 최소화하도록 테이블을 설계해야 합니다. 각 액세스 패턴은 DynamoDB에 하나의 요청만 요구하는 것이 이상적입니다. 네트워크 요청이 느리고 이로 인해 애플리케이션에서 수행하는 네트워크 요청 수가 제한되기 때문입니다.
DynamoDB에 대한 요청 수를 최적화하려면 몇 가지 핵심 개념을 이해해야 합니다.
3. 관계형 모델에 현혹되지 않기
DynamoDB를 처음 접하는 사람들은 종종 비관계형 DynamoDB에 기반한 관계형 모델을 구현하려고 합니다. 그렇게 하면 대부분의 DynamoDB 이점을 놓칠 수 있습니다.
DynamoDB에서 시도하는 가장 일반적인 안티 패턴(반복되는 문제에 대한 비효율적인 응답)은 다음과 같습니다.
- 정규화: 관계형 데이터베이스에서는 데이터를 정규화하여 데이터 중복성 및 스토리지 공간을 줄인 후에 조인을 사용하여 서로 다른 여러 테이블을 결합합니다. 하지만 대규모 조인은 작업이 느리고 비용도 많이 듭니다. DynamoDB에서는 테이블이 커지면 조인으로 인해 속도가 느려지기 때문에 조인을 허용하지 않습니다.
- 테이블당 하나의 데이터 유형: DynamoDB 테이블은 종종 하나의 테이블에서 여러 유형의 데이터를 포함하기도 합니다. 여기에서 사용하는 예제에서는 하나의 테이블에 User, Game 및 UserGameMapping 엔터티를 사용합니다. 관계형 데이터베이스에서는 이를 3개의 다른 테이블로 모델링합니다.
- 너무 많은 보조 인덱스: 종종 필요한 추가 액세스 패턴에 대해 보조 인덱스를 생성하기도 합니다. DynamoDB에는 스키마가 없으며, 이는 인덱스에도 적용됩니다. 속성에서 이러한 유연성을 활용하여 테이블의 여러 데이터 유형에서 하나의 보조 인덱스를 재사용합니다. 이를 인덱스 오버로드라고 합니다.
아래 단계에서는 엔터티-관계 다이어그램을 구축하고 액세스 패턴을 미리 매핑합니다. 이는 DynamoDB를 사용할 때 항상 첫 번째 단계여야 합니다. 그리고 후속 모듈에서는 테이블 설계에서 이러한 액세스 패턴을 구현합니다.
모듈 완료 시간: 20분