

# Salesforce Marketing Cloud에 연결
<a name="connecting-to-data-salesforce-marketing-cloud"></a>

Salesforce Marketing Cloud는 이메일, 모바일, 소셜 및 온라인 마케팅을 위한 마케팅 자동화 및 분석 소프트웨어 제공업체입니다. 또한 컨설팅 및 구현 서비스도 제공합니다. Salesforce Marketing Cloud 사용자는 Salesforce Marketing Cloud 계정에 AWS Glue를 연결할 수 있습니다. 그런 다음, ETL 작업에서 Salesforce Marketing Cloud를 데이터 소스 또는 대상으로 사용할 수 있습니다. 이러한 작업을 실행하여 Salesforce Marketing Cloud 및 AWS 서비스 또는 기타 지원되는 애플리케이션 간에 데이터를 전송합니다.

**Topics**
+ [Salesforce Marketing Cloud에 대한 AWS Glue 지원](salesforce-marketing-cloud-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](salesforce-marketing-cloud-configuring-iam-permissions.md)
+ [Salesforce Marketing Cloud 구성](salesforce-marketing-cloud-configuring.md)
+ [Salesforce Marketing Cloud 연결 구성](salesforce-marketing-cloud-configuring-connections.md)
+ [Salesforce Marketing Cloud 엔터티에서 읽기](salesforce-marketing-cloud-reading-from-entities.md)
+ [Salesforce Marketing Cloud 엔터티에 쓰기](salesforce-marketing-cloud-writing-to-entities.md)
+ [Salesforce Marketing Cloud 연결 옵션](salesforce-marketing-cloud-connection-options.md)
+ [Salesforce Marketing Cloud 커넥터에 대한 제한 사항 및 참고 사항](salesforce-marketing-cloud-connector-limitations.md)

# Salesforce Marketing Cloud에 대한 AWS Glue 지원
<a name="salesforce-marketing-cloud-support"></a>

AWS Glue에서는 다음과 같이 Salesforce Marketing Cloud를 지원합니다.

**소스로 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Salesforce Marketing Cloud에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
아니요.

**지원되는 Salesforce Marketing Cloud API 버전**  
다음 Salesforce Marketing Cloud API 버전이 지원됩니다.
+ v1

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="salesforce-marketing-cloud-configuring-iam-permissions"></a>

다음 샘플 정책은 연결을 생성하고 사용하는 데 필요한 AWS IAM 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

위 메서드를 사용하지 않으려는 경우 대신 다음 관리형 IAM 정책을 사용합니다.
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 다양한 AWS Glue 프로세스를 대신 실행하는 데 필요한 리소스에 대한 액세스 권한을 부여합니다. 이러한 리소스에는 AWS Glue, Amazon S3, IAM, CloudWatch Logs 및 Amazon EC2가 포함됩니다. 이 정책에 지정된 리소스의 이름 변환을 따르고자 한다면 AWS Glue 절차는 필요한 권한을 소유합니다. 이 정책은 크롤러, 작업 및 개발 엔드포인트를 정의할 때 지정된 역할에 일반적으로 추가됩니다.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) - 정책이 연결된 자격 증명이 AWS Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Salesforce Marketing Cloud 구성
<a name="salesforce-marketing-cloud-configuring"></a>

AWS Glue를 사용하여 Salesforce Marketing Cloud에서 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="salesforce-marketing-cloud-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ Salesforce Marketing Cloud 계정이 있습니다. 자세한 내용은 [Salesforce Marketing Cloud 계정 생성](#salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-account) 섹션을 참조하세요.
+ Salesforce Marketing Cloud 계정이 API 액세스에 대해 활성화되어 있습니다. API 액세스는 기본적으로 Enterprise, Unlimited, Developer, Performance 에디션에 대해 활성화됩니다.

이러한 요구 사항을 충족하면 Salesforce Marketing Cloud 계정에 AWS Glue를 연결할 준비가 된 것입니다. 일반적인 연결의 경우 Salesforce Marketing Cloud에서 다른 작업을 수행하지 않아도 됩니다.

## Salesforce Marketing Cloud 계정 생성
<a name="salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-account"></a>

Salesforce Marketing Cloud의 경우 계정 생성을 위해 공급업체에 문의해야 합니다. 사용자 또는 회사가 Salesforce와 연결되어 있는 경우 Salesforce 계정 관리자에게 문의하여 Salesforce Marketing Cloud 라이선스를 요청합니다. 그렇지 않으면 다음과 같이 Salesforce 담당자에게 연락처를 요청할 수 있습니다.

1. https://www.salesforce.com/in/products/marketing-cloud/overview/로 이동하고 **Sign up**을 선택하세요.

1. 페이지 오른쪽 상단의 **문의하기** 링크를 선택하세요.

1. 양식에 필요한 정보를 입력하고 **연락 요청**을 선택하세요.

Salesforce 담당자가 요구 사항을 논의하기 위해 연락을 드릴 것입니다.

## 프로젝트 및 OAuth 2.0 자격 증명 생성
<a name="salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-project-oauth"></a>

프로젝트 및 OAuth 2.0 자격 증명을 가져오는 방법:

1. 사용자 이름과 암호를 사용하여 [Salesforce Marketing Cloud 인스턴스](https://mc.login.exacttarget.com/hub-cas/login)에 로그인하고 등록된 휴대폰 번호를 사용하여 인증하세요.

1. 오른쪽 상단에서 프로필을 클릭한 다음, **Setup**으로 이동하세요.

1. **Platform Tools**에서 **Apps**를 선택하고 **Installed Packages**를 선택하세요.  
![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/sfmc-platform-tools.png)

1. **Installed Packages** 페이지에서 오른쪽 상단에 있는 **New**를 클릭하세요. 패키지의 이름 및 설명을 제공하세요.

   패키지를 저장하세요. 패키지를 저장한 후 패키지 세부 정보를 볼 수 있습니다.

1. 패키지의 **Details** 페이지에서 **Component** 섹션 아래 **Add Component**를 선택하세요.  
![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/sfmc-add-component.png)

1. **Component Type**을 'API Integration'으로 선택하고 **Next**를 클릭하세요.

1. **Integration Type**을 'Server-to-Server'(클라이언트 자격 증명 OAuth 권한 부여 유형)로 선택하고 **Next**를 클릭하세요.

1. 요구 사항에 따라 범위를 추가하고 **Save**를 클릭하세요.

# Salesforce Marketing Cloud 연결 구성
<a name="salesforce-marketing-cloud-configuring-connections"></a>

Salesforce Marketing Cloud는 OAuth2에 대한 CLIENT CREDENTIALS 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 클라이언트가 사용자의 컨텍스트 외부에서 액세스 토큰을 얻는 데 사용하므로 2각 OAuth 2.0으로 간주됩니다. AWS Glue는 클라이언트 ID와 클라이언트 암호를 사용하여 사용자가 정의한 사용자 지정 서비스에서 제공하는 Salesforce Marketing Cloud API를 인증할 수 있습니다.
+ 각 사용자 지정 서비스는 API 전용 사용자가 소유하며, API 전용 사용자는 서비스에 특정 작업을 수행하도록 권한을 부여하는 역할 및 권한 집합을 가집니다. 액세스 토큰은 단일 사용자 지정 서비스와 연결됩니다.
+ 이 권한 부여 유형은 수명이 짧은 액세스 토큰을 생성하며 ID 엔드포인트를 호출하여 갱신할 수 있습니다.
+ 클라이언트 자격 증명이 포함된 OAuth 2.0용 퍼블릭 Salesforce Marketing Cloud 설명서는 [Set Up Your Development Environment for Enhanced Packages](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/mc-dev-setup-enhanced.html)를 참조하세요.

Salesforce Marketing Cloud 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1. 고객 관리형 연결된 앱의 경우 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.

   1. 참고: AWS Glue에서 연결의 보안 암호를 생성해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **연결 유형**을 선택할 때 Salesforce Marketing Cloud를 선택합니다.

   1. 연결하려는 Salesforce Marketing Cloud의 `Subdomain Endpoint` 항목을 제공합니다.

   1. 다음 작업에 대한 권한이 있고 AWS Glue에서 수임할 수 있는 AWS IAM 역할을 선택합니다.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다.

   1. 네트워크를 사용하려는 경우 네트워크 옵션을 선택합니다.

1. AWS Glue 작업 권한과 연결된 IAM 역할에 `secretName`을 읽을 수 있는 권한을 부여합니다.

# Salesforce Marketing Cloud 엔터티에서 읽기
<a name="salesforce-marketing-cloud-reading-from-entities"></a>

**사전 조건**

읽으려는 Salesforce Marketing Cloud 객체. 객체 이름(예: `Activity` 또는 `Campaigns`)이 필요합니다. 다음 표에는 지원되는 엔터티가 나와 있습니다.

**소스에 대해 지원되는 엔터티**:


| 개체 | 인터페이스 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | SELECT \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 이벤트 알림 콜백 | REST | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 시드-목록 | REST | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 설정 | REST | 예 | 예 | 아니요 | 예 | 아니요 | 
| 도메인 확인 | REST | 예 | 예 | 예 | 예 | 아니요 | 
| 객체 중첩된 태그 | REST | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Contact | REST | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 이벤트 알림 구독 | REST | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 메시지 전송 | REST | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 활동 | SOAP | 아니요 | 아니요 | 아니요 | 예 | 예 | 
| 반송 이벤트 | SOAP | 아니요 | 아니요 | 아니요 | 예 | 예 | 
| 클릭 이벤트 | SOAP | 아니요 | 아니요 | 아니요 | 예 | 예 | 
| 콘텐츠 영역 | SOAP | 아니요 | 아니요 | 아니요 | 예 | 예 | 
| 데이터 확장 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 이메일 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 전달된 이메일 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 이메일 OptInEvent 전달 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 링크 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 링크 전송 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 나열 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 구독자 나열 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 전송되지 않은 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 열린 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| Send | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 전송된 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 구독자 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 설문조사 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 구독 해지 이벤트 | SOAP | 아니요 | 예 | 아니요 | 예 | 예 | 
| 감사 이벤트 | REST | 아니요 | 예 | 예 | 예 | 아니요 | 
| Campaigns | REST | 아니요 | 예 | 예 | 예 | 아니요 | 
| 상호작용 | REST | 아니요 | 예 | 예 | 예 | 아니요 | 
| 콘텐츠 자산 | REST | 아니요 | 예 | 예 | 예 | 아니요 | 

**REST에 대한 예제**:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP에 대한 예제**:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Activity",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://**********************.soap.marketingcloudapis.com"
    }
)
```

**Salesforce Marketing Cloud 엔터티 및 필드 세부 정보**:

다음 표에서는 Salesforce Marketing Cloud 엔터티를 설명합니다. 정적 메타데이터를 포함하는 REST 엔터티와 동적 메타데이터를 포함하는 SOAP 엔터티가 있습니다.

**정적 메타데이터를 포함하는 REST 엔터티**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/salesforce-marketing-cloud-reading-from-entities.html)

**동적 메타데이터를 포함하는 SOAP 엔터티**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/salesforce-marketing-cloud-reading-from-entities.html)

## 분할 쿼리
<a name="salesforce-marketing-cloud-reading-partitioning-queries"></a>

Salesforce Marketing Cloud에서 정수 및 DateTime 데이터 유형 필드는 필드 기반 분할을 지원합니다.

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND`, `NUM_PARTITIONS`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(**경계 포함**).

  타임스탬프 필드의 경우 Spark SQL 쿼리에 사용된 Spark 타임스탬프 형식을 허용합니다.

  유효한 값의 예제:

  ```
  “2024-05-07T02:03:00.00Z"
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).
+ `NUM_PARTITIONS`: 파티션 수.

예시:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "ListSubscriber",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "CreatedDate",
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z",
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z",
        "NUM_PARTITIONS": "10"
    }
)
```

# Salesforce Marketing Cloud 엔터티에 쓰기
<a name="salesforce-marketing-cloud-writing-to-entities"></a>

**사전 조건**
+ 쓰기 대상 Salesforce Marketing 객체입니다. `List`나 `Campaigns` 또는 아래 표에 설명된 다른 엔터티와 같은 객체의 이름을 지정해야 합니다.
+ Salesforce Marketing Cloud 커넥터는 3가지 쓰기 작업을 지원합니다.
  + INSERT
  + UPSERT
  + UPDATE

  `UPDATE` 및 `UPSERT` 쓰기 작업을 사용하는 경우 레코드의 외부 ID 필드를 지정하려면 `ID_FIELD_NAMES` 옵션을 제공해야 합니다.

**대상에 지원되는 엔터티**:


| 개체 | 우선순위 | 인터페이스(REST, SOAP 등) | 삽입 가능 | 업데이트 가능 | 업서트 가능 | 
| --- | --- | --- | --- | --- | --- | 
| Campaigns | P0 | REST | Y- 단일 | Y- 단일 | N | 
| 콘텐츠 자산 | P0 | REST | Y- 단일, 대량 | Y- 단일 | N | 
| Contact | P1 | REST | Y- 단일 | Y- 단일 | N | 
| 도메인 확인 | P1 | REST | Y- 단일 | Y- 단일, 대량 | N | 
| 이벤트 알림 콜백 | P1 | REST | Y- 단일 | Y- 단일 | N | 
| 이벤트 알림 구독 | P1 | REST | Y- 단일 | Y- 단일 | N | 
| 메시지 전송 | P1 | REST | Y- 단일 | N | N | 
| 객체 중첩된 태그 | P2 | REST | Y- 단일 | Y- 단일 | N | 
| 시드-목록 | P1 | REST | Y- 단일 | Y- 단일 | N | 
| 설정 | P1 | REST | Y- 단일 | Y- 단일 | N | 
| 데이터 확장 | P0 | SOAP | Y- 단일 | Y- 단일 | Y- 단일 | 
| 이메일 | P0 | SOAP | Y- 단일 | Y- 단일 | N | 
| 나열 | P0 | SOAP | Y- 단일 | Y- 단일 | N | 
| Send | P0 | SOAP | Y- 단일 | N | N | 
| 구독자 | P0 | SOAP | Y- 단일 | Y- 단일 | N | 

**REST에 대한 INSERT 작업의 예시**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "writeOperation" : "INSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP에 대한 INSERT 작업의 예시**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "List",
        "API_VERSION": "v1",
        "writeOperation" : "INSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**REST에 대한 UPDATE 작업의 예시**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "writeOperation" : "UPDATE",
         "ID_FIELD_NAMES": "id",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP에 대한 UPDATE 작업의 예시**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "List",
        "API_VERSION": "v1",
        "writeOperation" : "UPDATE",
         "ID_FIELD_NAMES": "id",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP에 대한 UPSERT 작업의 예시**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "DataExtension/Insert-***E/6*******3",
        "API_VERSION": "v1",
        "writeOperation" : "UPSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

# Salesforce Marketing Cloud 연결 옵션
<a name="salesforce-marketing-cloud-connection-options"></a>

다음은 Salesforce Marketing Cloud에 대한 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Salesforce Marketing Cloud에서의 객체 이름입니다.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용할 Salesforce Marketing Cloud Rest 및 SOAP API 버전입니다.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.
+ `WRITE_OPERATION`(문자열) - 기본값: INSERT. 쓰기에 사용됩니다. 값은 INSERT, UPDATE, UPSERT여야 합니다.
+ `ID_FIELD_NAMES`(문자열) - 기본값: null. UPDATE/UPSERT에 필요합니다.

# Salesforce Marketing Cloud 커넥터에 대한 제한 사항 및 참고 사항
<a name="salesforce-marketing-cloud-connector-limitations"></a>

다음은 Salesforce Marketing Cloud 커넥터에 대한 제한 사항 및 참고 사항입니다.
+ DateTime 데이터 유형 필드에 필터를 사용하는 경우 ‘yyyy-mm-ddThh:MM:ssZ’ 형식으로 값을 전달해야 합니다.
+ 데이터 미리 보기에서 부울 데이터 유형 값은 공백으로 제공됩니다.
+ SOAP 엔터티의 경우 최대 2개의 필터를 정의할 수 있으며, REST 엔터티의 경우 하나의 필터만 정의할 수 있어서 필터를 사용한 파티셔닝 테스트가 제한됩니다.
+ SaaS 측에서 몇 가지 예상치 못한 동작이 관찰되었습니다. `linksend` 엔터티의 `Link.Alias` 필드는 CONTAINS 연산자(예: `Link.Alias CONTAINS "ViewPrivacyPolicy"`)를 지원하지 않으며, 데이터 확장 엔터티의 필터 연산자(예: EQUALS 및 GREATER THAN)는 예상 결과를 반환하지 않습니다.
+ SFMC ClickEvent SOAP API는 새로 생성된 레코드 반영이 지연되므로 최근에 생성된 레코드는 API 응답에서 즉시 사용할 수 없을 수 있습니다.

  예: **2025-01-10T14:30:00**에 5개의 새 ClickEvent 레코드를 생성하고 SOAP API를 사용하여 즉시 가져오는 경우 응답에 5개의 레코드가 모두 포함되지 않을 수 있습니다. 새로 생성된 레코드가 API 응답에 표시되는 데 최대 5분이 걸릴 수 있습니다. 이 지연은 데이터 검색과 예약된 실행에도 영향을 미칠 수 있습니다.
+ **2025-03-11T04:46:00**(밀리초 제외) 및 **2025-03-11T04:46:00.000Z**의 두 가지 DateTime 형식은 AWS Glue(밀리초 포함)에서 쓰기 작업을 수행할 때 지원됩니다.
+ 이벤트 알림 구독 엔터티의 경우 확인된 콜백 URL에 대해서만 구독을 생성할 수 있으며 콜백당 최대 200개의 구독을 보유할 수 있습니다.
+ 이벤트 알림 콜백 엔터티의 경우 계정당 최대 50개의 레코드를 생성할 수 있습니다.