

 AWS SDK for .NET V3가 유지 관리 모드로 전환되었습니다.

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)로 마이그레이션하는 것이 좋습니다. 마이그레이션 방법에 대한 자세한 내용과 정보는 [유지 관리 모드 공지](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)를 참조하세요.

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

# .NET용 AWS 메시지 처리 프레임워크 사용자 지정
<a name="msg-proc-fw-customize"></a>

.NET용 AWS 메시지 처리 프레임워크는 세 가지 다른 ‘계층’으로 메시지를 빌드, 전송 및 처리합니다.

1. 가장 바깥쪽 계층에서 프레임워크는 서비스와 관련된 AWS 네이티브 요청 또는 응답을 빌드합니다. 예를 들어 Amazon SQS를 사용하면 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 요청을 빌드하고 서비스에서 정의한 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html) 객체와 함께 작동합니다.

1. SQS 요청 및 응답 내에서 프레임워크는 `MessageBody` 요소(또는 Amazon SNS의 경우 `Message` 또는 Amazon EventBridge의 경우 `Detail`)를 [JSON 형식의 CloudEvent](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md)로 설정합니다. 여기에는 메시지를 처리할 때 `MessageEnvelope` 객체에서 액세스할 수 있는 프레임워크에서 설정한 메타데이터가 포함됩니다.

1. 가장 안쪽 계층에서 CloudEvent JSON 객체 내부의 `data` 속성에는 메시지로 전송되거나 수신된 .NET 객체의 JSON 직렬화가 포함됩니다.

   ```
   {
       "id":"b02f156b-0f02-48cf-ae54-4fbbe05cffba",
       "source":"/aws/messaging",
       "specversion":"1.0",
       "type":"Publisher.Models.ChatMessage",
       "time":"2023-11-21T16:36:02.8957126+00:00",
       "data":"<the ChatMessage object serialized as JSON>"
   }
   ```

메시지 봉투를 구성하고 읽는 방법을 사용자 지정할 수 있습니다.
+ `"id"`는 메시지를 고유하게 식별합니다. 기본적으로 새 GUID로 설정되지만 자체 `IMessageIdGenerator`를 구현하고 이를 DI 컨테이너에 주입하여 재정의할 수 있습니다.
+ `"type"`은 메시지가 핸들러로 라우팅되는 방식을 제어합니다. 기본적으로 메시지에 해당하는 .NET 유형의 전체 이름을 사용합니다. `AddSQSPublisher`, `AddSNSPublisher` 또는 `AddEventBridgePublisher`를 통해 메시지 유형을 대상에 매핑할 때 `messageTypeIdentifier` 파라미터를 통해 이를 재정의할 수 있습니다.
+ `"source"`는 메시지를 전송한 시스템 또는 서버를 나타냅니다.
  + AWS Lambda에서 게시하는 경우 함수 이름이 되고, Amazon ECS에서 게시하는 경우 클러스터 이름과 작업 ARN, Amazon EC2에서 게시하는 경우 인스턴스 ID, 그렇지 않으면 `/aws/messaging`의 폴백 값이 됩니다.
  + `MessageBusBuilder`에서 `AddMessageSource` 또는 `AddMessageSourceSuffix`를 통해 이를 재정의할 수 있습니다.
+ `"time"`을 UTC의 현재 DateTime으로 설정합니다. 이는 자체 `IDateTimeHandler`를 구현하고 이를 DI 컨테이너에 주입하여 재정의할 수 있습니다.
+ `"data"`에는 메시지로 전송되거나 수신된 .NET 객체의 JSON 표현이 포함되어 있습니다.
  + `MessageBusBuilder`의 `ConfigureSerializationOptions`를 사용하면 메시지를 직렬화 및 역직렬화할 때 사용할 [https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions)를 구성할 수 있습니다.
  + 프레임워크가 이를 빌드하면 추가 속성을 주입하거나 메시지 봉투를 변환하기 위해 `ISerializationCallback`을 구현하고 `MessageBusBuilder`의 `AddSerializationCallback`을 통해 이를 등록할 수 있습니다.