무료 도구

DynamoDB 싱글 테이블 디자인 도구

엔터티와 그것을 어떻게 읽어야 하는지를 입력하세요 — 플래너가 엔터티 접두사가 붙은 PK/SK 키 템플릿을 제안하고, 항목 컬렉션을 미리 보여주며, 기본 테이블이 패턴을 처리할 수 없는 곳에만 GSI를 추가합니다.

엔터티
액세스 패턴
제안된 키 스키마
엔터티PKSK
UserUSER#<userId>USER#<userId>
Order
User 항목 컬렉션 내
USER#<userId>ORDER#<orderDate>#<orderId>
GetItem · 기본 테이블ID로 User 가져오기
PK = USER#<userId> AND SK = USER#<userId>
Query · 기본 테이블User 아래의 Order 나열하기
PK = USER#<userId> AND begins_with(SK, 'ORDER#') ScanIndexForward: false
  • 정렬 키는 문자열로 비교됩니다 — 정렬 속성을 정렬 가능한 형식(ISO-8601 날짜, 0으로 채운 숫자)으로 저장하세요.
Query · GSI1email(으)로 User 찾기
GSI1PK = USER#EMAIL#<email>
  • GSI는 고유성을 강제하지 않습니다 — 기본 항목에 대한 조건 표현식으로 쓰기 시점에 중복을 방지하세요.
글로벌 보조 인덱스
GSI1User 항목을 인덱싱합니다
GSI1PK = USER#EMAIL#<email> GSI1SK = USER#EMAIL#<email>
  • GSI는 고유성을 강제하지 않습니다 — 기본 항목에 대한 조건 표현식으로 쓰기 시점에 중복을 방지하세요.
예시 항목
엔터티PKSKGSI1속성
UserUSER#user-1USER#user-1USER#EMAIL#user-1@example.com USER#EMAIL#user-1@example.comuserId: user-1, email: user-1@example.com
OrderUSER#user-1ORDER#2025-06-01#order-1orderId: order-1, orderDate: 2025-06-01, userId: user-1
OrderUSER#user-1ORDER#2025-06-02#order-2orderId: order-2, orderDate: 2025-06-02, userId: user-1
테이블 정의 (CreateTable JSON)
{
  "TableName": "AppTable",
  "BillingMode": "PAY_PER_REQUEST",
  "AttributeDefinitions": [
    {
      "AttributeName": "PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "SK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1SK",
      "AttributeType": "S"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "PK",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "SK",
      "KeyType": "RANGE"
    }
  ],
  "GlobalSecondaryIndexes": [
    {
      "IndexName": "GSI1",
      "KeySchema": [
        {
          "AttributeName": "GSI1PK",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "GSI1SK",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      }
    }
  ]
}

aws dynamodb create-table --cli-input-json용 순수 JSON — 일반적인 문자열 타입 PK/SK 속성, ALL로 프로젝션된 GSI, 온디맨드 청구.

비용 힌트
항목당 읽기 단위(최종적 일관성)
0.5 RCU
항목당 쓰기 단위
1 WCU
월간 온디맨드 추정치(us-east-1) — 기본 테이블만
US$4.93
GSI 쓰기 복제 포함 (×1)
US$8.21

각 GSI는 모든 항목의 프로젝션된 사본을 자체적으로 저장하므로, 테이블 쓰기 한 번이 각 GSI에서도 쓰기 용량을 소비합니다. 이 추정치는 전체 프로젝션을 가정하며, 저희 요금 및 항목 크기 계산기와 동일한 4 KB 읽기 / 1 KB 쓰기 반올림을 사용합니다.

액세스 패턴에서 키 스키마로

싱글 테이블 디자인은 엔터티가 아니라 읽기에서 출발합니다: 테이블을 정규화하고 쿼리 시점에 조인하는 대신, 애플리케이션이 데이터를 가져와야 하는 모든 방식을 나열하고 — ID로 사용자 가져오기, 사용자의 주문을 최신순으로 나열하기, 이메일로 계정 찾기 — 각각이 단일 GetItem 또는 Query가 되도록 키를 설계합니다. 기본 테이블이 답할 수 없는 모든 패턴은 인덱스라는 대가를 치르며, 그 트레이드오프는 테이블을 만들기 전에 보여야 합니다.

이 플래너는 그 트레이드오프를 명시적으로 드러냅니다. 표준 싱글 테이블 규칙을 결정론적으로 적용하며 — 엔터티 접두사가 붙은 복합 키, 일대다 패턴을 위한 항목 컬렉션, 나머지를 위한 반전(inverted) 또는 속성 범위 GSI — 패턴을 깔끔하게 처리할 수 없는 곳에서는 그런 척하지 않고 그렇다고 말합니다. 예시 항목 테이블은 결과 행들이 실제로 파티션 안에서 서로 어떻게 나란히 놓이는지 보여줍니다.

출력은 일반적인 문자열 타입 키 속성을 갖는 순수한 CreateTable JSON 문서로 — 나중에 풀어내야 할 도구 종속적인 것이 전혀 없습니다 — 저희 요금 및 항목 크기 계산기가 사용하는 것과 똑같은 4 KB 읽기 / 1 KB 쓰기 반올림을 재사용하는 비용 힌트가 더해집니다.

개념이 처음이거나, 이 접근 방식이 워크로드에 맞을지 확신이 서지 않나요? 저희 싱글 테이블 디자인 가이드 가 그 개념을 첫 원리부터 설명하고, 언제 쓰지 말아야 하는지 가 솔직한 반례들을 다룹니다. 스키마가 정해지면 DynamoDB 쿼리 빌더에서 실제 요청 구성 하거나, 전체 월 요금은 다음으로 추정해 보세요: DynamoDB 요금 계산기.

자주 묻는 질문

DynamoDB에서 싱글 테이블 디자인이란 무엇인가요?

애플리케이션의 모든 엔터티 타입이 일반적인 파티션 키와 정렬 키 속성(PK/SK)을 갖는 하나의 테이블을 공유하는 모델링 접근 방식입니다. 관련 항목이 파티션 키를 공유하므로 단일 Query로 함께 가져올 수 있으며 — 이 디자인은 정규화된 엔터티 형태가 아니라 여러분의 액세스 패턴에 의해 주도됩니다.

이 플래너는 키 디자인을 어떻게 결정하나요?

생성형이 아니라, 고정되고 공개된 규칙으로 결정론적으로 결정합니다. 모든 엔터티는 엔터티 접두사가 붙은 키를 갖는 자체 항목 컬렉션의 루트로 시작합니다. 첫 번째 자식 목록 조회 패턴은 자식을 복합 정렬 키 위에서 부모의 파티션으로 옮깁니다. 다른 속성에 의한 조회, 두 번째 부모, 전체 목록 조회 패턴은 GSI 제안이 됩니다. 그리고 규칙이 깔끔하게 처리할 수 없는 패턴은 임의로 만든 디자인을 부여하는 대신 지원되지 않음으로 표시됩니다.

액세스 패턴은 언제 글로벌 보조 인덱스가 필요한가요?

기본 테이블의 키 레이아웃이 답할 수 없을 때입니다: 다시 배치된 자식을 자체 ID로 가져오기, 같은 항목을 두 번째 부모 아래에서 나열하기, 이메일 같은 키가 아닌 속성으로 항목 찾기, 또는 한 타입의 모든 항목 나열하기. 이들 각각은 같은 데이터를 다시 키잉하는데, 이는 인덱스만 할 수 있습니다 — 플래너는 키 형태마다 하나씩 제안하고, 같은 형태를 공유하는 패턴 전반에서 재사용합니다.

GSI는 DynamoDB 비용에 어떤 영향을 주나요?

모든 GSI는 자신이 다루는 항목의 프로젝션된 사본을 자체적으로 유지하므로, 테이블 쓰기마다 해당 항목을 프로젝션하는 모든 GSI에서 쓰기 용량도 소비되고, 스토리지는 사본당 청구됩니다. 비용 카드는 기본 테이블 추정치와 GSI 쓰기 복제를 포함한 추정치를 함께 보여주며, 저희 요금 및 항목 크기 계산기와 동일한 4 KB 읽기 / 1 KB 쓰기 반올림을 사용합니다.

플래너가 제 데이터 모델을 어딘가에 업로드하나요?

아니요. 이 페이지는 정적이며 디자인은 전적으로 브라우저에서 계산됩니다 — 엔터티 이름, ID 속성, 액세스 패턴은 절대 서버에 도달하지 않습니다. 디자인이 페이지를 벗어나는 유일한 방법은 “링크 복사” URL로, 이는 디자인을 링크 안에 담아 공유가 의도적인 행동으로 유지되도록 합니다.

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.