

버전 4(V4) AWS SDK for .NET 가 릴리스되었습니다.

변경 사항 해제 및 애플리케이션 마이그레이션에 대한 자세한 내용은 [마이그레이션 주제를](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html) 참조하세요.

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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

# .NET용 AWS 메시지 처리 프레임워크 시작하기
<a name="msg-proc-fw-get-started"></a>

시작하기 전에 [환경을 설정하고](net-dg-config.md) [프로젝트를 구성](configuring-the-sdk.md)했는지 확인합니다. 또한 [SDK 사용](net-dg-sdk-features.md)의 정보를 검토합니다.

이 주제에서는 메시지 처리 프레임워크 사용을 시작하는 데 도움이 되는 정보를 제공합니다. 사전 조건 및 구성 정보 외에도 일반적인 시나리오를 구현하는 방법을 보여주는 자습서가 제공됩니다.

## 사전 조건 및 구성
<a name="mpf-get-started-prereq"></a>
+ 애플리케이션에 제공하는 자격 증명에는 사용하는 메시징 서비스 및 작업에 대한 적절한 권한이 있어야 합니다. 자세한 내용은 해당 개발자 안내서의 [SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-authentication-and-access-control.html), [SNS](https://docs.aws.amazon.com/sns/latest/dg/security-iam.html) 및 [EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)에 대한 보안 주제를 참조하세요. 또한 특정 [권한을](https://github.com/aws/aws-dotnet-messaging/blob/main/README.md#permissions) 설명하는 GitHub의 [README](https://github.com/aws/aws-dotnet-messaging/) 파일 부분을 참조하세요.
+ .NET용 AWS 메시지 처리 프레임워크를 사용하려면 프로젝트에 [https://www.nuget.org/packages/AWS.Messaging](https://www.nuget.org/packages/AWS.Messaging) NuGet 패키지를 추가해야 합니다. 예시:

  ```
  dotnet add package AWS.Messaging
  ```
+ 프레임워크는 .NET의 [종속성 주입(DI) 서비스 컨테이너](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection)와 통합됩니다. 애플리케이션을 시작하는 동안를 호출`AddAWSMessageBus`하여 프레임워크를 구성하여 DI 컨테이너에 추가할 수 있습니다.

  ```
  var builder = WebApplication.CreateBuilder(args);
  
  // Register the AWS Message Processing Framework for .NET
  builder.Services.AddAWSMessageBus(builder =>
  {
      // Register that you'll publish messages of type ChatMessage to an existing queue
      builder.AddSQSPublisher<ChatMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd");
  });
  ```

## 자습서
<a name="mpf-get-started-tutorial"></a>

이 자습서에서는 .NET용 AWS 메시지 처리 프레임워크를 사용하는 방법을 보여줍니다. API 엔드포인트에서 요청을 수신할 때 Amazon SQS 대기열로 메시지를 보내는 ASP.NET Core Minimal API와 이러한 메시지를 폴링하고 처리하는 장기 실행 콘솔 애플리케이션이라는 두 가지 애플리케이션을 생성합니다.
+ 이 자습서의 지침은 .NET CLI를 선호하지만 .NET CLI 또는 Microsoft Visual Studio와 같은 교차 플랫폼 도구를 사용하여이 자습서를 수행할 수 있습니다. 도구에 대한 자세한 내용은 단원을 참조하십시오[용 도구 체인 설치 및 구성 AWS SDK for .NET](net-dg-dev-env.md).
+ 이 자습서에서는 자격 증명에 `[default]` 프로필을 사용하고 있다고 가정합니다. 또한 Amazon SQS 메시지를 보내고 받기 위한 적절한 권한과 함께 단기 자격 증명을 사용할 수 있다고 가정합니다. 자세한 내용은 [를 AWS SDK for .NET 사용하여 인증 AWS](creds-idc.md) 및 [SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-authentication-and-access-control.html) 보안 주제를 참조하세요.

**참고**  
이 자습서를 실행하면 SQS 메시징 비용이 발생할 수 있습니다.

### 단계
<a name="mpf-tutorial-steps"></a>
+ [SQS 대기열 생성](#mpf-tutorial-queue)
+ [게시 애플리케이션 생성 및 실행](#mpf-tutorial-publish)
+ [처리 애플리케이션 생성 및 실행](#mpf-tutorial-handle)
+ [정리](#mpf-tutorial-cleanup)

### SQS 대기열 생성
<a name="mpf-tutorial-queue"></a>

이 자습서에서는 메시지를 보내고 받으려면 SQS 대기열이 필요합니다. AWS CLI 또는에 대해 다음 명령 중 하나를 사용하여 대기열을 생성할 수 있습니다 AWS Tools for PowerShell. 다음 프레임워크 구성에서 지정할 수 있도록 반환되는 대기열 URL을 기록해 둡니다.

------
#### [ AWS CLI ]

```
aws sqs create-queue --queue-name {{DemoQueue}}
```

------
#### [ AWS Tools for PowerShell ]

```
New-SQSQueue -QueueName DemoQueue
```

------

### 게시 애플리케이션 생성 및 실행
<a name="mpf-tutorial-publish"></a>

다음 절차에 따라 게시 애플리케이션을 생성하고 실행합니다.

1. 명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 만들 수 있는 운영 체제 폴더를 찾거나 생성합니다.

1. 해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 만듭니다.

   ```
   dotnet new webapi --name Publisher
   ```

1. 새 프로젝트의 폴더로 이동합니다. .NET용 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다.

   ```
   cd Publisher
   dotnet add package AWS.Messaging
   ```
**참고**  
인증 AWS IAM Identity Center 에를 사용하는 경우 `AWSSDK.SSO` 및 도 추가해야 합니다`AWSSDK.SSOOIDC`.

1. 의 코드를 다음 코드`Program.cs`로 바꿉니다.

   ```
   using AWS.Messaging;
   using Microsoft.AspNetCore.Mvc;
   using Publisher;
   
   var builder = WebApplication.CreateBuilder(args);
   
   // Add services to the container.
   // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle.
   builder.Services.AddEndpointsApiExplorer();
   builder.Services.AddSwaggerGen();
   
   
   // Configure the AWS Message Processing Framework for .NET.
   builder.Services.AddAWSMessageBus(builder =>
   {
       // Check for input SQS URL.
       // The SQS URL should be passed as a command line argument or set in the Debug launch profile.
       if ((args.Length == 1) && (args[0].Contains("https://sqs.")))
       {
           // Register that you'll publish messages of type GreetingMessage:
           // 1. To a specified queue.
           // 2. Using the message identifier "greetingMessage", which will be used
           //    by handlers to route the message to the appropriate handler.
           builder.AddSQSPublisher<GreetingMessage>(args[0], "greetingMessage");
       }
       // You can map additional message types to queues or topics here as well.
   });
   var app = builder.Build();
   
   
   // Configure the HTTP request pipeline.
   if (app.Environment.IsDevelopment())
   {
       app.UseSwagger();
       app.UseSwaggerUI();
   }
   
   app.UseHttpsRedirection();
   
   // Create an API Endpoint that receives GreetingMessage objects
   // from the caller and then sends them as an SQS message.
   app.MapPost("/greeting", async ([FromServices] IMessagePublisher publisher, Publisher.GreetingMessage message) =>
       {
           return await PostGreeting(message, publisher);
       })
   .WithName("SendGreeting")
   .WithOpenApi();
   
   app.Run();
   
   public partial class Program
   {
       /// <summary>
       /// Endpoint for posting a greeting message.
       /// </summary>
       /// <param name="greetingMessage">The greeting message.</param>
       /// <param name="messagePublisher">The message publisher.</param>
       /// <returns>Async task result.</returns>
       public static async Task<IResult> PostGreeting(GreetingMessage greetingMessage,
           IMessagePublisher messagePublisher)
       {
           if (greetingMessage.SenderName == null || greetingMessage.Greeting == null)
           {
               return Results.BadRequest();
           }
   
           // Publish the message to the queue configured above.
           await messagePublisher.PublishAsync(greetingMessage);
   
           return Results.Ok();
       }
   }
   
   namespace Publisher
   {
       /// <summary>
       /// This class represents the message contents.
       /// </summary>
       public class GreetingMessage
       {
           public string? SenderName { get; set; }
           public string? Greeting { get; set; }
       }
   }
   ```

1. 다음 명령을 실행합니다. 그러면 API를 탐색하고 테스트할 수 있는 Swagger UI가 있는 브라우저 창이 열립니다.

   ```
   dotnet watch run {{<queue URL created earlier>}}
   ```

1. `/greeting` 엔드포인트를 열고 **시도를** 선택합니다.

1. 메시지의 `senderName` 및 `greeting` 값을 지정하고 **실행**을 선택합니다. 그러면 API가 호출되어 SQS 메시지가 전송됩니다.

### 처리 애플리케이션 생성 및 실행
<a name="mpf-tutorial-handle"></a>

다음 절차에 따라 처리 애플리케이션을 생성하고 실행합니다.

1. 명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 만들 수 있는 운영 체제 폴더를 찾거나 생성합니다.

1. 해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 만듭니다.

   ```
   dotnet new console --name Handler
   ```

1. 새 프로젝트의 폴더로 이동합니다. .NET용 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다. 또한 `Microsoft.Extensions.Hosting` 패키지를 추가하여 [.NET 일반 호스트](https://learn.microsoft.com/en-us/dotnet/core/extensions/generic-host)를 통해 프레임워크를 구성할 수 있습니다.

   ```
   cd Handler
   dotnet add package AWS.Messaging
   dotnet add package Microsoft.Extensions.Hosting
   ```
**참고**  
인증 AWS IAM Identity Center 에를 사용하는 경우 `AWSSDK.SSO` 및 도 추가해야 합니다`AWSSDK.SSOOIDC`.

1. 의 코드를 다음 코드`Program.cs`로 바꿉니다.

   ```
   using AWS.Messaging;
   using Handler;
   using Microsoft.Extensions.DependencyInjection;
   using Microsoft.Extensions.Hosting;
   
   var builder = Host.CreateDefaultBuilder(args);
   
   builder.ConfigureServices(services =>
   {
       // Register the AWS Message Processing Framework for .NET.
       services.AddAWSMessageBus(builder =>
       {
           // Check for input SQS URL.
           // The SQS URL should be passed as a command line argument or set in the Debug launch profile.
           if ((args.Length == 1) && (args[0].Contains("https://sqs.")))
           {
               // Register you'll poll the following queue.
               builder.AddSQSPoller(args[0]);
   
               // And that messages of type "greetingMessage" should be:
               // 1. Deserialized as GreetingMessage objects.
               // 2. Which are then passed to GreetingMessageHandler.
               builder.AddMessageHandler<GreetingMessageHandler, GreetingMessage>("greetingMessage");
   
           }
           // You can add additional message handlers here, using different message types. 
       });
   });
   
   var host = builder.Build();
   await host.RunAsync();
   
   namespace Handler
   {
       /// <summary>
       /// This class represents the message contents.
       /// </summary>
       public class GreetingMessage
       {
           public string? SenderName { get; set; }
           public string? Greeting { get; set; }
       }
   
       /// <summary>
       /// This handler is invoked each time you receive the message.
       /// </summary>
       public class GreetingMessageHandler : IMessageHandler<GreetingMessage>
       {
           public Task<MessageProcessStatus> HandleAsync(
               MessageEnvelope<GreetingMessage> messageEnvelope,
               CancellationToken token = default)
           {
               Console.WriteLine(
                   $"Received message {messageEnvelope.Message.Greeting} from {messageEnvelope.Message.SenderName}");
               return Task.FromResult(MessageProcessStatus.Success());
           }
       }
   }
   ```

1. 다음 명령을 실행합니다. 이렇게 하면 장기 실행 폴러가 시작됩니다.

   ```
   dotnet run {{<queue URL created earlier>}}
   ```

   시작 직후 애플리케이션은이 자습서의 첫 부분에서 전송된 메시지를 수신하고 다음 메시지를 기록합니다.

   ```
   Received message {greeting} from {senderName}
   ```

1. 폴러를 중지`Ctrl+C`하려면를 누릅니다.

### 정리
<a name="mpf-tutorial-cleanup"></a>

 AWS CLI 또는에 대해 다음 명령 중 하나를 사용하여 대기열 AWS Tools for PowerShell 을 삭제합니다.

------
#### [ AWS CLI ]

```
aws sqs delete-queue --queue-url "{{<queue URL created earlier>}}"
```

------
#### [ AWS Tools for PowerShell ]

```
Remove-SQSQueue -QueueUrl "{{<queue URL created earlier>}}"
```

------