

# 테이블에 데이터를 쓸 때의 관계형(SQL) 데이터베이스와 DynamoDB 비교
<a name="SQLtoNoSQL.WriteData"></a>

관계형 데이터베이스 테이블에는 데이터의 *행*이 포함됩니다. 행은 *열*로 구성됩니다. Amazon DynamoDB 테이블에는 *항목*이 포함됩니다. 항목은 *속성*으로 구성됩니다.

이 섹션에서는 테이블에 하나의 행(또는 항목)을 쓰는 방법을 설명합니다.

**Topics**
+ [

## SQL에서 테이블에 데이터 쓰기
](#SQLtoNoSQL.WriteData.SQL)
+ [

## DynamoDB에서 테이블에 데이터 쓰기
](#SQLtoNoSQL.WriteData.DynamoDB)

## SQL에서 테이블에 데이터 쓰기
<a name="SQLtoNoSQL.WriteData.SQL"></a>

관계형 데이터베이스의 테이블은 행과 열로 이루어진 2차원 데이터 구조입니다. 일부 데이터베이스 관리 시스템은 보통 기본 JSON 또는 XML 데이터 형식을 사용하여 반정형 데이터 지원도 제공합니다. 하지만 구현의 세부적 내용은 공급업체마다 다릅니다.

SQL에서는 `INSERT` 문을 사용하여 테이블에 행을 추가합니다.

```
INSERT INTO Music
    (Artist, SongTitle, AlbumTitle,
    Year, Price, Genre,
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country',
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
```

이 테이블의 기본 키는 *Artist* 및 *SongTitle*로 구성됩니다. 이 열들의 값을 지정해야 합니다.

**참고**  
이 예제에서는 *Tags* 열을 사용하여 *Music* 테이블의 노래에 대한 반정형 데이터를 저장합니다. *Tags* 열은 TEXT 형식으로 정의되었으며 MySQL에 최대 65,535자를 저장할 수 있습니다.

## DynamoDB에서 테이블에 데이터 쓰기
<a name="SQLtoNoSQL.WriteData.DynamoDB"></a>

Amazon DynamoDB에서는 DynamoDB API나 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html)(SQL 호환 쿼리 언어)을 사용하여 테이블에 항목을 추가할 수 있습니다.

------
#### [ DynamoDB API ]

DynamoDB API에서는 `PutItem` 작업을 사용하여 테이블에 항목을 추가합니다.

```
{
    TableName: "Music",
    Item: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today",
        "AlbumTitle":"Somewhat Famous",
        "Year": 2015,
        "Price": 2.14,
        "Genre": "Country",
        "Tags": {
            "Composers": [
                  "Smith",
                  "Jones",
                  "Davis"
            ],
            "LengthInSeconds": 214
        }
    }
}
```

이 테이블의 기본 키는 *Artist* 및 *SongTitle*로 구성됩니다. 이 속성들의 값을 지정해야 합니다.

다음은 이 `PutItem` 예제에 관해 알아야 할 주요 사항입니다.
+ DynamoDB는 JSON을 사용하여 문서에 대한 기본 지원을 제공합니다. 따라서 DynamoDB는 *Tags* 같은 반정형 데이터를 저장하는 데 적합합니다. JSON 문서 안에서 데이터를 가져오고 조작할 수도 있습니다.
+ *Music* 테이블에는 기본 키(*Artist* 및 *SongTitle*) 외에는 미리 정의된 속성이 없습니다.
+ 대부분의 SQL 데이터베이스는 트랜잭션 지향적입니다. `INSERT` 문을 발행하더라도 `COMMIT` 문을 발행하기 전까지는 데이터 수정이 영구적이지 않습니다. Amazon DynamoDB의 경우, DynamoDB가 HTTP 200 상태 코드(`OK`)로 응답하면 `PutItem` 작업의 결과가 영구적으로 적용됩니다.

다음은 몇 가지 다른 `PutItem` 예제입니다.

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "My Dog Spot",
        "AlbumTitle":"Hey Now",
        "Price": 1.98,
        "Genre": "Country",
        "CriticRating": 8.4
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "Somewhere Down The Road",
        "AlbumTitle":"Somewhat Famous",
        "Genre": "Country",
        "CriticRating": 8.4,
        "Year": 1984
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 2.47,
        "Genre": "Rock",
        "PromotionInfo": {
            "RadioStationsPlaying":[
                 "KHCR", "KBQX", "WTNR", "WJJH"
            ],
            "TourDates": {
                "Seattle": "20150625",
                "Cleveland": "20150630"
            },
            "Rotation": "Heavy"
        }
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Look Out, World",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 0.99,
        "Genre": "Rock"
    }
}
```

**참고**  
DynamoDB는 `PutItem` 외에도 여러 항목을 동시에 쓰는 `BatchWriteItem` 작업을 지원합니다.

------
#### [ PartiQL for DynamoDB ]

PartiQL에서는 PartiQL `Insert` 문을 사용하여 `ExecuteStatement` 작업을 통해 테이블에 항목을 추가합니다.

```
INSERT into Music value {  
    'Artist': 'No One You Know',
    'SongTitle': 'Call Me Today',
    'AlbumTitle': 'Somewhat Famous',
    'Year' : '2015',
    'Genre' : 'Acme'
}
```

이 테이블의 기본 키는 *Artist* 및 *SongTitle*로 구성됩니다. 이 속성들의 값을 지정해야 합니다.

**참고**  
`Insert` 및 `ExecuteStatement`를 사용하는 코드 예제는 [DynamoDB의 PartiQL insert 문](ql-reference.insert.md) 섹션을 참조하세요.

------