

# Mixpanel에 연결
<a name="connecting-to-mixpanel"></a>

Mixpanel은 기업이 사용자 참여를 측정하고 최적화하는 데 도움이 되는 강력한 실시간 분석 플랫폼입니다. Mixpanel은 고객 행동 추적에 사용되는 앱입니다. 이를 통해 사용자가 제품에 참여하는 방식을 추적하고 클릭 몇 번으로 결과를 쿼리하며 시각화할 수 있는 대화형 보고서를 통해 이 데이터를 분석할 수 있습니다. Mixpanel 사용자는 Mixpanel 계정에 AWS Glue를 연결할 수 있습니다. 그런 다음, Mixpanel을 ETL 작업에서의 데이터 소스로 사용할 수 있습니다. 이러한 작업을 실행하여 Mixpanel 및 AWS 서비스 또는 기타 지원되는 애플리케이션 간에 데이터를 전송합니다.

**Topics**
+ [AWS Glue의 Mixpanel 지원](Mixpanel-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](mixpanel-configuring-iam-permissions.md)
+ [Mixpanel 구성](mixpanel-configuring.md)
+ [Mixpanel 연결 구성](mixpanel-configuring-connections.md)
+ [Mixpanel 엔터티에서 읽기](mixpanel-reading-from-entities.md)
+ [Mixpanel 연결 옵션](mixpanel-connection-options.md)
+ [Mixpanel 계정 생성 및 클라이언트 앱 구성](mixpanel-create-account.md)
+ [제한 사항](mixpanel-connector-limitations.md)

# AWS Glue의 Mixpanel 지원
<a name="Mixpanel-support"></a>

AWS Glue에서는 다음과 같이 Mixpanel을 지원합니다.

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

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

**지원되는 Mixpanel API 버전**  
 2.0 

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

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

------
#### [ 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 콘솔의 사용자에게 해당됩니다.

# Mixpanel 구성
<a name="mixpanel-configuring"></a>

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

## 최소 요구 사항
<a name="mixpanel-configuring-min-requirements"></a>
+  Mixpanel 계정이 있습니다. 계정 생성에 대한 자세한 내용은 [Mixpanel 계정 생성](mixpanel-create-account.md)을 참조하세요.
+  Mixpanel 계정이 API 액세스에 대해 활성화되어 있습니다. API 액세스는 기본적으로 Enterprise, Unlimited, Developer, Performance 에디션에 대해 활성화됩니다.

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

# Mixpanel 연결 구성
<a name="mixpanel-configuring-connections"></a>

Mixpanel은 `BasicAuth`의 사용자 이름과 암호를 지원합니다. 기본 인증은 클라이언트가 보호된 리소스에 액세스하기 위해 자격 증명을 직접 제공하는 간단한 인증 방법입니다. AWS Glue는 사용자 이름과 암호를 사용하여 Mixpanel API를 인증합니다.

`BasicAuth` 흐름에 대한 퍼블릭 Mixpanel 설명서는 [Mixpanel 서비스 계정](https://developer.mixpanel.com/reference/service-accounts) 섹션을 참조하세요.

Mixpanel 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.
   +  기본 인증의 경우 보안 암호에는 `USERNAME`와 `PASSWORD`를 키로 사용하여 연결된 앱 소비자 보안 암호가 포함되어야 합니다.
**참고**  
AWS Glue에서 연결당 보안 암호를 생성해야 합니다.

1. AWS Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성합니다.

   1. **연결 유형**을 선택할 때 **Mixpanel**을 선택합니다.

   1. 연결하려는 Mixpanel의 `INSTANCE_URL`을 제공합니다.

   1. 다음 작업에 대한 권한이 있고 AWS Glue에서 수임할 수 있는 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`을 읽을 수 있는 권한을 부여합니다.

# Mixpanel 엔터티에서 읽기
<a name="mixpanel-reading-from-entities"></a>

 **사전 조건** 

데이터를 읽으려는 `Funnels`, `Retention` 또는 `Retention Funnels`와 같은 Mixpanel 객체가 있어야 합니다. 또한 객체 이름을 알아야 합니다.

 **지원되는 엔터티** 


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| Funnels | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Retention | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Segmentation | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Segmentation Sum | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Segmentation Average | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Cohorts | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Engage | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 이벤트 | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Events Top | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Events Names | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Events Properties | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Events Properties Top | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Events Properties Values | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Annotations | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| Profile Event Activity | 예 | 아니요 | 아니요 | 예 | 아니요 | 

 **예제** 

```
mixpanel_read = glueContext.create_dynamic_frame.from_options(
    connection_type="mixpanel",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/cohorts/list?project_id=2603353",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://www.mixpanel.com/api/app/me"
    }
```

 **Mixpanel 엔터티 및 필드 세부 정보** 

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

# Mixpanel 연결 옵션
<a name="mixpanel-connection-options"></a>

다음은 Mixpanel의 연결 옵션입니다.
+  `ENTITY_NAME`(문자열) - (필수) 읽기/쓰기에 사용됩니다. Mixpanel에서의 객체 이름입니다.
+  `API_VERSION`(문자열) - (필수) 읽기/쓰기에 사용됩니다. 사용할 Mixpanel Rest API 버전. 예: v2.0.
+  `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+  `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+  `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.

# Mixpanel 계정 생성 및 클라이언트 앱 구성
<a name="mixpanel-create-account"></a>

**Mixpanel 계정 생성**

1. [Mixpanel 홈 페이지](https://mixpanel.com/)로 이동합니다.

1. **Mixpanel** 홈 페이지의 오른쪽 상단 모서리에서 **가입**을 선택합니다.

1. **시작하기** 페이지에서 다음 작업을 완료합니다.
   + 지정된 필드에 이메일 주소를 입력합니다.
   + 필수 확인란을 선택하여 약관에 동의합니다.
   + 시작하려면 **시작하기**를 선택합니다.

     완료하면 확인 이메일을 받게 됩니다.

1. 이메일 받은 편지함에서 확인 메시지를 확인하고 이메일을 연 다음 지침에 따라 이메일 주소를 확인합니다.

1. 확인 페이지에서 **이메일 확인**을 선택하여 이메일 확인을 완료합니다.

1. **조직 이름 지정** 페이지에서 조직 이름을 입력하고 **다음**을 선택합니다.

1. **첫 번째 프로젝트** 페이지에서 프로젝트 세부 정보를 입력하고 **생성**을 선택합니다.

1. 다음 페이지에서 **시작하기**를 선택하여 계정 생성을 완료합니다.

**Mixpanel 계정에 로그인**

1. [Mixpanel 로그인 페이지](https://mixpanel.com/login/)로 이동합니다.

1. 이메일 주소를 입력하고 **계속**을 선택합니다.

1. 이메일 받은 편지함에서 확인 메시지를 확인하고 이메일을 연 다음 지침에 따라 이메일 주소를 확인합니다.

1. 다음 페이지에서 **로그인 버튼**을 선택하여 계정에 로그인합니다.

**Mixpanel 요금제 구매**

1. Mixpanel 페이지에서 페이지 오른쪽 상단에 있는 **설정** 아이콘을 선택합니다.

1. 옵션 목록에서 **요금제 세부 정보 및 결제**를 선택합니다.

1. **요금제 세부 정보 및 결제** 페이지에서 **업그레이드 또는 수정**을 선택합니다.

1. 다음 페이지에서 구매하려는 요금제를 선택합니다.

   이렇게 하면 계정 생성 및 요금제 구매 프로세스가 완료됩니다.

**사용자 이름 및 클라이언트 보안 암호 생성(앱 등록)**

1. Mixpanel 페이지에서 페이지 오른쪽 상단에 있는 **설정** 아이콘을 선택합니다.

1. 옵션 목록에서 **프로젝트 설정**을 선택합니다.

1. **프로젝트 설정** 페이지에서 **서비스 계정**을 선택한 다음 **서비스 계정 추가**를 선택합니다.

1. **서비스 계정** 드롭다운 목록에서 **서비스 계정을 선택하거나 생성할 이름을 입력**하고 **프로젝트 역할**을 추가한 다음 **만료**를 지정 후 **추가**를 선택합니다.
**중요**  
이전 단계를 완료한 후 다음 페이지에 서비스 계정의 보안 암호 키가 표시됩니다. 서비스 계정의 보안 암호 키를 저장해야 합니다. 이 시점 이후에는 다시 액세스할 수 없습니다.

# 제한 사항
<a name="mixpanel-connector-limitations"></a>

다음은 Mixpanel 커넥터의 제한 사항입니다.
+ `Segmentation Numeric` 엔터티의 경우 필수 필터에 대한 숫자 데이터를 찾을 수 없는 경우 Mixpanel API에서 `400 (Bad Request)` 오류가 발생합니다. 흐름 실패를 방지하기 위해 `OK` 응답으로 이것을 처리하고 있습니다.
+ 다음과 같은 이유로 쿼리 가능한 `limit` 필드가 지원되는 엔터티에서 제거되었습니다.
  + SDK의 제한 특성으로 해석되어 오류 발생
  + 이 필터는 실질적인 용도가 없음
  + 이제 제한 특성 구현에서 동등한 기능을 다룸
+ SaaS 플랫폼에서 분할하는 데 필요한 연산자(`>=`, `<=`, `<`, `>`, `between`)가 없으므로 필드 기반 분할을 지원할 수 없습니다. `between` 연산자를 지원하지만 이 연산자를 지원하는 필드는 검색할 수 없습니다. 따라서 필드 기반 분할의 기준이 충족되지 않습니다.
+  페이지 매김을 지원하는 엔터티에 대해 '오프셋' 값을 가져오는 프로비저닝이 없으므로 Mixpanel에 대한 레코드 기반 분할을 지원할 수 없습니다.
+ `Cohorts` 엔터티는 `CreatedDate/Time` 필드만 지원하며 `UpdatedDate/Time`을 식별할 수 있는 필드가 없기 때문에 결과적으로 `DML_Status`를 식별할 수 없습니다. 또한 삭제된 레코드를 식별할 엔드포인트가 없습니다. 따라서 CDC는 지원되지 않습니다.
+  아래 언급된 엔터티에 대해 AWS Glue 작업을 실행하려면 필수 필터가 필요합니다. 엔터티 이름 및 필요한 필터는 아래 표를 참조하세요.  
**엔터티 이름 및 필수 필터**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/mixpanel-connector-limitations.html)