

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 2단계: 원장에 테이블, 인덱스 및 샘플 데이터 생성
<a name="getting-started-step-2"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB 원장이 활성화되면 차량, 소유자 및 등록 정보에 대한 데이터 테이블 생성을 시작할 수 있습니다. 테이블과 인덱스를 생성한 후 데이터를 로드할 수 있습니다.

이 단계에서는 `vehicle-registration` 원장에 4개의 테이블을 생성합니다.
+ `VehicleRegistration`
+ `Vehicle`
+ `Person`
+ `DriversLicense`

또한 다음과 같은 인덱스를 생성합니다.


****  

| 테이블 이름 | 필드 | 
| --- | --- | 
| VehicleRegistration | VIN | 
| VehicleRegistration | LicensePlateNumber | 
| Vehicle | VIN | 
| Person | GovId | 
| DriversLicense | LicensePlateNumber | 
| DriversLicense | PersonId | 

QLDB 콘솔을 사용하여 인덱스가 있는 이러한 테이블을 자동으로 생성하고 샘플 데이터를 로드할 수 있습니다. 또는 콘솔의 **PartiQL 편집기**를 사용하여 각 [PartiQL](ql-reference.md) 문을 단계별로 수동으로 실행할 수 있습니다.

## 자동 옵션
<a name="getting-started-step-2.con-auto"></a>

**테이블, 인덱스 및 샘플 데이터를 생성하려면**

1. [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb)에서 Amazon QLDB 콘솔을 엽니다.

1. 탐색 창에서 **시작하기**를 선택합니다.

1. **샘플 애플리케이션 데이터** 카드의 **자동 옵션** 아래 원장 목록에서 `vehicle-registration`을 선택합니다.

1. **샘플 데이터 로드**를 선택합니다.

   작업이 성공적으로 완료되면 콘솔에 **샘플 데이터가 로드되었다**는 메시지가 표시됩니다.

   이 스크립트는 단일 트랜잭션에서 모든 명령문을 실행합니다. 트랜잭션의 일부가 실패하면 모든 명령문이 롤백되고 적절한 오류 메시지가 표시됩니다. 문제를 해결한 후 작업을 재시도할 수 있습니다.
**참고**  
트랜잭션 실패의 한 가지 가능한 원인은 중복 테이블을 만들려고 시도하는 것입니다. 원장에 `VehicleRegistration`, `Vehicle`, `Person`, `DriversLicense` 등의 테이블 이름이 이미 있는 경우 샘플 데이터 로드 요청이 실패합니다.  
대신 이 샘플 데이터를 빈 원장에 로드해 보세요.
이 스크립트는 파라미터화된 `INSERT` 문을 실행합니다. 따라서 이러한 PartiQL 문은 리터럴 데이터 대신 바인드 파라미터를 사용하여 저널 블록에 기록됩니다. 예를 들어, 저널 블록에서 다음 명령문을 볼 수 있는데, 여기서 물음표(`?`)는 문서 콘텐츠의 변수 자리 표시자입니다.  

     ```
     INSERT INTO Vehicle ?
     ```

## 수동 옵션
<a name="getting-started-step-2.con"></a>

`PrimaryOwner` 필드가 비어 있는 `VehicleRegistration`에 문서를 삽입하고, `PersonId` 필드가 비어 있는 `DriversLicense`에 문서를 삽입합니다. 나중에 이 필드를 `Person` 테이블의 시스템 할당 문서 `id`로 채웁니다.

**작은 정보**  
가장 좋은 방법은 이 문서 `id` 메타데이터 필드를 외부 키로 사용하는 것입니다. 자세한 내용은 [문서 메타데이터 쿼리](working.metadata.md)을 참조하세요.

**테이블, 인덱스 및 샘플 데이터를 생성하려면**

1. [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb)에서 Amazon QLDB 콘솔을 엽니다.

1. 탐색 창에서 **PartiQL 편집기**를 선택합니다.

1. `vehicle-registration` 원장을 선택합니다.

1. 먼저 테이블 네 개를 생성합니다. QLDB는 개방형 콘텐츠를 지원하며 스키마를 적용하지 않으므로 속성이나 데이터 유형을 지정하지 않습니다.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다. 명령문을 실행하려면 키보드 단축키(Windows의 경우 Ctrl\$1Enter, macOS의 경우 Cmd\$1Return)를 사용할 수도 있습니다. 키보드 단축키에 대한 자세한 내용은 [PartiQL 편집기 키보드 바로 가기](console_QLDB.md#console_QLDB.partiql-editor-shortcuts) 섹션을 참조하세요.

   ```
   CREATE TABLE VehicleRegistration
   ```

   다음 각 작업에 대해 이 단계를 반복합니다.

   ```
   CREATE TABLE Vehicle
   ```

   ```
   CREATE TABLE Person
   ```

   ```
   CREATE TABLE DriversLicense
   ```

1. 그런 다음 각 테이블의 쿼리 성능을 최적화하는 인덱스를 생성합니다.
**중요**  
QLDB는 문서를 효율적으로 조회하기 위한 인덱스가 필요합니다. 인덱스가 없으면 QLDB는 문서를 읽을 때 전체 테이블 스캔을 수행해야 합니다. 이로 인해 동시성 충돌 및 트랜잭션 시간 초과를 포함하여 대규모 테이블에서 성능 문제가 발생할 수 있습니다.  
인덱싱된 필드 또는 문서 ID(예: `=` 또는 `IN`)에서 동등 *연산자*를 사용하여 `WHERE` 조건자 절이 포함된 문을 실행하는 것이 좋습니다. 자세한 내용은 [쿼리 성능 최적화](working.optimize.md)을 참조하세요.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다.

   ```
   CREATE INDEX ON VehicleRegistration (VIN)
   ```

   다음에 대해 이 단계를 반복합니다.

   ```
   CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
   ```

   ```
   CREATE INDEX ON Vehicle (VIN)
   ```

   ```
   CREATE INDEX ON Person (GovId)
   ```

   ```
   CREATE INDEX ON DriversLicense (LicensePlateNumber)
   ```

   ```
   CREATE INDEX ON DriversLicense (PersonId)
   ```

1. 인덱스를 생성한 후 테이블에 데이터 로드를 시작할 수 있습니다. 이 단계에서는 원장이 추적하는 차량 소유자에 대한 개인 정보가 포함된 문서를 `Person` 테이블에 삽입합니다.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다.

   ```
   INSERT INTO Person
   << {
       'FirstName' : 'Raul',
       'LastName' : 'Lewis',
       'DOB' : `1963-08-19T`,
       'GovId' : 'LEWISR261LL',
       'GovIdType' : 'Driver License',
       'Address' : '1719 University Street, Seattle, WA, 98109'
   },
   {
       'FirstName' : 'Brent',
       'LastName' : 'Logan',
       'DOB' : `1967-07-03T`,
       'GovId' : 'LOGANB486CG',
       'GovIdType' : 'Driver License',
       'Address' : '43 Stockert Hollow Road, Everett, WA, 98203'
   },
   {
       'FirstName' : 'Alexis',
       'LastName' : 'Pena',
       'DOB' : `1974-02-10T`,
       'GovId' : '744 849 301',
       'GovIdType' : 'SSN',
       'Address' : '4058 Melrose Street, Spokane Valley, WA, 99206'
   },
   {
       'FirstName' : 'Melvin',
       'LastName' : 'Parker',
       'DOB' : `1976-05-22T`,
       'GovId' : 'P626-168-229-765',
       'GovIdType' : 'Passport',
       'Address' : '4362 Ryder Avenue, Seattle, WA, 98101'
   },
   {
       'FirstName' : 'Salvatore',
       'LastName' : 'Spencer',
       'DOB' : `1997-11-15T`,
       'GovId' : 'S152-780-97-415-0',
       'GovIdType' : 'Passport',
       'Address' : '4450 Honeysuckle Lane, Seattle, WA, 98101'
   } >>
   ```

1. 그런 다음 각 차량 소유자의 운전 면허 정보가 포함된 문서로 `DriversLicense` 테이블을 채우세요.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다.

   ```
   INSERT INTO DriversLicense
   << {
       'LicensePlateNumber' : 'LEWISR261LL',
       'LicenseType' : 'Learner',
       'ValidFromDate' : `2016-12-20T`,
       'ValidToDate' : `2020-11-15T`,
       'PersonId' : ''
   },
   {
       'LicensePlateNumber' : 'LOGANB486CG',
       'LicenseType' : 'Probationary',
       'ValidFromDate' : `2016-04-06T`,
       'ValidToDate' : `2020-11-15T`,
       'PersonId' : ''
   },
   {
       'LicensePlateNumber' : '744 849 301',
       'LicenseType' : 'Full',
       'ValidFromDate' : `2017-12-06T`,
       'ValidToDate' : `2022-10-15T`,
       'PersonId' : ''
   },
   {
       'LicensePlateNumber' : 'P626-168-229-765',
       'LicenseType' : 'Learner',
       'ValidFromDate' : `2017-08-16T`,
       'ValidToDate' : `2021-11-15T`,
       'PersonId' : ''
   },
   {
       'LicensePlateNumber' : 'S152-780-97-415-0',
       'LicenseType' : 'Probationary',
       'ValidFromDate' : `2015-08-15T`,
       'ValidToDate' : `2021-08-21T`,
       'PersonId' : ''
   } >>
   ```

1. 이제 `VehicleRegistration` 테이블을 차량 등록 문서로 채우세요. 이러한 문서에는 기본 소유자와 보조 소유자를 저장하는 중첩된 `Owners` 구조가 포함되어 있습니다.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다.

   ```
   INSERT INTO VehicleRegistration
   << {
       'VIN' : '1N4AL11D75C109151',
       'LicensePlateNumber' : 'LEWISR261LL',
       'State' : 'WA',
       'City' : 'Seattle',
       'PendingPenaltyTicketAmount' : 90.25,
       'ValidFromDate' : `2017-08-21T`,
       'ValidToDate' : `2020-05-11T`,
       'Owners' : {
           'PrimaryOwner' : { 'PersonId': '' },
           'SecondaryOwners' : []
       }
   },
   {
       'VIN' : 'KM8SRDHF6EU074761',
       'LicensePlateNumber' : 'CA762X',
       'State' : 'WA',
       'City' : 'Kent',
       'PendingPenaltyTicketAmount' : 130.75,
       'ValidFromDate' : `2017-09-14T`,
       'ValidToDate' : `2020-06-25T`,
       'Owners' : {
           'PrimaryOwner' : { 'PersonId': '' },
           'SecondaryOwners' : []
       }
   },
   {
       'VIN' : '3HGGK5G53FM761765',
       'LicensePlateNumber' : 'CD820Z',
       'State' : 'WA',
       'City' : 'Everett',
       'PendingPenaltyTicketAmount' : 442.30,
       'ValidFromDate' : `2011-03-17T`,
       'ValidToDate' : `2021-03-24T`,
       'Owners' : {
           'PrimaryOwner' : { 'PersonId': '' },
           'SecondaryOwners' : []
       }
   },
   {
       'VIN' : '1HVBBAANXWH544237',
       'LicensePlateNumber' : 'LS477D',
       'State' : 'WA',
       'City' : 'Tacoma',
       'PendingPenaltyTicketAmount' : 42.20,
       'ValidFromDate' : `2011-10-26T`,
       'ValidToDate' : `2023-09-25T`,
       'Owners' : {
           'PrimaryOwner' : { 'PersonId': '' },
           'SecondaryOwners' : []
       }
   },
   {
       'VIN' : '1C4RJFAG0FC625797',
       'LicensePlateNumber' : 'TH393F',
       'State' : 'WA',
       'City' : 'Olympia',
       'PendingPenaltyTicketAmount' : 30.45,
       'ValidFromDate' : `2013-09-02T`,
       'ValidToDate' : `2024-03-19T`,
       'Owners' : {
           'PrimaryOwner' : { 'PersonId': '' },
           'SecondaryOwners' : []
       }
   } >>
   ```

1. 마지막으로 원장에 등록된 차량을 설명하는 문서로 `Vehicle` 테이블을 채우세요.

   쿼리 편집기 창에서 다음 문을 입력한 후 **실행**을 선택합니다.

   ```
   INSERT INTO Vehicle
   << {
       'VIN' : '1N4AL11D75C109151',
       'Type' : 'Sedan',
       'Year' : 2011,
       'Make' : 'Audi',
       'Model' : 'A5',
       'Color' : 'Silver'
   },
   {
       'VIN' : 'KM8SRDHF6EU074761',
       'Type' : 'Sedan',
       'Year' : 2015,
       'Make' : 'Tesla',
       'Model' : 'Model S',
       'Color' : 'Blue'
   },
   {
       'VIN' : '3HGGK5G53FM761765',
       'Type' : 'Motorcycle',
       'Year' : 2011,
       'Make' : 'Ducati',
       'Model' : 'Monster 1200',
       'Color' : 'Yellow'
   },
   {
       'VIN' : '1HVBBAANXWH544237',
       'Type' : 'Semi',
       'Year' : 2009,
       'Make' : 'Ford',
       'Model' : 'F 150',
       'Color' : 'Black'
   },
   {
       'VIN' : '1C4RJFAG0FC625797',
       'Type' : 'Sedan',
       'Year' : 2019,
       'Make' : 'Mercedes',
       'Model' : 'CLK 350',
       'Color' : 'White'
   } >>
   ```

다음으로 `SELECT` 문을 사용하여 `vehicle-registration` 원장의 테이블에서 데이터를 읽을 수 있습니다. [3단계: 원장에서 테이블 쿼리](getting-started-step-3.md)로 이동합니다.