

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

# Amazon Kinesis Video Streams 및 Fargate를 사용하여 비디오 처리 파이프라인 구축하기
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate"></a>

*Piotr Chotkowski, Pushparaju Thangavel, Amazon Web Services*

## 요약
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-summary"></a>

이 패턴은[Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/)와 [Fargate](https://aws.amazon.com/fargate)를 사용하여 비디오 스트림에서 프레임을 추출하고 추가 처리를 위해 [Amazon Simple Storage Service(S3](https://aws.amazon.com/s3/))에 저장하는 방법을 보여줍니다. 

이 패턴은 Java Maven 프로젝트 형태의 샘플 애플리케이션을 제공합니다. 이 애플리케이션은 [Cloud Development Kit](https://aws.amazon.com/cdk/)(CDK)를 사용하여 인프라를 정의합니다. 프레임 처리 로직과 인프라 정의 모두 Java 프로그래밍 언어로 작성되었습니다. 이 샘플 애플리케이션을 기반으로 실시간 비디오 처리 파이프라인을 개발하거나 기계 학습 파이프라인의 비디오 전처리 단계를 구축할 수 있습니다. 

## 사전 조건 및 제한 사항
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ Java SE Development Kit (JDK) 11가 설치됨
+ [Apache Maven](https://maven.apache.org/)이 설치됨
+ [Cloud Development Kit(CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)가 설치됨
+ [Command Line Interface(CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 버전 2가 설치됨
+ [도커](https://docs.docker.com/get-docker/)(Fargate 작업 정의에서 사용할 도커 이미지를 구축하는 데 필요)가 설치됨

**제한 사항 **

이 패턴은 개념 증명 또는 추가 개발을 위한 기반으로 사용됩니다. 프로덕션 배포에는 현재 형태로 사용할 수 없습니다.

**제품 버전**
+ 이 패턴은 CDK 버전 1.77.0에서 테스트했습니다([CDK 버전](https://docs.aws.amazon.com/cdk/api/latest/versions.html) 참조)
+ JDK 11
+ CLI 버전 2

## 아키텍처
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-architecture"></a>

**대상 기술 스택**
+ Amazon Kinesis Video Streams
+ Fargate 태스크
+ Amazon Simple Queue Service(Amazon SQS) 대기열
+ Amazon S3 버킷

**대상 아키텍처**

![\[Kinesis Video Streams 및 Fargate를 사용하여 비디오 처리 파이프라인을 구축하기 위한 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/images/a60e585f-27be-4dd6-897b-c38adf1d283f.png)


사용자는 Kinesis 비디오 스트림을 생성하고, 비디오를 업로드하며, 입력 Kinesis 비디오 스트림 및 출력 S3 버킷에 대한 세부 정보가 포함된 JSON 메시지를 SQS 대기열로 전송합니다. 컨테이너에서 기본 애플리케이션을 실행하는 Fargate는 SQS 대기열에서 메시지를 가져와 프레임 추출을 시작합니다. 각 프레임은 이미지 파일에 저장되고 대상 S3 버킷에 저장됩니다.

**자동화 및 규모 조정**

샘플 애플리케이션은 단일 리전 내에서 수평 및 수직으로 규모를 조정할 수 있습니다. SQS 대기열에서 읽는 배포된 Fargate 작업 수를 늘리면 수평적 규모 조정이 가능합니다. 애플리케이션의 프레임 분할 및 이미지 게시 스레드 수를 늘리면 수직적 규모 조정이 가능합니다. 이러한 설정은 CDK의 [QueueProcessingFargateService](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs-patterns.QueueProcessingFargateService.html) 리소스 정의에서 애플리케이션에 환경 변수로 전달됩니다. CDK 스택 배포의 특성상 추가 노력 없이 이 애플리케이션을 여러 리전 및 계정에 배포할 수 있습니다.

## 도구
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-tools"></a>

**도구**
+ [CDK는](https://aws.amazon.com/cdk/) TypeScript, JavaScript, Python, Java, C\$1/.Net 등의 프로그래밍 언어를 사용하여 클라우드 인프라 및 리소스를 정의하기 위한 소프트웨어 개발 프레임워크입니다.
+ [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/)는 라이브 비디오를 디바이스에서 클라우드로 스트리밍하거나 실시간 비디오 처리 또는 배치 중심 비디오 분석을 위한 애플리케이션을 빌드하는 데 사용할 수 있는 완전 관리형 서비스입니다.
+ [Fargate](https://aws.amazon.com/fargate)는 컨테이너용 서버리스 컴퓨팅 엔진입니다. Fargate를 사용하면 서버를 프로비저닝하고 관리할 필요가 없으므로 애플리케이션 개발에만 집중할 수 있습니다.
+ [Amazon S3](https://aws.amazon.com/s3/)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다.
+ [Amazon SQS](https://aws.amazon.com/sqs/)는 마이크로서비스와 분산 시스템, 서버리스 애플리케이션을 분리하거나 확장하기 쉽게 해 주는 완전 관리형 메시지 대기열 서비스입니다.

**코드**
+ 샘플 애플리케이션 프로젝트(`frame-splitter-code.zip`)의.zip 파일이 첨부되어 있습니다.

## 에픽
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-epics"></a>

### 인프라 배포
<a name="deploy-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Docker 대몬(daemon)을 시작합니다. | 로컬 시스템에서 Docker 대몬(daemon)을 시작합니다. CDK는 Docker를 사용하여 Fargate 작업에 사용되는 이미지를 구축합니다. 다음 단계를 진행하기 전에 Docker를 실행해야 합니다. | 개발자, DevOps 엔지니어 | 
| 프로젝트를 빌드합니다. | `frame-splitter-code` 샘플 애플리케이션(첨부)을 다운로드하고 해당 콘텐츠를 로컬 시스템의 폴더에 추출합니다. 인프라를 배포하려면 먼저 [Java Maven](https://maven.apache.org/) 프로젝트를 빌드해야 합니다. 명령 프롬프트에서 프로젝트의 루트 디렉터리로 이동하고 다음 명령을 실행하여 프로젝트를 빌드합니다. <pre>mvn clean install</pre> | 개발자, DevOps 엔지니어 | 
| CDK를 부트스트랩합니다. | (CDK를 처음 사용하는 사용자만 해당) CDK를 처음 사용하는 경우, 다음에서 CLI 명령을 실행하여 환경을 부트스트랩해야 할 수 있습니다.<pre>cdk bootstrap --profile "$AWS_PROFILE_NAME" </pre>`$AWS_PROFILE_NAME`이 보안 인증 정보의 프로필 이름을 보유할 때. 또는 이 파라미터를 제거하여 기본 프로필을 사용할 수 있습니다. 자세한 내용은 [CDK 설명서](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)를 참조하십시오. | 개발자, DevOps 엔지니어 | 
| CDK 스택을 배포합니다. | 이 단계에서는 계정에서 필요한 인프라 리소스(SQS 대기열, S3 버킷, Fargate 작업 정의)를 생성하고, Fargate 작업에 필요한 도커 이미지를 구축하고, 애플리케이션을 배포합니다. 명령 프롬프트에서 프로젝트의 루트 디렉터리로 이동하고 다음 명령을 실행합니다.<pre>cdk deploy --profile "$AWS_PROFILE_NAME" --all </pre>`$AWS_PROFILE_NAME`이 보안 인증 정보의 프로필 이름을 보유할 때. 또는 이 파라미터를 제거하여 기본 프로필을 사용할 수 있습니다. 배포를 확인합니다. CDK 배포 출력의 **QueueUrl ** 및 **버킷**값을 기록해 둡니다. 이 값은 이후 단계에서 필요합니다. CDK는 자산을 생성하고, 이를 계정에 업로드하고, 모든 인프라 리소스를 생성합니다. [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation/)에서 리소스 생성 프로세스를 관찰할 수 있습니다. 자세한 내용은 [AWS CloudFormation 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 및 [CDK 설명서](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#hello_world_tutorial_deploy)를 참조하십시오. | 개발자, DevOps 엔지니어 | 
| 비디오 스트림을 생성합니다. | 이 단계에서는 비디오 처리를 위한 입력 스트림으로 사용할 Kinesis 비디오 스트림을 생성합니다. CLI가 설치되고 구성되어 있는지 확인합니다. CLI에서 다음을 실행합니다.<pre>aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24" </pre>`$AWS_PROFILE_NAME`은(는) 보안 인증 정보의 프로필 이름을 보유하고 있으며(또는 기본 프로필을 사용하려면 이 파라미터를 제거), `$STREAM_NAME`은(는) 임의의 유효한 스트림 이름일 때. 또는 [Kinesis 비디오 스트림 설명서](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html#gs-createstream-console)의 단계에 따라 Kinesis 콘솔을 사용하여 비디오 스트림을 생성할 수도 있습니다. 생성된 스트림의 리소스 이름(ARN)을 적어 둡니다. 나중에 필요할 수 있습니다. | 개발자, DevOps 엔지니어 | 

### 예제 실행
<a name="run-an-example"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 비디오를 스트림에 업로드합니다. | 샘플 `frame-splitter-code` 애플리케이션의 프로젝트 폴더에서 `src/test/java/amazon/awscdk/examples/splitter` 폴더에 있는 `ProcessingTaskTest.java` 파일을 엽니다. `profileName`** **및 `streamName`** **변수를 이전 단계에서 사용한 값으로 대체합니다. 이전 단계에서 만든 Kinesis 비디오 스트림에 예시 비디오를 업로드하려면 다음을 실행합니다. <pre>amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test</pre>또는 [Kinesis 비디오 스트림 설명서](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)에 설명된 방법 중 하나를 사용하여 비디오를 업로드할 수 있습니다. | 개발자, DevOps 엔지니어 | 
| 비디오 프로세싱을 시작합니다. | Kinesis 비디오 스트림에 비디오를 업로드했으므로 이제 처리를 시작할 수 있습니다. 처리 로직을 시작하려면 CDK가 배포 중에 생성한 세부 정보가 포함된 메시지를 SQS 대기열로 보내야 합니다. CLI를 사용하여 메시지를 보내려면 다음을 실행합니다.<pre>aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE </pre>`$AWS_PROFILE_NAME`은(는) 보안 인증 정보의 프로파일 이름을 보유하고 있고(기본 프로파일을 사용하려면 이 파라미터 제거), `QUEUE_URL`은(는) CDK 출력의 **QueueUrl **값이고, `MESSAGE`은(는) 다음 형식의 JSON 문자열일 때. <pre>{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }</pre>`STREAM_ARN`은(는) 이전 단계에서 생성한 비디오 스트림의 ARN이고, `BUCKET_NAME`은(는) CDK 출력의 **버킷** 값일 때. 이 메시지를 보내면 비디오 처리가 시작됩니다. [Amazon SQS 설명서](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-send-messages.html)에 설명된 대로 Amazon SQS 콘솔을 사용하여 메시지를 보낼 수도 있습니다. | 개발자, DevOps 엔지니어 | 
| 비디오 프레임 이미지 보기. | `s3://BUCKET_NAME/test-output` `BUCKET_NAME`이(가) CDK 출력의 **버킷** 값일 때, S3 출력 버킷에서 결과 이미지를 볼 수 있습니다. | 개발자, DevOps 엔지니어 | 

## 관련 리소스
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-resources"></a>
+ [CDK 설명서](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [CDK API 레퍼런스](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html)
+ [CDK 입문 워크숍](https://cdkworkshop.com/)
+ [Amazon Kinesis Video Streams 설명서](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)
+ [예: SageMaker를 사용하여 비디오 스트림에서 객체 식별](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-sagemaker.html)
+ [예: Kinesis Video Streams 프래그먼트의 구문 분석 및 렌더링](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html)
+ [Amazon Kinesis Video Streams와 Amazon SageMaker를 사용하여 스케일 인 라이브 비디오를 실시간으로 분석할 수 있습니다](https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/) (기계 학습 블로그 게시물).
+ [Fargate 시작하기](https://aws.amazon.com/fargate/getting-started/)

## 추가 정보
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-additional"></a>

**IDE 선택**

선호하는 Java IDE를 사용하여 이 프로젝트를 빌드하고 탐색하는 것이 좋습니다. 

**정리**

이 예제를 모두 실행한 후에는 배포된 리소스를 모두 제거하여 추가 인프라 비용이 발생하지 않도록 하십시오. 

인프라 및 비디오 스트림을 제거하려면 CLI에서 다음 두 명령을 사용하십시오.

```
cdk destroy --profile "$AWS_PROFILE_NAME" --all
```

```
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"
```

또는 CloudFormation 콘솔을 사용하여 CloudFormation 스택을 제거하고 Kinesis 콘솔을 사용하여 Kinesis 비디오 스트림을 제거하여 리소스를 수동으로 제거할 수도 있습니다. 단, `cdk destroy`은(는) 출력 S3 버킷이나 Amazon Elastic Container Registry(Amazon ECR) 리포지토리(`aws-cdk/assets`)의 이미지를 제거하지 않습니다. 이를 수동으로 제거해야 합니다.

## 첨부
<a name="attachments-9d1442c2-f3ee-47fd-8cce-90d9206ce4d4"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/attachments/attachment.zip) 파일의 압축을 풉니다.