

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

# 시작하기(Scala)
<a name="examples-gs-scala"></a>

**참고**  
Flink 버전 1.15부터 Scala는 무료입니다. 이제 애플리케이션은 모든 Scala 버전에서 Java API를 사용할 수 있습니다. Flink는 여전히 내부적으로 몇 가지 주요 구성 요소에서 Scala를 사용하지만 사용자 코드 클래스 로더에 Scala를 노출하지는 않습니다. 따라서 JAR 아카이브에 Scala 종속성을 추가해야 합니다.  
Flink 1.15의 Scala 변경 사항에 대한 자세한 내용은 [Scala Free in One Fifteen](https://flink.apache.org/2022/02/22/scala-free.html)을 참조하세요.

이 예에서는 Kinesis 스트림을 소스 및 싱크로 사용하여 Scala를 위한 Managed Service for Apache Flink 애플리케이션을 생성합니다.

**Topics**
+ [종속 리소스 생성](#examples-gs-scala-resources)
+ [샘플 레코드를 입력 스트림에 쓰기](#examples-gs-scala-write)
+ [애플리케이션 코드 다운로드 및 검토](#examples-gs-scala-download)
+ [애플리케이션 코드 컴파일 및 업로드](#examples-gs-scala-upload)
+ [애플리케이션 생성 및 실행(콘솔)](gs-scala-7.md)
+ [애플리케이션 생성 및 실행(CLI)](examples-gs-scala-create-run-cli.md)
+ [AWS 리소스 정리](examples-gs-scala-cleanup.md)

## 종속 리소스 생성
<a name="examples-gs-scala-resources"></a>

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.
+ 입력 및 출력을 위한 Kinesis 스트림 2개.
+ 애플리케이션 코드를 저장할 Amazon S3 버킷(`ka-app-code-<username>`) 

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.
+ *Amazon Kinesis Data Streams 개발자 안내서*의 [데이터 스트림 만들기 및 업데이트](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html). 데이터 스트림 **ExampleInputStream** 및 **ExampleOutputStream**에 명칭을 지정합니다.

  데이터 스트림 (AWS CLI)을 생성하려면
  + 첫 번째 스트림(`ExampleInputStream`)을 생성하려면 다음 Amazon Kinesis create-stream AWS CLI 명령을 사용합니다.

    ```
    aws kinesis create-stream \
        --stream-name ExampleInputStream \
        --shard-count 1 \
        --region us-west-2 \
        --profile adminuser
    ```
  + 애플리케이션에서 출력을 쓰는 데 사용하는 두 번째 스트림을 생성하려면 동일한 명령을 실행하여 스트림 명칭을 `ExampleOutputStream`으로 변경합니다.

    ```
    aws kinesis create-stream \
        --stream-name ExampleOutputStream \
        --shard-count 1 \
        --region us-west-2 \
        --profile adminuser
    ```
+ *Amazon Simple Storage Service 사용 설명서*의 [S3 버킷을 생성하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) 로그인 명칭(예: **ka-app-code-*<username>***)을 추가하여 Amazon S3 버킷에 전역적으로 고유한 명칭을 지정합니다.

**기타 리소스**

애플리케이션을 생성할 때 Managed Service for Apache Flink는 다음과 같은 Amazon CloudWatch 리소스를 생성합니다(아직 존재하지 않는 경우).
+ `/AWS/KinesisAnalytics-java/MyApplication`라는 로그 그룹.
+ `kinesis-analytics-log-stream`라는 로그 스트림.

## 샘플 레코드를 입력 스트림에 쓰기
<a name="examples-gs-scala-write"></a>

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

**참고**  
이 섹션에서는 [AWS SDK for Python (Boto)](https://aws.amazon.com/developers/getting-started/python/)이 필요합니다.

**참고**  
이 섹션의 Python 스크립트는 AWS CLI를 사용합니다. 계정 자격 증명과 기본 리전 AWS CLI 을 사용하도록를 구성해야 합니다. 를 구성하려면 다음을 AWS CLI입력합니다.  

```
aws configure
```

1. 다음 콘텐츠를 가진 `stock.py`이라는 파일을 생성합니다:

   ```
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           'event_time': datetime.datetime.now().isoformat(),
           'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
           'price': round(random.random() * 100, 2)}
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name,
               Data=json.dumps(data),
               PartitionKey="partitionkey")
   
   
   if __name__ == '__main__':
       generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. `stock.py` 스크립트를 실행합니다.

   ```
   $ python stock.py
   ```

   자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

## 애플리케이션 코드 다운로드 및 검토
<a name="examples-gs-scala-download"></a>

이 예제에 대한 Python 애플리케이션 코드는 GitHub에서 받을 수 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 [Git 설치](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)를 참조하세요.

1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. `amazon-kinesis-data-analytics-java-examples/scala/GettingStarted` 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:
+ `build.sbt` 파일에는 Managed Service for Apache Flink 라이브러리를 포함하여 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.
+ `BasicStreamingJob.scala` 파일에는 애플리케이션의 기능을 정의하는 주요 메서드가 들어 있습니다.
+ 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  또한 애플리케이션은 Kinesis 싱크를 사용하여 결과 스트림에 기록합니다. 다음 조각은 Kinesis 싱크를 생성합니다.

  ```
  private def createSink: KinesisStreamsSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val outputProperties = applicationProperties.get("ProducerConfigProperties")
  
    KinesisStreamsSink.builder[String]
      .setKinesisClientProperties(outputProperties)
      .setSerializationSchema(new SimpleStringSchema)
      .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName))
      .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode))
      .build
  }
  ```
+ 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스하기 위한 소스 및 싱크 커넥터를 생성합니다.
+ 애플리케이션은 동적 애플리케이션 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 런타임 애플리케이션의 속성을 읽어 커넥터를 구성합니다. 런타임 속성에 대한 자세한 내용은 [런타임 속성](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html)을 참조하세요.

## 애플리케이션 코드 컴파일 및 업로드
<a name="examples-gs-scala-upload"></a>

이 섹션에서는 사용자가 [종속 리소스 생성](#examples-gs-scala-resources) 섹션에서 생성한 Amazon S3 버킷에 사용자의 애플리케이션 코드를 컴파일 및 업로드합니다.

**애플리케이션 코드 컴파일**

이 섹션에서는 [SBT](https://www.scala-sbt.org/) 구축 도구를 사용하여 애플리케이션용 Scala 코드를 구축하는 도구를 구축합니다. SBT를 설치하려면 [cs 설정으로 sbt 설치](https://www.scala-sbt.org/download.html)를 참조하십시오. 또한 Java Devopment Kit(JDK)를 설치해야 합니다. [연습 완료를 위한 사전 조건](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites)을 참조하세요.

1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. SBT를 사용하여 코드를 컴파일하고 패키징할 수 있습니다.

   ```
   sbt assembly
   ```

1. 애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

   ```
   target/scala-3.2.0/getting-started-scala-1.0.jar
   ```

**Apache Flink 스트리밍 Scala 코드 업로드**

이 섹션에서는 Amazon S3 버킷을 만들고 애플리케이션 코드를 업로드합니다.

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

1. **버킷 만들기**를 선택합니다.

1. **버킷 명칭** 필드에 `ka-app-code-<username>`을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. **다음**을 선택합니다.

1. **옵션 구성** 단계에서 설정을 기본값 그대로 두고 **다음**을 선택합니다.

1. **권한 설정** 단계에서 설정을 기본값 그대로 두고 **다음**을 선택합니다.

1. **버킷 생성**을 선택합니다.

1. `ka-app-code-<username>` 버킷을 선택한 다음 **업로드**를 선택합니다.

1. **파일 선택** 단계에서 **파일 추가**를 선택합니다. 이전 단계에서 생성한 `getting-started-scala-1.0.jar` 파일로 이동합니다.

1. 개체 정보에 대한 설정은 변경할 필요가 없으므로 **업로드**를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.