

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

# API를 사용하여 스트림 생성
<a name="kinesis-using-sdk-java-create-stream"></a>

다음 단계에 따라 Kinesis 데이터 스트림을 생성합니다.

## Kinesis Data Streams 클라이언트 구축
<a name="kinesis-using-sdk-java-create-client"></a>

Kinesis 데이터 스트림 작업을 수행하기 전에 클라이언트 객체를 구축해야 합니다. 다음 Java 코드는 클라이언트 빌더를 인스턴스화하고 이를 사용하여 리전, 자격 증명 및 클라이언트 구성을 설정합니다. 그리고 클라이언트 객체를 구축합니다.

```
AmazonKinesisClientBuilder clientBuilder = AmazonKinesisClientBuilder.standard();
        
clientBuilder.setRegion(regionName);
clientBuilder.setCredentials(credentialsProvider);
clientBuilder.setClientConfiguration(config);
        
AmazonKinesis client = clientBuilder.build();
```

자세한 내용은 **AWS 일반 참조의 [Kinesis Data Streams Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#ak_region)를 참조하세요.

## 스트림 생성
<a name="kinesis-using-sdk-java-create-the-stream"></a>

Kinesis Data Streams 클라이언트를 생성했으므로 콘솔을 사용하거나 프로그래밍 방식으로 스트림을 생성할 수 있습니다. 프로그래밍 방식으로 스트림을 생성하려면 `CreateStreamRequest` 객체를 인스턴스화하고 스트림의 이름을 지정합니다. 프로비저닝된 모드를 사용하려면 사용할 데이터 스트림의 샤드 수를 지정해야 합니다.
+ **온디맨드**:

  ```
  CreateStreamRequest createStreamRequest = new CreateStreamRequest();
  createStreamRequest.setStreamName( myStreamName );
  ```
+ **프로비저닝됨**:

  ```
  CreateStreamRequest createStreamRequest = new CreateStreamRequest();
  createStreamRequest.setStreamName( myStreamName );
  createStreamRequest.setShardCount( myStreamSize );
  ```

스트림 이름은 스트림을 식별합니다. 이름은 애플리케이션에서 사용하는 AWS 계정으로 범위가 지정됩니다. 또한 리전에 의해서도 범위가 지정됩니다. 즉, 서로 다른 두 AWS 계정의 두 스트림은 동일한 이름을 가질 수 있고, 동일한 AWS 계정의 두 스트림은 서로 다른 두 리전의 두 스트림은 동일한 이름을 가질 수 있지만 동일한 계정과 동일한 리전의 두 스트림은 가질 수 없습니다.

스트림의 처리량은 샤드 수의 함수입니다. 프로비저닝된 처리량을 높이려면 더 많은 샤드가 필요합니다. 샤드가 많을수록가 스트림에 대해 AWS 부과하는 비용도 증가합니다. 애플리케이션에 적절한 샤드 수 계산에 대한 자세한 내용은 [스트리밍할 올바른 모드 선택](how-do-i-size-a-stream.md) 단원을 참조하십시오.

 `createStreamRequest` 객체를 구성했으면 클라이언트에 대해 `createStream` 메서드를 호출하여 스트림을 생성합니다. `createStream`을 호출한 후, 스트림이 `ACTIVE` 상태에 도달할 때까지 기다린 다음 스트림에 대한 작업을 수행합니다. 스트림의 상태를 확인하려면 `describeStream` 메서드를 호출하십시오. 그러나 스트림이 존재하지 않는 경우 `describeStream`을 호출하면 예외가 발생합니다. 따라서 `describeStream` 호출을 `try/catch` 블록으로 묶으십시오.

```
client.createStream( createStreamRequest );
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest();
describeStreamRequest.setStreamName( myStreamName );

long startTime = System.currentTimeMillis();
long endTime = startTime + ( 10 * 60 * 1000 );
while ( System.currentTimeMillis() < endTime ) {
  try {
    Thread.sleep(20 * 1000);
  } 
  catch ( Exception e ) {}
  
  try {
    DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest );
    String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus();
    if ( streamStatus.equals( "ACTIVE" ) ) {
      break;
    }
    //
    // sleep for one second
    //
    try {
      Thread.sleep( 1000 );
    }
    catch ( Exception e ) {}
  }
  catch ( ResourceNotFoundException e ) {}
}
if ( System.currentTimeMillis() >= endTime ) {
  throw new RuntimeException( "Stream " + myStreamName + " never went active" );
}
```