

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

# 샤드 나열
<a name="kinesis-using-sdk-java-list-shards"></a>

한 데이터 스트림에는 하나 이상의 샤드가 있을 수 있습니다. 데이터 스트림에서 샤드를 나열하거나 검색하는 데 권장되는 방법은 [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html) API를 사용하는 것입니다. 다음 예제에서는 데이터 스트림에서 샤드 목록을 가져오는 방법을 보여줍니다. 이 예제에 사용되는 기본 작업과 이 작업에 설정할 수 있는 모든 파라미터에 대한 완전한 설명은 [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html)를 참조하십시오.

```
import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
import software.amazon.awssdk.services.kinesis.model.ListShardsRequest;
import software.amazon.awssdk.services.kinesis.model.ListShardsResponse;

import java.util.concurrent.TimeUnit;

public class ShardSample {

    public static void main(String[] args) {

        KinesisAsyncClient client = KinesisAsyncClient.builder().build();

        ListShardsRequest request = ListShardsRequest
                .builder().streamName("myFirstStream")
                .build();

        try {
            ListShardsResponse response = client.listShards(request).get(5000, TimeUnit.MILLISECONDS);
            System.out.println(response.toString());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
```

이전 코드 예제를 실행하려면 다음과 같은 POM 파일을 사용할 수 있습니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>kinesis.data.streams.samples</groupId>
    <artifactId>shards</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>kinesis</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>
</project>
```

`ListShards` API를 사용하면 [ShardFilter](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ShardFilter.html) 파라미터로 API의 응답을 필터링할 수 있습니다. 한 번에 하나의 필터만 지정할 수 있습니다.

ListShards API를 간접적으로 호출할 때 `ShardFilter` 파라미터를 사용하는 경우 `Type`는 필수 속성이므로 반드시 지정해야 합니다. `AT_TRIM_HORIZON`, `FROM_TRIM_HORIZON` 또는 `AT_LATEST` 유형을 지정하는 경우 `ShardId` 또는 `Timestamp` 선택적 속성을 지정할 필요가 없습니다.

`AFTER_SHARD_ID` 유형을 지정하는 경우 선택적 `ShardId` 속성의 값도 제공해야 합니다. `ShardId` 속성은 기능면에서 ListShards API의 `ExclusiveStartShardId` 파라미터와 동일합니다. `ShardId` 속성이 지정되면 제공된 `ShardId` 바로 뒤에 ID가 있는 샤드로 시작하는 샤드가 응답에 포함됩니다.

`AT_TIMESTAMP` 또는 `FROM_TIMESTAMP_ID` 유형을 지정하면 선택적 `Timestamp` 속성의 값도 제공해야 합니다. `AT_TIMESTAMP` 유형을 지정하면 제공된 타임스탬프에 열려 있던 모든 샤드가 반환됩니다. `FROM_TIMESTAMP` 유형을 지정하면 제공된 타임스탬프부터 TIP까지의 모든 샤드가 반환됩니다.

**중요**  
`DescribeStreamSummary` 및 `ListShard` API는 데이터 스트림에 대한 정보를 검색할 수 있는 보다 확장 가능한 방법을 제공합니다. 더 구체적으로 말하면, DescribeStream API에 대한 할당량으로 인해 제한이 발생할 수 있습니다. 자세한 내용은 [할당량 및 제한](service-sizes-and-limits.md) 단원을 참조하십시오. 또한 `DescribeStream` 할당량은 AWS 계정의 모든 데이터 스트림과 상호 작용하는 모든 애플리케이션에서 공유됩니다. 반면 ListShards API의 할당량은 단일 데이터 스트림에만 적용됩니다. 따라서 ListShards API를 사용하면 더 높은 TPS를 얻을 수 있을 뿐만 아니라 더 많은 데이터 스트림을 생성할수록 작업 규모가 더 잘 확장됩니다.  
DescribeStream API를 직접적으로 호출하는 모든 생산자와 소비자를 마이그레이션하여 대신 DescribeStreamSummary 및 ListShard API를 간접적으로 호출하는 것이 좋습니다. 이러한 생산자와 소비자를 식별하려면 API 호출에서 KPL 및 KCL용 사용자 에이전트가 캡처되므로 Athena를 사용하여 CloudTrail 로그를 구문 분석하는 것이 좋습니다.  

```
SELECT useridentity.sessioncontext.sessionissuer.username, 
useridentity.arn,eventname,useragent, count(*) FROM 
cloudtrail_logs WHERE Eventname IN ('DescribeStream')  AND 
eventtime
    BETWEEN ''
        AND ''
GROUP BY  useridentity.sessioncontext.sessionissuer.username,useridentity.arn,eventname,useragent
ORDER BY  count(*) DESC LIMIT 100
```
또한 `DescribeStream` API를 호출하는 Kinesis Data Streams와의 AWS Lambda 및 Amazon Firehose 통합을 재구성하여 통합이 대신 `DescribeStreamSummary` 및를 호출하도록 하는 것이 좋습니다`ListShards`. 특히 AWS Lambda의 경우 이벤트 소스 매핑을 업데이트해야 합니다. Amazon Firehose의 경우 `ListShards` IAM 권한이 포함되도록 해당 IAM 권한을 업데이트해야 합니다.