

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

# Managed Service for Apache Flink 애플리케이션 생성 및 사용 예제
<a name="examples-collapsibles"></a>

이 섹션은 Managed Service for Apache Flink에서 애플리케이션을 만들고 사용하는 방법의 예제들을 제공합니다. 여기에는 Managed Service for Apache Flink 애플리케이션을 생성하고 결과를 테스트하는 데 도움이 되는 예제 코드와 단계별 지침이 포함되어 있습니다.

이 예제들을 살펴보기 전에 먼저 다음 사항을 검토하는 것이 좋습니다.
+ [작동 방식](how-it-works.md)
+ [자습서: Managed Service for Apache Flink에서 DataStream API 사용 시작하기](getting-started.md)

**참고**  
이 예제에서는 미국 동부(버지니아 북부) 리전(us-east-1)을 사용한다고 가정합니다. 다른 리전을 사용하는 경우 애플리케이션 코드, 명령, IAM 역할을 적절하게 업데이트하세요.

**Topics**
+ [Managed Service for Apache Flink의 Java 예제](examples-new-java.md)
+ [Managed Service for Apache Flink의 Python 예제](examples-new-python.md)
+ [Managed Service for Apache Flink의 Scala 예제](examples-new-scala.md)

# Managed Service for Apache Flink의 Java 예제
<a name="examples-new-java"></a>

다음 예제는 Java로 작성된 애플리케이션을 생성하는 방법을 보여줍니다.



**참고**  
대부분의 예제는 개발 머신과 사용 중인 IDE에서 로컬로 실행할 수도 있고 Amazon Managed Service for Apache Flink에서도 그대로 실행할 수도 있도록 설계되어 있습니다. 이 예제들은 애플리케이션 파라미터를 전달하는 데 사용할 수 있는 메커니즘과 두 환경에서 변경 없이 애플리케이션을 실행할 수 있도록 종속 항목을 올바르게 설정하는 방법을 보여줍니다.

## 사용자 지정 TypeInfo로 직렬화 성능 개선
<a name="improving-serialization-performance-java"></a>

이 예제는 레코드 또는 상태 객체에 사용자 지정 TypeInfo를 정의해 직렬화가 덜 효율적인 Kryo 직렬화로 폴백되는 것을 방지하는 방법을 보여줍니다. 이는 예를 들어 객체에 `List` 또는 `Map`이 포함된 경우에 필요합니다 자세한 내용은 Apache Flink 설명서의 [데이터 형식 및 직렬화](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/fault-tolerance/serialization/types_serialization/#data-types--serialization)를 참조하세요. 또한 이 예제는 객체 직렬화가 덜 효율적인 Kryo 직렬화로 폴백되는지 테스트하는 방법도 함께 제공합니다.

코드 예제: [CustomTypeInfo](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/Serialization/CustomTypeInfo)

## DataStream API 시작하기
<a name="getting-started-datastream-java"></a>

이 예제는 `DataStream` API를 사용해 Kinesis 데이터 스트림에서 읽고 다른 Kinesis 데이터 스트림에 쓰는 간단한 애플리케이션을 보여줍니다. 이 예제는 올바른 종속 항목으로 파일을 설정하고, uber-JAR을 빌드한 다음 구성 파라미터를 구문 분석하여 애플리케이션을 로컬로 IDE에서 그리고 Amazon Managed Service for Apache Flink에서 모두 실행할 수 있도록 하는 방법을 보여줍니다.

코드 예제: [GettingStarted](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/GettingStarted)

## Table API 및 SQL 시작하기
<a name="getting-started-table-java"></a>

이 예제는 `Table` API 및 SQL을 사용하는 간단한 애플리케이션을 보여줍니다. 동일한 Java 애플리케이션에서 `DataStream` API를 `Table` API 또는 SQL과 통합하는 방법을 보여줍니다. 이 예제는 외부 데이터 생성기 없이도 Flink 애플리케이션 내부에서 무작위 테스트 데이터를 생성할 수 있도록 `DataGen` 커넥터를 사용하는 방법도 함께 보여줍니다.

전체 예제: [GettingStartedTable](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/GettingStartedTable)

## S3Sink(DataStream API)사용
<a name="s3-sink-java"></a>

이 예제는 `DataStream` API의 `FileSink`를 사용하여 JSON 파일을 S3 버킷에 쓰는 방법을 보여줍니다.

코드 예제: [S3Sink](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/S3Sink)

## Kinesis 소스, 표준 또는 EFO 소비자, 싱크 사용(DataStream API)
<a name="kinesis-EFO-sink-java"></a>

이 예제는 표준 소비자 또는 EFO를 사용해 Kinesis 데이터 스트림에서 소비하는 소스를 구성하고 Kinesis 데이터 스트림으로 싱크를 설정하는 방법을 보여줍니다.

코드 예제: [KinesisConnectors](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/KinesisConnectors)

## Amazon Data Firehose 싱크(DataStream API) 사용
<a name="firehose-sink-java"></a>

이 예제는 Amazon Data Firehose(이전 명칭: Kinesis Data Firehose)로 데이터를 전송하는 방법을 보여줍니다.

코드 예제: [KinesisFirehoseSink](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/KinesisFirehoseSink)

## Prometheus 싱크 커넥터 사용
<a name="prometheus-sink-java"></a>

이 예제는 [Prometheus 싱크 커넥터](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/connectors/datastream/prometheus/)를 사용하여 시계열 데이터를 Prometheus에 쓰는 방법을 보여줍니다.

코드 예제: [PrometheusSink](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/PrometheusSink)

## 윈도우 집계(DataStream API)사용
<a name="windowing-aggregations-java"></a>

이 예제는 `DataStream` API에서 네 가지 유형의 윈도우 집계를 보여줍니다.

1. 처리 시간에 따른 슬라이딩 윈도우

1. 이벤트 시간에 따른 슬라이딩 윈도우

1. 처리 시간에 따른 텀블링 윈도우

1. 이벤트 시간에 따른 텀블링 윈도우

코드 예제: [Windowing](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/Windowing) 

## 사용자 정의 지표 사용
<a name="custom-metrics-java"></a>

이 예제는 Flink 애플리케이션에 사용자 지정 지표를 추가하고 이를 CloudWatch 지표로 전송하는 방법을 보여줍니다.

코드 예제: [CustomMetrics](https://github.com/dzikosc/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics)

## Kafka 구성 공급자를 사용하여 런타임 시 mTLS용 사용자 지정 키 스토어 및 트러스트 스토어 가져오기
<a name="kafka-keystore-mTLS"></a>

이 예제는 Kafka 커넥터의 mTLS 인증을 위해 필요한 인증서가 포함된 사용자 지정 키 스토어와 트러스트 스토어를 설정하기 위해 Kafka 구성 공급자를 사용하는 방법을 보여줍니다. 이 기술을 사용하면 Amazon S3에서 필요한 사용자 지정 인증서를 로드하고 애플리케이션이 시작될 AWS Secrets Manager 때에서 보안 암호를 로드할 수 있습니다.

코드 예제: [Kafka-mTLS-Keystore-ConfigProviders](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/KafkaConfigProviders/Kafka-mTLS-Keystore-ConfigProviders)

## Kafka 구성 공급자를 사용하여 런타임 시 SASL/SCRAM 인증을 위한 보안 암호 가져오기
<a name="kafka-secrets"></a>

이 예제에서는 Kafka 구성 공급자를 사용하여 Amazon S3에서 자격 증명을 가져오 AWS Secrets Manager 고 트러스트 스토어를 다운로드하여 Kafka 커넥터에서 SASL/SCRAM 인증을 설정하는 방법을 보여줍니다. 이 기술을 사용하면 Amazon S3에서 필요한 사용자 지정 인증서를 로드하고 애플리케이션이 시작될 AWS Secrets Manager 때에서 보안 암호를 로드할 수 있습니다.

코드 예제: [Kafka-SASL\$1SSL-ConfigProviders](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/KafkaConfigProviders/Kafka-SASL_SSL-ConfigProviders)

## Kafka 구성 공급자를 사용하여 런타임 시 Table API/SQL로 mTLS용 사용자 지정 키 스토어 및 트러스트 스토어 가져오기
<a name="kafka-custom-keystore"></a>

이 예제는 Kafka 커넥터의 mTLS 인증을 위해 필요한 인증서가 포함된 사용자 지정 키 스토어와 트러스트 스토어를 설정하기 위해 Table API/SQL에서 Kafka 구성 공급자를 사용하는 방법을 보여줍니다. 이 기술을 사용하면 Amazon S3에서 필요한 사용자 지정 인증서를 로드하고 애플리케이션이 시작될 AWS Secrets Manager 때에서 보안 암호를 로드할 수 있습니다.

코드 예제: [Kafka-mTLS-Keystore-Sql-ConfigProviders](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/KafkaConfigProviders/Kafka-mTLS-Keystore-Sql-ConfigProviders)

## Side Outputs를 사용한 스트림 분할
<a name="side-output"></a>

이 예제는 Apache Flink에서 [Side Outputs](https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/side_output/)를 활용해 지정된 속성을 기준으로 스트림을 분할하는 방법을 보여줍니다. 이 패턴은 스트리밍 애플리케이션에서 Dead Letter Queue(DLQ) 개념을 구현할 때 특히 유용합니다.

코드 예제: [SideOutputs](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/SideOutputs)

## 비동기 I/O를 사용한 외부 엔드포인트 직접 호출
<a name="async-i-o"></a>

이 예제는 [Apache Flink 비동기 I/O](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/operators/asyncio/)를 사용해 외부 엔드포인트를 비차단 방식으로 직접적으로 호출하고 복구 가능한 오류에 대해 재시도를 수행하는 방법을 보여줍니다.

코드 예제: [AsyncIO](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/AsyncIO)

# Managed Service for Apache Flink의 Python 예제
<a name="examples-new-python"></a>

다음 예제는 Python으로 작성된 애플리케이션을 생성하는 방법을 보여줍니다.

**참고**  
대부분의 예제는 개발 머신과 사용 중인 IDE에서 로컬로 실행할 수도 있고 Amazon Managed Service for Apache Flink에서도 그대로 실행할 수도 있도록 설계되어 있습니다. 이 예제들은 애플리케이션 파라미터를 전달하는 데 사용할 수 있는 간단한 메커니즘과 두 환경에서 변경 없이 애플리케이션을 실행할 수 있도록 종속 항목을 올바르게 설정하는 방법을 보여줍니다.

**프로젝트 종속성**

대부분의 PyFlink 예제는 Flink 커넥터용 JAR 파일과 같은 하나 이상의 종속 항목이 필요합니다. Amazon Managed Service for Apache Flink에 배포할 때 이러한 항목을 애플리케이션과 함께 패키징해야 합니다.

다음 예제들은 애플리케이션을 로컬에서 실행해 개발 및 테스트하고 필요한 종속 항목을 올바르게 패키징할 수 있는 도구를 이미 포함하고 있습니다. 이 도구는 Java JDK11 및 Apache Maven을 사용해야 합니다. 구체적인 지침은 각 예제에 포함된 README를 참조하세요.

**예시**

## PyFlink 시작하기
<a name="getting-started-pyflink"></a>

이 예제는 Python 코드에 임베딩된 SQL을 사용하는 PyFlink 애플리케이션의 기본 구조를 보여줍니다. 커넥터와 같은 JAR 종속 항목을 포함하는 PyFlink 애플리케이션을 위한 프로젝트 골격도 제공합니다. README 섹션에서는 개발을 위해 Python 애플리케이션을 로컬에서 실행하는 방법을 자세히 안내합니다. 또한 이 예제는 단일 JAR 종속 항목(이 예제에서는 Kinesis SQL 커넥터)을 PyFlink 애플리케이션에 포함하는 방법도 보여줍니다.

코드 예제: [GettingStarted](https://github.com/dzikosc/amazon-managed-service-for-apache-flink-examples/tree/main/python/GettingStarted)

## Python 종속성 추가
<a name="add-python-dependencies"></a>

이 예제는 PyFlink 애플리케이션에 Python 종속성을 가장 일반적인 방식으로 추가하는 방법을 보여줍니다. 이 방법은 Boto3와 같은 간단한 종속성뿐 아니라 PyArrow처럼 C 라이브러리를 포함한 복잡한 종속성에도 적용됩니다.

코드 예제: [PythonDependencies](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/python/PythonDependencies)

## 윈도우 집계(DataStream API)사용
<a name="windowing-aggregations-python"></a>

이 예제는 Python 애플리케이션에 임베딩된 SQL을 사용하여 네 가지 유형의 윈도우 집계를 보여줍니다.

1. 처리 시간에 따른 슬라이딩 윈도우

1. 이벤트 시간에 따른 슬라이딩 윈도우

1. 처리 시간에 따른 텀블링 윈도우

1. 이벤트 시간에 따른 텀블링 윈도우

코드 예제: [Windowing](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/python/Windowing)

## S3 싱크 사용
<a name="s3-sink-python"></a>

이 예제는 Python 애플리케이션에 임베딩된 SQL을 사용하여 출력 결과를 JSON 파일로 Amazon S3에 쓰는 방법을 보여줍니다. S3 싱크가 Amazon S3에 파일을 쓰고 교체하려면 체크포인트를 반드시 활성화해야 합니다.

코드 예제: [S3Sink](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/python/S3Sink)

## 사용자 정의 함수(UDF) 사용
<a name="UDF-python"></a>

이 예제는 사용자 정의 함수를 정의하고 Python으로 구현한 뒤 Python 애플리케이션에서 실행되는 SQL 코드에서 이를 사용하는 방법을 보여줍니다.

코드 예제: [UDF](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/python/UDF)

## Amazon Data Firehose 싱크 사용
<a name="Firehose-sink-python"></a>

이 예제는 SQL을 사용하여 데이터를 Amazon Data Firehose로 전송하는 방법을 보여줍니다.

코드 예제: [FirehoseSink](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/python/FirehoseSink)

# Managed Service for Apache Flink의 Scala 예제
<a name="examples-new-scala"></a>

다음 예제는 Apache Flink와 함께 Scala를 사용하여 애플리케이션을 만드는 방법을 보여줍니다.



## 다단계 애플리케이션 설정
<a name="getting-started-scala"></a>

이 예제는 Scala에서 Flink 애플리케이션을 설정하는 방법을 보여줍니다. 이 예제는 종속 항목을 포함하도록 SBT 프로젝트를 구성하고 uber-JAR을 빌드하는 방법을 보여줍니다.

코드 예제: [GettingStarted](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/scala/GettingStarted)