

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

# SageMaker AI에서 올바른 데이터 준비 도구를 선택하기 위한 권장 사항
<a name="data-prep"></a>

기계 학습에서 데이터 준비는 원시 데이터를 수집, 사전 처리 및 구성하여 분석 및 모델링에 적합하게 만드는 프로세스를 말합니다. 이 단계에서는 데이터가 기계 학습 알고리즘이 효과적으로 학습할 수 있는 형식이 되도록 합니다. 데이터 준비 작업에는 누락된 값 처리, 이상치 제거, 특성 규모 조정, 범주형 변수 인코딩, 잠재적 편향 평가 및 완화 조치, 데이터를 훈련 세트와 테스트 세트로 분할, 레이블 지정 및 후속 기계 학습 작업을 위해 데이터의 품질과 유용성을 최적화하는 데 필요한 기타 변환이 포함될 수 있습니다.

## 기능 선택
<a name="data-prep-choose"></a>

Amazon SageMaker AI를 사용한 *데이터 준비*에는 세 가지 주요 사용 사례가 있습니다. 요구 사항에 맞는 [사용 사례를](#data-prep-choose-use-cases) 선택한 다음 해당 [권장 기능](#data-prep-choose-recommended)을 참조하세요.

### 사용 사례
<a name="data-prep-choose-use-cases"></a>

다음은 기계 학습을 위해 데이터 준비를 수행할 때의 주요 사용 사례입니다.
+ **사용 사례 1**: 시각적 인터페이스를 선호하는 사용자를 대상으로 SageMaker AI는 포인트 앤드 클릭 환경을 통해 모델 훈련을 위한 특성을 탐색, 준비 및 엔지니어링하는 방법을 제공합니다.
+ **사용 사례 2**: 데이터 준비에 대한 유연성과 제어력을 높이고자 하는 코딩에 익숙한 사용자를 대상으로 SageMaker AI는 탐색, 변환 및 특성 엔지니어링을 위해 도구를 코딩 환경에 통합합니다.
+ **사용 사례 3**: 확장 가능한 데이터 준비에 중점을 둔 사용자를 대상으로 SageMaker AI는 빅 데이터의 분산 처리를 위해 Hadoop/Spark 에코시스템을 활용하는 서버리스 기능을 제공합니다.

### 권장 기능
<a name="data-prep-choose-recommended"></a>

다음 표에는 기계 학습을 위한 각 데이터 준비 사용 사례와 관련된 SageMaker AI 기능의 주요 고려 사항 및 절충 사항이 요약되어 있습니다. 시작하려면 요구 사항에 맞는 사용 사례를 식별하고 권장 SageMaker AI 기능으로 이동하세요.


| 설명자 | 사용 사례 1 | 사용 사례 2 | 사용 사례 3 | 
| --- | --- | --- | --- | 
| SageMaker AI 기능 | Amazon SageMaker Canvas 내의 [Data Wrangler](canvas-data-prep.md) | [Studio에서 SQL을 사용하여 데이터 준비](sagemaker-sql-extension.md) | Studio 내의 [EMR Serverless를 사용하여 데이터 준비](studio-notebooks-emr-serverless.md) 애플리케이션 | 
| 설명 | SageMaker Canvas는 SageMaker AI에서 기계 학습 모델을 구축, 훈련 및 배포하기 위한 시각적 로코드 환경입니다. 통합된 Data Wrangler 도구를 사용하면 포인트 앤드 클릭 상호 작용을 통해 데이터세트를 결합, 변환 및 정리할 수 있습니다. | Studio의 SQL 확장을 사용하면 사용자가 Amazon Redshift, Snowflake, Athena 및 Amazon S3에 연결하여 임시 SQL 쿼리를 작성하고 JupyterLab 노트북에서 결과를 미리 볼 수 있습니다. 기계 학습 모델 개발에 사용할 수 있는 형식으로 추가 처리, 시각화 및 변환하기 위해 Python 및 Pandas를 사용하여 이러한 쿼리의 출력을 조작할 수 있습니다. | EMR Serverless와 Amazon SageMaker Studio 간의 통합은 Apache Spark 및 Apache Hive와 같은 오픈 소스 프레임워크를 사용하여 기계 학습용 대규모 데이터 준비를 위한 확장 가능한 서버리스 환경을 제공합니다. 사용자는 Studio 노트북에서 EMR Serverless 애플리케이션 및 데이터에 직접 액세스하여 대규모로 데이터 준비 작업을 수행할 수 있습니다. | 
| 최적화 대상 | 시각적 인터페이스를 사용하여 다음을 수행할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-prep.html) 누락된 값 처리, 범주형 변수 인코딩, 데이터 변환 적용과 같은 테이블 형식의 데이터 작업에 최적화되었습니다.  | 데이터가 Amazon Redshift, Snowflake, Athena 또는 [Amazon S3](studio-sqlexplorer-athena-s3-quickstart.md)에 상주하며 Spark를 배울 필요 없이 데이터 분석 및 준비를 Python 위해 탐색 SQL과 을 결합하고자 하는 사용자를 대상으로 합니다. | SageMaker AI의 기계 학습 기능을 활용하면서 Apache Spark를 중심으로 단기 실행 또는 간헐적 대화형 워크로드를 규모 조정하기 위한 자동 리소스 프로비저닝 및 종료 기능이 있는 서버리스 경험을 선호하는 사용자를 대상으로 합니다. | 
| 고려 사항 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-prep.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-prep.html)  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-prep.html)  | 
| 권장 환경 | [SageMaker Canvas 사용 시작하기](canvas-getting-started.md) | [​Studio 시작](studio-updated-launch.md#studio-updated-launch-prereq) | [​Studio 시작](studio-updated-launch.md#studio-updated-launch-prereq) | 

### 추가 옵션
<a name="data-prep-choose-additional"></a>

 SageMaker AI는 기계 학습 모델에 사용할 데이터를 준비하기 위한 다음과 같은 추가 옵션을 제공합니다.
+ [Amazon EMR을 사용한 데이터 준비](studio-notebooks-emr-cluster.md): 장기 실행, 계산 집약적, 대규모 데이터 처리 작업의 경우 SageMaker Studio의 Amazon EMR 클러스터 사용을 고려하세요. Amazon EMR 클러스터는 대규모 병렬화를 처리하도록 설계되었으며 수백 또는 수천 개의 노드로 확장할 수 있으므로 Apache Spark, Hadoop, Hive 및 Presto와 같은 프레임워크가 필요한 빅 데이터 워크로드에 적합합니다. Amazon EMR을 SageMaker Studio와 통합하면 SageMaker Studio 환경 내에서 중앙 집중화 및 관리되는 전체 ML 실험, 모델 훈련 및 배포를 유지하면서 Amazon EMR의 확장성과 성능을 활용할 수 있습니다.
+ [글루 대화형 세션을 사용하여 데이터 준비](studio-notebooks-glue.md): AWS Glue 대화형 세션의 Apache Spark 기반 서버리스 엔진을 사용하여 SageMaker Studio의 여러 소스에서 데이터를 집계, 변환 및 준비할 수 있습니다.
+ Amazon SageMaker Clarify 처리 작업을 사용하여 [훈련 데이터의 편향을 식별](): SageMaker Clarify는 데이터를 분석하고 여러 패싯에서 잠재적 편향을 감지합니다. 예를 들어 Studio에서 Clarify API를 사용하여 훈련 데이터에 성별, 인종 또는 연령과 같은 그룹 간의 불균형한 표현 또는 레이블을 지정하는 편향이 포함되어 있는지 감지할 수 있습니다. Clarify는 편향이 모델의 예측에 전파되지 않도록 모델을 훈련하기 전에 이러한 편향을 식별하는 데 도움이 될 수 있습니다.
+ [특성 만들기, 저장 및 공유](): Amazon SageMaker Feature Store는 기계 학습을 위해 선별된 특성의 검색 및 재사용을 최적화합니다. 모델 훈련을 위해 검색 및 가져올 수 있는 특성 데이터를 저장하는 중앙 집중식 리포지토리를 제공합니다. 표준화된 형식으로 특성을 저장하면 여러 ML 프로젝트에서 재사용할 수 있습니다. Feature Store는 확장 가능하고 통제된 기계 학습 특성 엔지니어링을 위한 계보 추적, 통계 및 감사 추적을 포함한 특성의 전체 수명 주기를 관리합니다.
+ [인간의 개입(human-in-the-loop)으로 데이터 레이블링:](data-label.md) SageMaker Ground Truth를 사용하여 훈련 데이터세트의 데이터 레이블 지정 워크플로를 관리할 수 있습니다.
+ [SageMaker Processing API 사용:](processing-job.md) 탐색 데이터 분석을 수행하고 데이터 변환 단계를 만든 후 [SageMaker AI Processing 작업](processing-job.md)을 사용하여 변환 코드를 프로덕션화하고 [SageMaker Model Building Pipelines](pipelines.md)을 사용하여 준비 워크플로를 자동화할 수 있습니다.

# Studio에서 SQL을 사용하여 데이터 준비
<a name="sagemaker-sql-extension"></a>

Amazon SageMaker Studio는 기본 제공 SQL 확장을 제공합니다. 이 확장을 통해 데이터 과학자는 JupyterLab 노트북 내에서 직접 샘플링, 탐색 분석 및 특성 엔지니어링과 같은 작업을 수행할 수 있습니다. AWS Glue 연결을 활용하여 중앙 집중식 데이터 소스 카탈로그를 유지합니다. 카탈로그는 다양한 데이터 소스에 대한 메타데이터를 저장합니다. 이 SQL 환경을 통해 데이터 과학자는 데이터 카탈로그를 검색하고, 데이터를 탐색하고, 복잡한 SQL 쿼리를 작성하고, Python에서 결과를 추가로 처리할 수 있습니다.

이 섹션에서는 Studio에서 SQL 확장을 구성하는 방법을 설명합니다. 이 SQL 통합에서 활성화된 기능에 대해 설명하고 JupyterLab 노트북에서 SQL 쿼리를 실행하기 위한 지침을 제공합니다.

SQL 데이터 분석을 활성화하려면 관리자가 먼저 관련 데이터 소스에 대한 AWS Glue 연결을 구성해야 합니다. 이러한 연결을 통해 데이터 과학자는 JupyterLab 내에서 승인된 데이터세트에 원활하게 액세스할 수 있습니다.

관리자가 구성한 AWS Glue 연결 외에도 SQL 확장을 사용하면 개별 데이터 과학자가 자체 데이터 소스 연결을 생성할 수 있습니다. 이러한 사용자 생성 연결은 태그 기반 액세스 제어 정책을 통해 독립적으로 관리하고 사용자 프로필로 범위를 지정할 수 있습니다. 관리자가 구성한 연결과 사용자가 생성한 연결을 모두 포함하는 이 이중 수준 연결 모델은 데이터 과학자에게 분석 및 모델링 작업에 필요한 데이터에 대한 더 광범위한 액세스를 제공합니다. 사용자는 관리자가 설정한 중앙 집중식 연결에만 의존하지 않고 JupyterLab 환경 사용자 인터페이스(UI) 내에서 자체 데이터 소스에 필요한 연결을 설정할 수 있습니다.

**중요**  
사용자 정의 연결 생성 기능은 PyPI에서 독립 실행형 라이브러리 세트로 사용할 수 있습니다. 이 기능을 사용하려면 JupyterLab 환경에 다음 라이브러리를 설치해야 합니다.  
[amazon-sagemaker-sql-editor](https://pypi.org/project/amazon-sagemaker-sql-editor/)
[amazon-sagemaker-sql-execution](https://pypi.org/project/amazon-sagemaker-sql-execution/)
[amazon-sagemaker-sql-magic](https://pypi.org/project/amazon-sagemaker-sql-magic/)
JupyterLab 터미널에서 다음 명령을 실행하여 이러한 라이브러리를 설치할 수 있습니다.  

```
pip install amazon-sagemaker-sql-editor>=0.1.13
pip install amazon-sagemaker-sql-execution>=0.1.6
pip install amazon-sagemaker-sql-magic>=0.1.3
```
라이브러리를 설치한 후 JupyterLab 서버를 다시 시작해야 변경 사항이 적용됩니다.  

```
restart-jupyter-server
```

JupyterLab 사용자는 액세스 설정을 통해 다음을 수행할 수 있습니다.
+ 사전 구성된 데이터 소스를 보고 검색합니다.
+ 테이블, 스키마 및 열과 같은 데이터베이스 정보 요소를 검색, 필터링 및 검사합니다.
+ 데이터 소스에 대한 연결 파라미터를 자동으로 생성합니다.
+ 확장의 SQL 편집기에서 제공하는 구문 강조 표시, 자동 완성 및 SQL 형식 지정 기능을 사용하여 복잡한 SQL 쿼리를 만듭니다.
+ JupyterLab 노트북 셀에서 SQL 문을 실행합니다.
+ 추가 처리, 시각화 및 기타 기계 학습 작업을 위해 SQL 쿼리 결과를 pandas DataFrames으로 검색합니다.

Studio에서 JupyterLab 애플리케이션의 왼쪽 탐색 창에서 SQL 확장 아이콘(![\[Icon of the SQL extension feature in JupyterLab.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png))을 선택하여 확장에 액세스할 수 있습니다. 아이콘 위로 마우스를 가져가면 *데이터 검색* 도구 팁이 표시됩니다.

**중요**  
SageMaker Studio의 JupyterLab 이미지에는 기본적으로 [SageMaker AI Distribution](https://github.com/aws/sagemaker-distribution) 1.6부터 시작하는 SQL 확장이 포함되어 있습니다. 확장은 Python 및 SparkMagic 커널에서만 작동합니다.
연결 및 데이터를 탐색하기 위한 확장의 사용자 인터페이스는 Studio 내의 JupyterLab에서만 사용할 수 있습니다. [Amazon Redshift](https://aws.amazon.com/redshift/), [Amazon Athena](https://aws.amazon.com/athena/), [Snowflake](https://www.snowflake.com/en/)와 호환됩니다.
+ SQL 확장을 위한 데이터 소스에 대한 일반 연결을 생성하려는 관리자는 다음 단계를 따르세요.

  1. Studio 도메인과 연결하려는 데이터 소스 간의 네트워크 통신을 활성화합니다. 네트워킹 요구 사항에 대한 자세한 내용은 [Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)](sagemaker-sql-extension-networking.md) 섹션을 참조하세요.

  1. 연결 속성 및 지침을 확인하여 [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md)에서 데이터 소스에 대한 보안 암호를 생성합니다.

  1. 에서 데이터 소스에 대한 AWS Glue 연결을 생성합니다[AWS Glue 연결 생성(관리자용)](sagemaker-sql-extension-datasources-glue-connection.md).

  1. SageMaker 도메인 또는 사용자 프로필의 실행 역할에 [데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)](sagemaker-sql-extension-datasources-connection-permissions.md)에서 필요한 권한을 부여합니다.
+ SQL 확장을 위한 데이터 소스에 대해 자체 연결을 생성하려는 데이터 과학자인 경우 다음 단계를 따르세요.

  1. 관리자에게 다음을 요청합니다.
     + Studio 도메인과 연결하려는 데이터 소스 간의 네트워크 통신을 활성화합니다. 네트워킹 요구 사항에 대한 자세한 내용은 [Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)](sagemaker-sql-extension-networking.md) 섹션을 참조하세요.
     + SageMaker 도메인 또는 사용자 프로필의 실행 역할에 [데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)](sagemaker-sql-extension-datasources-connection-permissions.md)에서 필요한 권한을 부여합니다.
**참고**  
관리자는 실행 역할에서 [태그 기반 액세스 제어](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions)를 구성하여 JupyterLab 애플리케이션 내에서 생성된 연결에 대한 사용자 액세스를 제한할 수 있습니다.

  1. 연결 속성 및 지침을 확인하여 [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md)에서 데이터 소스에 대한 보안 암호를 생성합니다.

  1. [사용자 정의 AWS Glue 연결 생성](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)의 지침에 따라 JupyterLab UI에서 연결을 생성합니다.
+ SQL 확장을 사용하여 데이터 소스를 둘러보고 쿼리하려는 데이터 과학자인 경우, 먼저 자신 또는 관리자가 데이터 소스에 대한 연결을 설정했는지 확인해야 합니다. 그런 다음, 아래 단계를 따릅니다.

  1. SageMaker 배포 이미지 버전 1.6 이상을 사용하여 Studio에서 JupyterLab 애플리케이션을 시작할 프라이빗 공간을 만듭니다.

  1. SageMaker 배포 이미지 버전 1.6의 사용자인 경우 노트북 셀에서 `%load_ext amazon_sagemaker_sql_magic`을 실행하여 JupyterLab 노트북에 SQL 확장을 로드합니다.

     SageMaker 배포 이미지 버전 1.7 이상 사용자의 경우 작업이 필요하지 않으며 SQL 확장이 자동으로 로드됩니다.

  1. [SQL 확장 기능 및 사용](sagemaker-sql-extension-features.md)에서 SQL 확장의 기능을 숙지합니다.

**Topics**
+ [Quickstart: Query data in Amazon S3](studio-sqlexplorer-athena-s3-quickstart.md)
+ [SQL 확장 기능 및 사용](sagemaker-sql-extension-features.md)
+ [Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)](sagemaker-sql-extension-networking.md)
+ [SQL 확장 데이터 소스 연결](sagemaker-sql-extension-datasources-connection.md)
+ [자주 묻는 질문(FAQ)](sagemaker-sql-extension-faqs.md)
+ [연결 파라미터](sagemaker-sql-extension-connection-properties.md)

# Quickstart: Query data in Amazon S3
<a name="studio-sqlexplorer-athena-s3-quickstart"></a>

사용자는 SQL 확장을 사용하여 JupyterLab 노트북에서 SQL 쿼리를 실행하여 Amazon S3에 저장된 데이터를 분석할 수 있습니다. 확장은 Athena와 통합되어 몇 가지 추가 단계를 통해 Amazon S3의 데이터에 대한 기능을 활성화합니다.

이 섹션에서는 Amazon S3에서 Athena로 데이터를 로드한 다음 SQL 확장을 사용하여 JupyterLab에서 해당 데이터를 쿼리하는 단계를 안내합니다. Athena 데이터 소스와 AWS Glue 크롤러를 생성하여 Amazon S3 데이터를 인덱싱하고, JupyterLab이 Athena에 액세스할 수 있도록 적절한 IAM 권한을 구성하고, JupyterLab을 Athena에 연결하여 데이터를 쿼리합니다. 이러한 몇 가지 단계에 따라 JupyterLab 노트북의 SQL 확장을 사용하여 Amazon S3 데이터를 분석할 수 있습니다.

**사전 조건**  
관리자 권한이 있는 AWS Identity and Access Management (IAM) 사용자 계정을 사용하여 AWS Management Console에 로그인합니다. AWS 계정에 가입하고 관리 액세스 권한이 있는 사용자를 만드는 방법에 대한 자세한 내용은 [Amazon SageMaker AI 사전 조건 충족](gs-set-up.md) 섹션을 참조하세요.
SageMaker Studio에 액세스할 수 있는 SageMaker AI 도메인 및 사용자 프로필이 있어야 합니다. SageMaker AI 환경을 설정하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI에 빠른 설정 사용](onboard-quick-start.md) 섹션을 참조하세요.
SageMaker AI 환경과 동일한 AWS 리전 및 계정을 사용하여 Athena 쿼리 결과를 저장할 Amazon S3 버킷 및 폴더가 있어야 합니다. Amazon S3에 버킷을 만드는 방법에 대한 자세한 내용은 Amazon S3 사용 설명서에서 [버킷 만들기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)를 참조하세요. 이 버킷과 폴더를 쿼리 출력 위치로 구성합니다.

**Topics**
+ [1단계: Amazon S3 데이터에 대한 Athena 데이터 소스 및 AWS Glue 크롤러 설정](#studio-sqlexplorer-athena-s3-quickstart-setup)
+ [2단계: Studio에 Athena에 액세스할 수 있는 권한 부여](#studio-sqlexplorer-athena-s3-quickstart-permissions)
+ [3단계: JupyterLab에서 Athena 기본 연결 활성화](#studio-sqlexplorer-athena-s3-quickstart-connect)
+ [4단계: SQL 확장을 사용하여 JupyterLab 노트북에서 Amazon S3의 데이터 쿼리](#studio-sqlexplorer-athena-s3-quickstart-query)

## 1단계: Amazon S3 데이터에 대한 Athena 데이터 소스 및 AWS Glue 크롤러 설정
<a name="studio-sqlexplorer-athena-s3-quickstart-setup"></a>

다음 단계에 따라 Amazon S3에서 데이터를 인덱싱하고 Athena에서 테이블을 만드세요.

**참고**  
서로 다른 Amazon S3 위치의 테이블 이름 간에 충돌을 방지하려면 각 위치에 대해 별도의 데이터 소스와 크롤러를 만듭니다. 각 데이터 소스는 접두사가 붙지 않는 한 데이터 소스를 포함하는 폴더의 이름을 따 테이블을 만듭니다.

1. 쿼리 결과 위치 구성

   1. Athena 콘솔([https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home))로 이동합니다.

   1. 왼쪽 메뉴에서 **작업 그룹**을 선택합니다.

   1. `primary` 작업 그룹의 링크를 따라가서 **편집**을 선택합니다.

   1. **쿼리 결과 구성** 섹션에서 출력 디렉터리의 Amazon S3 경로를 입력한 다음 **변경 사항 저장**을 선택합니다.

1. Amazon S3 데이터에 대한 Athena 데이터 소스 만들기

   1. Athena 콘솔의 왼쪽 메뉴에서 **데이터 소스**를 선택한 다음 **데이터 소스 만들기**를 선택합니다.

   1. **S3 - AWS Glue Data Catalog**를 선택한 **후 다음을** 선택합니다.

   1. 기본값인 **이 계정의AWS Glue Data Catalog**를 그대로 두고 ** AWS Glue에서 크롤러 만들기**를 선택한 다음 ** AWS Glue에서 만들기**를 선택합니다. 그러면 AWS Glue 콘솔이 열립니다.

1.  AWS Glue 를 사용하여 데이터 소스 크롤링

   1. 새 크롤러의 이름과 설명을 입력하고 **다음**을 선택합니다.

   1. **데이터 소스**에서 **데이터 소스 추가**를 선택합니다.

      1. 데이터가 포함된 Amazon S3 버킷이 SageMaker AI 환경과 다른 AWS 계정에 있는 경우 ** S3 데이터의 위치에** 대해 **다른 계정에서**를 선택합니다.

      1. Amazon S3에서 데이터세트의 경로를 입력합니다. 예제:

         ```
         s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/
         ```

      1. 다른 기본값은 모두 그대로 두고 **Amazon S3 데이터 소스 추가**를 선택합니다. 데이터 소스 테이블에 새 Amazon S3 데이터 소스가 표시됩니다.

      1. **다음**을 선택합니다.

       

   1. 크롤러가 데이터에 액세스할 수 있도록 IAM 역할을 구성합니다.
**참고**  
각 역할은 지정한 데이터 소스까지 범위가 지정됩니다. 역할을 재사용할 때 JSON 정책을 편집하여 액세스 권한을 부여할 새 리소스를 추가하거나 이 데이터 소스에 대한 새 역할을 만듭니다.

      1. **새 IAM 역할 만들기**를 선택합니다.

      1. 역할의 이름을 입력하고 **다음**을 선택합니다.

1. 테이블에 대한 데이터베이스 만들기 또는 선택

   1. Athena에 기존 데이터베이스가 없는 경우 **데이터베이스 추가**를 선택한 다음 **새 데이터베이스 만들기**를 선택합니다.

   1. 이전 크롤러 만들기 탭으로 돌아가 **출력 구성**에서 **새로 고침** 버튼을 선택합니다. 이제 새로 만든 데이터베이스가 목록에 표시됩니다.

   1. 데이터베이스를 선택하고 **테이블 이름 접두사**에 선택적으로 접두사를 추가한 후, **다음**을 선택합니다.
**참고**  
데이터가 `s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/`에 있는 이전 예시의 경우 `taxi-ride-` 접두사를 추가하면 `taxi-ride-year_2019`라는 테이블이 만들어집니다. 접두사를 추가하면 여러 데이터 위치에 동일한 이름의 폴더가 있을 때 테이블 이름 충돌을 방지하는 데 도움이 됩니다.

1. **크롤러 만들기**를 선택합니다.

1. 크롤러를 실행하여 데이터를 인덱싱합니다. 크롤러 실행이 `Completed` 상태에 도달할 때까지 기다리세요. 몇 분 정도 걸릴 수 있습니다.

새 테이블이 생성되었는지 확인하려면의 왼쪽 메뉴로 이동하여 **데이터베이스를** 선택한 다음 **테이블을** AWS Glue 선택합니다. 이제 데이터가 포함된 새 테이블이 표시됩니다.

## 2단계: Studio에 Athena에 액세스할 수 있는 권한 부여
<a name="studio-sqlexplorer-athena-s3-quickstart-permissions"></a>

다음 단계에서는 사용자 프로필의 실행 역할에 Athena에 액세스할 수 있는 권한을 부여합니다.

1. 사용자 프로필과 연결된 실행 역할의 ARN을 검색합니다.

   1. SageMaker AI 콘솔([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))로 이동한 후 왼쪽 메뉴에서 **도메인**을 선택합니다.

   1. 도메인 이름을 따라갑니다.

   1. **사용자 프로필** 목록에서 사용자 프로필의 이름을 따라갑니다.

   1. **사용자 세부 정보** 페이지에서 실행 역할의 ARN을 복사합니다.

1. 실행 역할의 정책 업데이트

   1. SageMaker AI 콘솔의 오른쪽 상단에서 AWS 리전 및 계정 ID를 찾습니다. 이러한 값과 데이터베이스 이름을 사용하여 텍스트 편집기의 다음 JSON 정책에서 자리 표시자를 업데이트합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "GetS3AndDataSourcesMetadata",
                  "Effect": "Allow",
                  "Action": [
                      "glue:GetDatabases",
                      "glue:GetSchema",
                      "glue:GetTables",
                      "s3:ListBucket",
                      "s3:GetObject",
                      "s3:GetBucketLocation",
                      "glue:GetDatabase",
                      "glue:GetTable",
                      "glue:ListSchemas",
                      "glue:GetPartitions"
                  ],
                  "Resource": [
                      "arn:aws:s3:::*",
                      "arn:aws:glue:us-east-1:111122223333:catalog",
                      "arn:aws:glue:us-east-1:111122223333:database/db-name"
                  ]
              },
              {
                  "Sid": "ExecuteAthenaQueries",
                  "Effect": "Allow",
                  "Action": [
                      "athena:ListDataCatalogs",
                      "athena:ListDatabases",
                      "athena:ListTableMetadata",
                      "athena:StartQueryExecution",
                      "athena:GetQueryExecution",
                      "athena:RunQuery",
                      "athena:StartSession",
                      "athena:GetQueryResults",
                      "athena:ListWorkGroups",
                      "s3:ListMultipartUploadParts",
                      "s3:ListBucket",
                      "s3:GetBucketLocation",
                      "athena:GetDataCatalog",
                      "s3:AbortMultipartUpload",
                      "s3:GetObject",
                      "s3:PutObject",
                      "athena:GetWorkGroup"
                  ],
                  "Resource": [
                      "arn:aws:s3:::*"
                  ]
              },
              {
                  "Sid": "GetGlueConnectionsAndSecrets",
                  "Effect": "Allow",
                  "Action": [
                      "glue:GetConnections",
                      "glue:GetConnection"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```

------

   1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))로 이동하여 왼쪽 메뉴에서 **역할**을 선택합니다.

   1. 역할 이름으로 역할을 검색합니다.
**참고**  
`'/'`에서 ARN을 분할하고 마지막 요소를 사용해 Amazon 리소스 이름(ARN)에서 실행 역할 이름을 찾을 수 있습니다. 예를 들어 예시 ARN인 `arn:aws:iam::112233445566:role/SageMakerStudio-SQLExtension-ExecutionRole`에서 실행 역할의 이름은 `SageMakerStudio-SQLExtension-ExecutionRole`입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한** 탭에서 **권한 추가**를 선택하고 **인라인 정책 만들기**를 선택합니다.

   1. **정책 편집기** 섹션에서 `JSON` 형식을 선택합니다.

   1. 위의 정책을 복사한 다음 **다음**을 선택합니다. 모든 `account-id`, `region-name` 및 `db-name`을 해당 값으로 바꾸었는지 확인합니다.

   1. 정책 이름을 입력하고 **정책 만들기**를 선택합니다.

## 3단계: JupyterLab에서 Athena 기본 연결 활성화
<a name="studio-sqlexplorer-athena-s3-quickstart-connect"></a>

다음 단계에서는 JupyterLab 애플리케이션에서 `default-athena-connection`을 활성화합니다. 기본 Athena 연결을 사용하면 연결을 수동으로 만들 필요 없이 JupyterLab에서 직접 Athena의 SQL 쿼리를 실행할 수 있습니다.

기본 Athena 연결을 활성화하는 방법

1. SageMaker AI 콘솔([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))로 이동한 후 왼쪽 메뉴에서 **Studio**를 선택합니다. 도메인 및 사용자 프로필을 사용하여 Studio를 시작합니다.

1. JupyterLab 애플리케이션을 선택합니다.

1. JupyterLab 애플리케이션을 위한 공간을 만들지 않은 경우 **JupyterLab 공간 만들기**를 선택합니다. 공간의 이름을 입력하고 공백을 **프라이빗**으로 유지한 다음 **공간 만들기**를 선택합니다. 최신 버전의 SageMaker AI 배포 이미지를 사용하여 스페이스를 실행합니다.

   아니면 공간에서 **공간 실행**을 선택하여 JupyterLab 애플리케이션을 시작합니다.

1. Athena 기본 연결 활성화:

   1. JupyterLab 애플리케이션에서 상단 탐색 모음의 **설정** 메뉴로 이동하여 **설정 편집기** 메뉴를 엽니다.

   1. **데이터 검색**을 선택합니다.

   1. **기본 Athena 연결 활성화** 확인란을 선택합니다.

   1. JupyterLab 애플리케이션에서 왼쪽 탐색 창의 SQL 확장 아이콘(![\[Purple circular icon with a clock symbol representing time or scheduling.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png))을 선택하여 SQL 확장을 엽니다.

   1.  데이터 검색 패널 하단의 **새로 고침** 버튼을 선택합니다. 연결 목록에 `default-athena-connection`이 표시됩니다.

## 4단계: SQL 확장을 사용하여 JupyterLab 노트북에서 Amazon S3의 데이터 쿼리
<a name="studio-sqlexplorer-athena-s3-quickstart-query"></a>

JupyterLab 노트북에서 SQL을 사용하여 데이터를 쿼리할 준비가 되었습니다.

1. `default-athena-connection` 연결을 연 다음 **AWS DataCatalog**를 엽니다.

1. 데이터베이스로 이동하여 오른쪽에 있는 점 3개 아이콘(![\[SQL extension three dots icon.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-3dots-icon.png))을 선택합니다. **노트북에서 쿼리**를 선택합니다.

   이렇게 하면 JupyterLab의 노트북 셀에 데이터 소스에 연결하기 위한 관련 `%%sm_sql` 매직 명령이 자동으로 채워집니다. 또한 즉시 쿼리를 시작하는 데 도움이 되는 샘플 SQL 문이 추가됩니다.
**참고**  
SQL 쿼리를 실행하기 전에 최상위 셀에 확장을 로드해야 합니다.

   확장의 자동 완성 및 강조 표시 기능을 사용하여 SQL 쿼리를 추가로 세분화할 수 있습니다. SQL 확장 SQL 편집기 사용에 대한 자세한 내용은 [JupyterLab SQL 확장의 SQL 편집기 기능](sagemaker-sql-extension-features-editor.md) 섹션을 참조하세요.

# SQL 확장 기능 및 사용
<a name="sagemaker-sql-extension-features"></a>

이 섹션에서는 Studio에서 제공하는 JupyterLab SQL 확장의 다양한 기능을 자세히 설명하고 이를 사용하는 방법에 대한 지침을 제공합니다. SQL 확장을 사용하여 JupyterLab 노트북에서 데이터에 액세스하고 쿼리하려면 먼저 관리자가 데이터 소스에 대한 연결을 구성해야 합니다. 관리자가 데이터 소스에 대한 연결을 만드는 방법에 대한 자세한 내용은 [SQL 확장 데이터 소스 연결](sagemaker-sql-extension-datasources-connection.md) 섹션을 참조하세요.

**참고**  
SQL 확장을 사용하려면 JupyterLab 애플리케이션이 [SageMaker AI 배포](https://github.com/aws/sagemaker-distribution/blob/main/README.md) 이미지 버전 1.6 이상에서 실행되어야 합니다. 이러한 SageMaker 이미지에는 확장이 미리 설치되어 있습니다.

확장은 사전 구성된 데이터 소스의 데이터를 액세스, 검색, 쿼리 및 분석하는 데 도움이 되는 두 가지 구성 요소를 제공합니다.
+ SQL 확장의 *사용자 인터페이스*를 사용하여 데이터 소스를 검색하고 탐색합니다. UI 기능은 다음 하위 범주로 추가로 나눌 수 있습니다.
  + **데이터 탐색** UI 요소를 사용하면 데이터 소스를 탐색하고 테이블, 열 및 메타데이터를 탐색할 수 있습니다. SQL 확장의 데이터 탐색 기능에 대한 자세한 내용은 [SQL 확장을 사용하여 데이터 찾아보기](sagemaker-sql-extension-features-data-discovery.md) 섹션을 참조하세요.
  + **연결 캐싱** 요소는 빠른 액세스를 위해 연결을 캐싱합니다. SQL 확장의 연결 캐싱에 대한 자세한 내용은 [SQL 확장 연결 캐싱](sagemaker-sql-extension-features-connection-caching.md) 섹션을 참조하세요.
+ *SQL 편집기 및 실행기*를 사용하여 연결된 데이터 소스에 대해 SQL 쿼리를 작성, 편집 및 실행합니다.
  + **SQL 편집기** 요소를 사용하면 Studio에서 JupyterLab 애플리케이션의 노트북 내에 SQL 문을 작성하고, 형식을 지정하고, 검증할 수 있습니다. SQL 편집기 기능에 대한 자세한 내용은 [JupyterLab SQL 확장의 SQL 편집기 기능](sagemaker-sql-extension-features-editor.md) 섹션을 참조하세요.
  + **SQL 실행** 요소를 사용하면 SQL 쿼리를 실행하고 Studio에 있는 JupyterLab 애플리케이션의 노트북에서 결과를 시각화할 수 있습니다. SQL 실행 기능에 대한 자세한 내용은 [JupyterLab SQL 확장의 SQL 실행 기능](sagemaker-sql-extension-features-sql-execution.md) 섹션을 참조하세요.

# SQL 확장을 사용하여 데이터 찾아보기
<a name="sagemaker-sql-extension-features-data-discovery"></a>

SQL 확장 사용자 인터페이스(UI)를 열려면 Studio에 있는 JupyterLab 애플리케이션의 탐색 창에서 SQL 확장 아이콘(![\[Purple circular icon with a clock symbol representing time or scheduling.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png))을 선택합니다. 왼쪽 패널 데이터 검색 보기가 확장되고 Amazon Athena, Amazon Redshift 및 Snowflake에 대한 사전 구성된 모든 데이터 저장소 연결이 표시합니다.

여기에서 다음을 수행할 수 있습니다.
+ 특정 연결을 확장하여 데이터베이스, 스키마, 테이블 또는 보기, 열을 탐색합니다.
+ SQL 확장 UI의 검색 상자를 사용하여 특정 연결을 검색합니다. 검색은 입력한 문자열과 부분적으로 일치하는 모든 데이터베이스, 스키마, 테이블 또는 보기를 반환합니다.

**참고**  
계정에 Athena가 이미 설정되어 있는 경우 JupyterLab 애플리케이션에서 `default-athena-connection`를 활성화 AWS 할 수 있습니다. 이렇게 하면 연결을 수동으로 만들 필요 없이 Athena 쿼리를 실행할 수 있습니다. 기본 Athena 연결을 활성화하는 방법  
관리자에게 실행 역할에 Athena 및 AWS Glue 카탈로그에 액세스하는 데 필요한 권한이 있는지 확인합니다. 필요한 권한에 대한 자세한 내용은 [Athena에 대한 AWS Glue 연결 구성](sagemaker-sql-extension-datasources-glue-connection.md#sagemaker-sql-extension-athena-glue-connection-config) 섹션을 참조하세요.
JupyterLab 애플리케이션에서 상단 탐색 모음의 **설정** 메뉴로 이동하여 **설정 편집기** 메뉴를 엽니다.
**데이터 검색**을 선택합니다.
**기본 Athena 연결 활성화** 확인란을 선택합니다.
필요한 경우 기본 `primary` 작업 그룹을 업데이트할 수 있습니다.

JupyterLab 노트북의 데이터베이스, 스키마 또는 테이블을 SQL 확장 창의 지정된 연결에서 쿼리하는 방법
+ 데이터베이스, 스키마 또는 테이블의 오른쪽에 있는 점 아이콘 3개(![\[SQL extension three dots icon.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-3dots-icon.png))를 선택합니다.
+ 메뉴에서 **노트북에서 쿼리**를 선택합니다.

  이렇게 하면 JupyterLab의 노트북 셀에 데이터 소스에 연결하기 위한 관련 `%%sm_sql` 매직 명령이 자동으로 채워집니다. 또한 즉시 쿼리를 시작하는 데 도움이 되는 샘플 SQL 문이 추가됩니다. 확장의 자동 완성 및 강조 표시 기능을 사용하여 SQL 쿼리를 추가로 세분화할 수 있습니다. SQL 확장 SQL 편집기 사용에 대한 자세한 내용은 [JupyterLab SQL 확장의 SQL 편집기 기능](sagemaker-sql-extension-features-editor.md) 섹션을 참조하세요.

테이블 수준에서 점 3개 아이콘은 테이블의 메타데이터 **미리 보기**를 선택할 수 있는 추가 옵션을 제공합니다.

아래 JupyterLab 노트북 셀 콘텐츠는 SQL 확장 창의 `redshift-connection` 데이터 소스에서 **노트북에서 쿼리** 메뉴를 선택할 때 자동으로 생성되는 항목의 예를 보여줍니다.

```
%%sm_sql --metastore-id redshift-connection --metastore-type GLUE_CONNECTION

-- Query to list tables from schema 'dev.public'
SHOW TABLES
FROM
  SCHEMA "dev"."public"
```

SQL 확장 창 상단의 *보다 작음* 기호(![\[Icon to clear the SQL extension search box.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-search-clear.png))를 사용하여 검색 상자를 지우거나 연결 목록으로 돌아갑니다.

**참고**  
확장은 빠른 액세스를 위해 탐색 결과를 캐싱합니다. 캐싱된 결과가 오래되어 유효하지 않거나 목록에서 연결이 누락된 경우 SQL 확장 패널 하단의 **새로 고침** 버튼을 선택하여 캐시를 수동으로 새로 고칠 수 있습니다. 연결 캐싱에 대한 자세한 내용은 [SQL 확장 연결 캐싱](sagemaker-sql-extension-features-connection-caching.md) 섹션을 참조하세요.

# JupyterLab SQL 확장의 SQL 편집기 기능
<a name="sagemaker-sql-extension-features-editor"></a>

SQL 확장은 JupyterLab 노트북 셀 내에서 SQL 편집기 기능을 활성화하는 매직 명령을 제공합니다.

SageMaker 배포 이미지 버전 1.6의 사용자인 경우 JupyterLab 노트북에서 `%load_ext amazon_sagemaker_sql_magic`을 실행하여 SQL 확장 매직 라이브러리를 로드해야 합니다. 그러면 SQL 편집 기능이 켜집니다.

SageMaker 배포 이미지 버전 1.7 이상 사용자의 경우 작업이 필요하지 않으며 SQL 확장이 자동으로 로드됩니다.

확장이 로드되면 셀 시작 부분에 `%%sm_sql` 매직 명령을 추가하여 SQL 편집기의 다음 기능을 활성화합니다.
+ **연결 선택 드롭다운**: 셀에 `%%sm_sql` 매직 명령을 추가하면 사용 가능한 데이터 소스 연결이 포함된 드롭다운 메뉴가 셀 상단에 나타납니다. 연결을 선택하여 해당 데이터 소스를 쿼리하는 데 필요한 파라미터를 자동으로 채웁니다. 다음은 `connection-name`이라는 연결을 선택하여 생성된 `%%sm_sql` 매직 명령 문자열의 예입니다.

  ```
  %%sm_sql --metastore-type GLUE_CONNECTION --metastore-id connection-name
  ```

  아래 SQL 편집기의 기능을 사용하여 SQL 쿼리를 빌드한 다음 셀을 실행하여 쿼리를 실행합니다. SQL 실행 기능에 대한 자세한 내용은 [JupyterLab SQL 확장의 SQL 실행 기능](sagemaker-sql-extension-features-sql-execution.md) 섹션을 참조하세요.
+ **쿼리 결과 드롭다운**: 연결 선택 드롭다운 메뉴 옆의 드롭다운 메뉴에서 결과 유형을 선택하여 쿼리 결과를 렌더링하는 방법을 지정할 수 있습니다. 다음 두 가지 대안 중에서 선택합니다.
  + **셀 출력**: (기본값) 이 옵션은 노트북 셀 출력 영역에 쿼리 결과를 표시합니다.
  + **Pandas Dataframe**: 이 옵션은 Pandas DataFrame을 쿼리 결과로 채웁니다. 추가 입력 상자를 사용하면 이 옵션을 선택할 때 DataFrame의 이름을 지정할 수 있습니다.
+ **SQL 구문 강조 표시**: 셀은 색상 및 스타일링별로 SQL 키워드, 절, 연산자 등을 자동으로 시각적으로 구분합니다. 이렇게 하면 SQL 코드를 더 쉽게 읽고 이해할 수 있습니다. `SELECT`, `FROM`, `WHERE` 등의 키워드와 `SUM` 및 `COUNT`와 같은 기본 제공 함수 또는 `GROUP BY` 등의 절은 다른 색상과 굵은 스타일로 강조 표시됩니다.
+ **SQL 형식 지정**: 다음 방법 중 하나로 일관된 들여쓰기, 대문자, 공백 및 줄 바꿈을 적용하여 SQL 문 및 절을 그룹화하거나 분리할 수 있습니다. 이렇게 하면 SQL 코드를 더 쉽게 읽고 이해할 수 있습니다.
  + SQL 셀을 마우스 오른쪽 버튼으로 클릭하고 **SQL 형식 지정**을 선택합니다.
  + SQL 셀에 포커스가 있는 경우 Windows에서는 *ALT \$1 F* 단축키, MacOS에서는 *Option \$1 F*를 사용합니다.
+ **SQL 자동 완성**: 확장은 입력 시 SQL 키워드, 함수, 테이블 이름, 열 이름 등의 자동 제안 및 자동 완성을 제공합니다. `SELECT` 또는 `WHERE`와 같은 SQL 키워드를 입력하기 시작하면 확장에 단어의 나머지 부분을 자동으로 완성하기 위한 제안이 팝업으로 표시됩니다. 예를 들어, 테이블 또는 열 이름을 입력할 때 데이터베이스 스키마에 정의된 테이블 및 열 이름 중 일치하는 것을 제안합니다.
**중요**  
JupyterLab 노트북에서 SQL 자동 완성을 활성화하려면 SageMaker AI 배포 이미지 버전 1.6의 사용자가 터미널에서 다음 `npm install -g vscode-jsonrpc sql-language-server` 명령을 실행해야 합니다. 설치가 완료되면 `restart-jupyter-server`를 실행하여 JupyterLab 서버를 다시 시작합니다.  
SageMaker 배포 이미지 버전 1.7 이상 사용자의 경우 작업이 필요하지 않습니다.

  셀은 인식된 SQL 키워드를 자동으로 완성하는 두 가지 방법을 제공합니다.
  + 명시적 호출(권장): **Tab** 키를 선택하여 컨텍스트 인식 제안 메뉴를 시작한 다음 **Enter**를 선택하여 제안 항목을 수락합니다.
  + 연속 힌트: 입력 시 셀에서 자동으로 완성된 단어를 제안합니다.
**참고**  
SQL 키워드가 대문자인 경우에만 자동 완성이 트리거됩니다. 예를 들어 `SEL`이라고 입력하면 `SELECT`가 트리거되지만 `sel`이라고 입력하면 트리거되지 않습니다.
데이터 소스에 처음 연결할 때 SQL 자동 완성은 데이터 소스의 메타데이터를 인덱싱합니다. 이 인덱싱 프로세스는 데이터베이스 크기에 따라 완료하는 데 다소 시간이 걸릴 수 있습니다.

# JupyterLab SQL 확장의 SQL 실행 기능
<a name="sagemaker-sql-extension-features-sql-execution"></a>

JupyterLab의 SQL 확장에서 연결된 데이터 소스에 대해 SQL 쿼리를 실행할 수 있습니다. 다음 섹션에서는 JupyterLab 노트북 내에서 SQL 쿼리를 실행하기 위한 가장 일반적인 파라미터를 설명합니다.
+ [간단한 매직 명령 연결 문자열 만들기](sagemaker-sql-extension-features-sql-execution-create-connection.md)에서 간단한 연결을 만듭니다.
+ [SQL 쿼리 결과를 Pandas DataFrame에 저장](sagemaker-sql-extension-features-sql-execution-save-dataframe.md)의 Pandas DataFrame에 쿼리 결과를 저장합니다.
+ [연결 속성 재정의](sagemaker-sql-extension-features-sql-execution-override-connection.md)에서 관리자가 정의한 연결 속성을 재정의하거나 정의한 연결 속성에 추가합니다.
+ [쿼리 파라미터를 사용하여 SQL 쿼리에 동적 값 제공](sagemaker-sql-extension-features-sql-execution-query-parameters.md).

`%%sm_sql` 매직 명령으로 셀을 실행하면 SQL 확장 엔진은 매직 명령 파라미터에 지정된 데이터 소스에 대해 셀에서 SQL 쿼리를 실행합니다.

매직 명령 파라미터 및 지원되는 형식의 세부 정보를 보려면 `%%sm_sql?`을 실행합니다.

**중요**  
Snowflake를 사용하려면 SageMaker 배포 이미지 버전 1.6의 사용자가 JupyterLab 애플리케이션의 터미널에서 다음 `micromamba install snowflake-connector-python -c conda-forge` 명령을 실행하여 Snowflake Python 종속성을 설치해야 합니다. 설치가 완료된 후 터미널에서 `restart-jupyter-server`를 실행하여 JupyterLab 서버를 다시 시작합니다.  
SageMaker 배포 이미지 버전 1.7 이상의 경우 Snowflake 종속성이 사전 설치됩니다. 별도의 작업은 필요없습니다.

# 간단한 매직 명령 연결 문자열 만들기
<a name="sagemaker-sql-extension-features-sql-execution-create-connection"></a>

관리자가 데이터 소스에 대한 연결을 구성한 경우 다음 단계에 따라 노트북 셀에서 연결 문자열을 손쉽게 만듭니다.

1. `%%sm_sql`을 사용하는 노트북 셀을 엽니다.

1. 셀 위의 연결 드롭다운 메뉴에서 원하는 데이터 소스에 대한 사전 구성된 연결을 선택합니다.

1. 그러면 해당 데이터 소스를 쿼리하는 데 필요한 파라미터가 자동으로 채워집니다.

또는 셀에서 연결 속성을 인라인으로 지정할 수 있습니다.

드롭다운 메뉴에서 연결을 선택하면 다음 두 파라미터가 기본 매직 명령 문자열에 삽입됩니다. 파라미터에는 관리자가 구성한 연결 정보가 포함됩니다.
+ `--metastore-id`: 연결 파라미터를 보유한 연결 객체의 이름입니다.
+ `--metastore-type`: `--metastore-id`에 해당하는 메타스토어의 유형입니다. SQL 확장은 AWS Glue 연결을 연결 메타 스토어로 사용합니다. 이 값은 자동으로 `GLUE_CONNECTION`으로 설정됩니다.

예를 들어 사전 구성된 Amazon Athena 데이터 저장소에 대한 연결 문자열은 다음과 유사합니다.

```
%%sm_sql --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION 
```

# SQL 쿼리 결과를 Pandas DataFrame에 저장
<a name="sagemaker-sql-extension-features-sql-execution-save-dataframe"></a>

SQL 쿼리의 결과를 Pandas DataFrame에 저장할 수 있습니다. 쿼리 결과를 DataFrame에 출력하는 가장 쉬운 방법은 [JupyterLab SQL 확장의 SQL 편집기 기능](sagemaker-sql-extension-features-editor.md) 쿼리 결과 드롭다운을 사용하고 **Pandas DataFrame** 옵션을 선택하는 것입니다.

또는 연결 문자열에 `--output '{"format": "DATAFRAME", "dataframe_name": "dataframe_name"}'` 파라미터를 추가할 수 있습니다.

예를 들어, 다음 쿼리는 pandas 및 SQL을 모두 사용하여 Snowflake `TPCH_SF1` 데이터베이스의 `Customer` 테이블에서 잔액이 가장 높은 고객의 세부 정보를 추출합니다.
+ 이 예에서는 고객 테이블에서 모든 데이터를 추출한 다음 `all_customer_data`라는 DataFrame에 저장합니다.

  ```
  %%sm_sql --output '{"format": "DATAFRAME", "dataframe_name": "all_customer_data"}' --metastore-id snowflake-connection-name --metastore-type GLUE_CONNECTION
  SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
  ```

  ```
  Saved results to all_customer_data
  ```
+ 다음으로 DataFrame에서 가장 높은 계정 잔액의 세부 정보를 추출합니다.

  ```
  all_customer_data.loc[all_customer_data['C_ACCTBAL'].idxmax()].values
  ```

  ```
  array([61453, 'Customer#000061453', 'RxNgWcyl5RZD4qOYnyT3', 15,
  '25-819-925-1077', Decimal('9999.99'), 'BUILDING','es. carefully regular requests among the blithely pending requests boost slyly alo'],
  dtype=object)
  ```

# 연결 속성 재정의
<a name="sagemaker-sql-extension-features-sql-execution-override-connection"></a>

관리자의 사전 정의된 연결 정의에 특정 데이터 저장소에 연결하는 데 필요한 정확한 파라미터가 없을 수 있습니다. `--connection-properties` 인수를 사용하여 연결 문자열에 파라미터를 추가하거나 재정의할 수 있습니다.

인수는 다음 우선순위에 따라 적용됩니다.

1. 인라인 인수로 제공된 재정의된 연결 속성

1. 에 있는 연결 속성입니다 AWS Secrets Manager.

1. 연결의 AWS Glue 연결 속성입니다.

세 가지(명령줄 인수, Secrets Manager 및 연결) 모두에 동일한 연결 속성이 있는 경우 명령줄 인수에 제공된 값이 우선합니다.

데이터 소스당 사용 가능한 연결 속성에 대한 자세한 내용은 [연결 파라미터](sagemaker-sql-extension-connection-properties.md) 섹션을 참조하세요.

다음 예에서는 Amazon Athena의 스키마 이름을 설정하는 연결 속성 인수를 보여줍니다.

```
%%sm_sql --connection-properties '{"schema_name": "athena-db-name"}' --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION
```

# 쿼리 파라미터를 사용하여 SQL 쿼리에 동적 값 제공
<a name="sagemaker-sql-extension-features-sql-execution-query-parameters"></a>

쿼리 파라미터를 사용하여 SQL 쿼리에 동적 값을 제공할 수 있습니다.

다음 예에서는 쿼리 파라미터를 쿼리의 `WHERE` 절로 전달합니다.

```
# How to use '--query-parameters' with ATHENA as a data store
%%sm_sql --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION --query-parameters '{"parameters":{"name_var": "John Smith"}}'
SELECT * FROM my_db.my_schema.my_table WHERE name = (%(name_var)s);
```

# SQL 확장 연결 캐싱
<a name="sagemaker-sql-extension-features-connection-caching"></a>

SQL 확장은 동일한 연결 속성 집합에 대해 여러 연결이 만들어지지 않도록 기본적으로 연결을 캐싱합니다. 캐싱된 연결은 `%sm_sql_manage` 매직 명령을 사용하여 관리할 수 있습니다.

다음 주제에서는 캐싱된 연결을 관리하는 방법을 설명합니다.

**Topics**
+ [캐싱된 연결 만들기](sagemaker-sql-extension-features-create-cached-connection.md)
+ [캐싱된 연결 나열](sagemaker-sql-extension-features-list-cached-connection.md)
+ [캐싱된 연결 지우기](sagemaker-sql-extension-features-clear-cached-connection.md)
+ [캐싱된 연결 비활성화](sagemaker-sql-extension-features-disable-cached-connection.md)

# 캐싱된 연결 만들기
<a name="sagemaker-sql-extension-features-create-cached-connection"></a>

연결 문자열의 `--connection-name` 파라미터에 연결 이름을 지정하여 캐싱된 연결을 만들 수 있습니다. 이는 특정 사용 사례에 대해 여러 연결 속성을 재정의하고 동일한 속성을 다시 입력하지 않고 재사용해야 하는 경우에 특히 유용합니다.

예를 들어 아래 코드는 `--connection-name my_athena_conn_with_schema`라는 이름을 사용하여 재정의된 스키마 연결 속성이 있는 Athena 연결을 저장한 다음 다른 셀에서 재사용합니다.

```
%%sm_sql --connection-name my_athena_conn_with_schema --connection-properties '{"schema_name": "sm-sql-private-beta-db"}' --metastore-id sm-sql-private-beta-athena-connection --metastore-type GLUE_CONNECTION 
SELECT * FROM "covid_table" LIMIT 2
```

```
%%sm_sql --connection-name my_athena_conn_with_schema
SELECT * FROM "covid_table" LIMIT 2
```

# 캐싱된 연결 나열
<a name="sagemaker-sql-extension-features-list-cached-connection"></a>

다음 명령을 실행하여 캐싱된 연결을 나열할 수 있습니다.

```
%sm_sql_manage --list-cached-connections
```

# 캐싱된 연결 지우기
<a name="sagemaker-sql-extension-features-clear-cached-connection"></a>

캐싱된 모든 연결을 지우려면 다음 명령을 실행합니다.

```
%sm_sql_manage --clear-cached-connections
```

# 캐싱된 연결 비활성화
<a name="sagemaker-sql-extension-features-disable-cached-connection"></a>

캐싱된 연결을 비활성화하려면 다음 명령을 실행합니다.

```
%sm_sql_manage --set-connection-reuse False
```

# Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)
<a name="sagemaker-sql-extension-networking"></a>

이 섹션에서는 관리자가 프라이빗 Amazon VPC 내에서 또는 인터넷을 통해 Amazon SageMaker Studio와 [Amazon Redshift](https://aws.amazon.com/redshift/) 또는 [Amazon Athena](https://aws.amazon.com/athena/) 간의 통신을 활성화하도록 네트워크를 구성하는 방법에 대한 정보를 제공합니다. 네트워킹 지침은 Studio도메인 및 데이터 저장소가 프라이빗 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)(Amazon VPC) 내에 배포되어 있는지 아니면 인터넷으로 통신하는지에 따라 달라집니다.

기본적으로 Studio는 [인터넷에 액세스할](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-default) 수 있는 AWS 관리형 VPC에서 실행됩니다. 인터넷 연결을 사용하는 경우 Studio는 인터넷을 통해 Amazon S3 버킷과 같은 AWS 리소스에 액세스합니다. 하지만 데이터 및 작업 컨테이너에 대한 액세스를 제어하기 위한 보안 요구 사항이 있는 경우 인터넷을 통해 데이터와 컨테이너에 액세스할 수 없도록 Studio 및 데이터 저장소(Amazon Redshift 또는 Athena)를 구성하는 것이 좋습니다. 리소스에 대한 액세스를 제어하거나 퍼블릭 인터넷 액세스 없이 Studio를 실행하려면 [Amazon SageMaker AI 도메인](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)에 온보딩할 때 `VPC only` 네트워크 액세스 유형을 지정할 수 있습니다. 이 시나리오에서 Studio는 프라이빗 [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)를 통해 다른 AWS 서비스와의 연결을 설정합니다. `VPC only` 모드에서 Studio를 구성하는 방법에 대한 자세한 내용은 [Connect Studio to external resources in a VPC](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-vpc-only)를 확인하세요.

**참고**  
Snowflake에 연결하려면 Studio 도메인의 VPC에 인터넷 액세스가 가능해야 합니다.

처음 두 섹션에서는 퍼블릭 인터넷 액세스가 없는 VPC에서 Studio 도메인과 데이터 저장소 간 통신을 보장하는 방법을 설명합니다. 마지막 섹션에서는 인터넷 연결을 사용하여 Studio와 데이터 저장소 간 통신을 보장하는 방법을 다룹니다. 인터넷 액세스 없이 Studio와 데이터 저장소를 연결하기 전에 Amazon Simple Storage Service, Amazon Redshift 또는 Athena, SageMaker AI 및 Amazon CloudWatch 및 AWS CloudTrail (로깅 및 모니터링)에 대한 엔드포인트를 설정해야 합니다.
+ Studio와 데이터 저장소가 동일한 AWS 계정 또는 별개의 계정에 있는 서로 다른 VPC에 있는 경우 [Studio와 데이터 저장소가 서로 다른 VPC에 배포됨](#sagemaker-sql-extension-networking-cross-vpc) 섹션을 참조하세요.
+ Studio와 데이터 저장소가 동일한 VPC에 있는 경우 [Studio와 데이터 저장소가 동일한 VPC에 배포됨](#sagemaker-sql-extension-networking-same-vpc) 섹션을 참조하세요.
+ 퍼블릭 인터넷을 통해 Studio와 데이터 저장소를 연결하도록 선택한 경우 [Studio와 데이터 저장소가 퍼블릭 인터넷을 통해 통신함](#sagemaker-sql-extension-networking-internet) 섹션을 참조하세요.

## Studio와 데이터 저장소가 서로 다른 VPC에 배포됨
<a name="sagemaker-sql-extension-networking-cross-vpc"></a>

서로 다른 VPC에 배포된 Studio와 데이터 저장소 간의 통신을 허용하는 방법

1. VPC 피어링 연결을 통해 VPC를 연결하여 시작합니다.

1. Studio 서브넷과 데이터 저장소 서브넷 간의 양방향 네트워크 트래픽을 허용하도록 각 VPC의 라우팅 테이블을 업데이트합니다.

1. 인바운드 및 아웃바운드 트래픽을 허용하도록 보안 그룹을 구성합니다.

구성 단계는 Studio와 데이터 스토어가 단일 AWS 계정에 배포되든 다른 AWS 계정에 배포되든 동일합니다.

1. 

**VPC 피어링**

   [VPC 피어링 연결](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)을 만들어 두 VPC(Studio와 데이터 저장소) 간 네트워킹을 용이하게 합니다.

   1. Studio 계정의 VPC 대시보드에서 **피어링 연결**을 선택한 다음 **피어링 연결 만들기**를 선택합니다.

   1. 데이터 저장소 VPC 내에서 Studio VPC를 피어링하는 요청을 만듭니다. 다른 AWS 계정에서 피어링을 요청할 때 **피어링할 다른 VPC 선택에서 다른** **계정을** 선택합니다.

      교차 계정 피어링의 경우 관리자는 SQL 엔진 계정의 요청을 수락해야 합니다.

      프라이빗 서브넷을 피어링할 때는 VPC 피어링 연결 수준에서 프라이빗 IP DNS 확인을 활성화해야 합니다.

1. 

**라우팅 테이블**

   Studio와 데이터 저장소 VPC 서브넷 간의 네트워크 트래픽을 양방향으로 허용하도록 라우팅을 구성합니다.

   피어링 연결을 설정한 후 관리자(교차 계정 액세스를 위한 각 계정에서)는 프라이빗 서브넷 라우팅 테이블에 경로를 추가하여 Studio VPC와 데이터 저장소 VPC 간 트래픽을 라우팅할 수 있습니다. VPC 대시보드에서 각 VPC의 **라우팅 테이블** 섹션으로 이동하여 이러한 경로를 정의할 수 있습니다.

1. 

**보안 그룹**

   마지막으로 Studio의 도메인 VPC의 보안 그룹은 아웃바운드 트래픽을 허용해야 하며, 데이터 저장소 VPC의 보안 그룹은 Studio의 VPC 보안 그룹에서 데이터 저장소 포트의 인바운드 트래픽을 허용해야 합니다.

## Studio와 데이터 저장소가 동일한 VPC에 배포됨
<a name="sagemaker-sql-extension-networking-same-vpc"></a>

 Studio와 데이터 저장소가 동일한 VPC의 서로 다른 프라이빗 서브넷에 있는 경우 각 프라이빗 서브넷의 라우팅 테이블에 경로를 추가합니다. 경로는 Studio 서브넷과 데이터 저장소 서브넷 간에 트래픽이 흐르도록 허용해야 합니다. VPC 대시보드에서 각 VPC의 **라우팅 테이블** 섹션으로 이동하여 이러한 경로를 정의할 수 있습니다. 동일한 VPC와 동일한 서브넷에 Studio와 데이터 저장소를 배포한 경우 트래픽을 라우팅할 필요가 없습니다.

라우팅 테이블 업데이트와 관계없이 Studio의 도메인 VPC의 보안 그룹은 아웃바운드 트래픽을 허용해야 하며, 데이터 저장소 VPC의 보안 그룹은 Studio의 VPC 보안 그룹에서 포트의 인바운드 트래픽을 허용해야 합니다.

## Studio와 데이터 저장소가 퍼블릭 인터넷을 통해 통신함
<a name="sagemaker-sql-extension-networking-internet"></a>

기본적으로 Studio는 Studio 도메인과 연결된 VPC의 인터넷 게이트웨이를 통해 인터넷으로 통신할 수 있는 네트워크 인터페이스를 제공합니다. 퍼블릭 인터넷을 통해 데이터 저장소에 연결하도록 선택한 경우 데이터 저장소는 포트의 인바운드 트래픽을 수락해야 합니다.

인터넷에 액세스할 때 [NAT 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with)를 사용하여 여러 VPC의 프라이빗 서브넷에 있는 인스턴스가 [인터넷 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)가 제공하는 단일 퍼블릭 IP 주소를 공유할 수 있도록 해야 합니다.

**참고**  
인바운드 트래픽에 대해 열린 각 포트는 잠재적 보안 위험을 나타냅니다. 취약점들을 최소한으로 줄일 수 있도록 사용자 지정 보안 그룹을 신중하게 검토하세요.

# SQL 확장 데이터 소스 연결
<a name="sagemaker-sql-extension-datasources-connection"></a>

JupyterLab 노트북에서 SQL 확장을 사용하기 전에 관리자 또는 사용자는 데이터 소스에 대한 AWS Glue 연결을 생성해야 합니다. SQL 확장을 사용하면 Amazon Redshift Amazon Athena 또는 Snowflake와 같은 데이터 소스에 연결할 수 있습니다.

연결을 설정하려면 관리자는 먼저 네트워크 구성이 Studio와 데이터 소스 간의 통신을 허용하는지 확인한 다음, Studio가 데이터 소스에 액세스하도록 허용하는 데 필요한 IAM 권한을 부여해야 합니다. 관리자가 네트워킹을 설정하는 방법에 대한 자세한 내용은 [Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)](sagemaker-sql-extension-networking.md) 섹션을 참조하세요. 설정해야 하는 정책에 대한 자세한 내용은 [데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)](sagemaker-sql-extension-datasources-connection-permissions.md) 섹션을 참조하세요. 연결이 설정되면 데이터 과학자는 JupyterLab 노트북의 SQL 확장을 사용하여 연결된 데이터 소스를 찾고 쿼리할 수 있습니다.

**참고**  
데이터베이스 액세스 자격 증명을 Secrets Manager에 보안 암호로 저장하는 것이 좋습니다. Amazon Redshift 또는 Snowflake 액세스 자격 증명을 저장하기 위한 보안 암호를 생성하는 방법에 대한 자세한 내용은 [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md) 섹션을 참조하세요.

이 섹션에서는 AWS Glue 연결을 설정하는 방법을 설명하고 Studio JupyterLab 애플리케이션이 연결을 통해 데이터에 액세스하는 데 필요한 IAM 권한을 나열합니다.

**참고**  
[Amazon SageMaker Assets](sm-assets.md)은 [Amazon DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html)을 Studio와 통합합니다. 여기에는 관리자가 Amazon DataZone 도메인 내의 Amazon DataZone 프로젝트에서 Studio 환경을 만들 수 있는 SageMaker AI 블루프린트가 포함되어 있습니다.  
블루프린트로 생성된 Studio 도메인에서 시작된 JupyterLab 애플리케이션의 사용자는 SQL 확장을 사용할 때 Amazon DataZone 카탈로그의 데이터 자산에 대한 AWS Glue 연결에 자동으로 액세스할 수 있습니다. 이렇게 하면 연결을 수동으로 설정하지 않고도 이러한 데이터 소스를 쿼리할 수 있습니다.

**Topics**
+ [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md)
+ [AWS Glue 연결 생성(관리자용)](sagemaker-sql-extension-datasources-glue-connection.md)
+ [사용자 정의 AWS Glue 연결 생성](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)
+ [데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)](sagemaker-sql-extension-datasources-connection-permissions.md)

# Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성
<a name="sagemaker-sql-extension-glue-connection-secrets"></a>

연결을 생성하기 전에 데이터베이스 액세스 자격 증명을 보안 암호로 저장하는 것이 좋습니다 AWS Secrets Manager. 또는 AWS Identity and Access Management (IAM) 권한 정책을 통해 부여된 권한을 기반으로 임시 데이터베이스 자격 증명을 생성하여 사용자가 데이터베이스에 대해 갖는 액세스를 관리할 수 있습니다. 자세한 내용은 [IAM 인증을 이용한 데이터베이스 사용자 자격 증명 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)을 참조하세요.

## Amazon Redshift 액세스 자격 증명에 대한 보안 암호 만들기
<a name="sagemaker-sql-extension-redshift-secret"></a>

**AWS Secrets Manager에 Amazon Redshift 정보를 저장하려면**

1. 에서 Secrets Manager로 AWS Management Console이동합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **보안 암호 유형**에서 **Amazon Redshift에 대한 자격 증명**을 선택합니다.

1. Amazon Redshift 클러스터를 시작할 때 구성된 관리 사용자 이름과 암호를 입력합니다.

1. 보안 암호와 연결된 Amazon Redshift 클러스터를 선택합니다.

1. 보안 암호의 이름을 지정합니다.

1. 나머지 설정은 최초 보안 암호를 만들 때 기본값으로 두거나 필요한 경우 사용자 지정할 수 있습니다.

1. 보안 암호를 만들고 ARN을 검색합니다.

## Amazon Redshift Serverless 액세스 자격 증명을 위한 보안 암호 생성
<a name="sagemaker-sql-extension-redshift-serverless-secret"></a>

**Amazon Redshift Serverless에 연결해야 하는 경우 다음 단계를 따르세요.**

1. 에서 Secrets Manager로 AWS Management Console이동합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **암호 유형**에서 **다른 보안 암호 유형**을 선택합니다.

1. **키-값 페어**에서 **일반 텍스트**를 선택한 후, 다음 JSON 콘텐츠를 복사합니다. 사용자 및 암호를 실제 값으로 바꿉니다.

   ```
   {
     "user": "redshift_user",
     "password": "redshift_password"
   }
   ```

1. 보안 암호를 만들고 ARN을 가져옵니다.

1. JupyterLab의 SQL 확장에서 새 연결을 생성할 때 필요에 따라 다른 모든 Amazon Redshift 연결 파라미터를 제공합니다.

## Snowflake 액세스 자격 증명에 대한 보안 암호 만들기
<a name="sagemaker-sql-extension-snowflake-secret"></a>

이 섹션에서는 Snowflake에 고유한 JSON 정의 파일의 보안 암호 및 연결 속성에 대한 세부 정보를 제공합니다. 연결을 생성하기 전에 Snowflake 액세스 자격 증명을 Secrets Manager에 보안 암호로 저장하는 것이 좋습니다.

**Secrets Manager에 Amazon Redshift 정보를 저장하는 방법**

1. 에서 Secrets Manager로 AWS Management Console이동합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **암호 유형**에서 **다른 보안 암호 유형**을 선택합니다.

1. 키-값 페어에서 **일반 텍스트**를 선택한 후, 다음 JSON 콘텐츠를 복사합니다. `user`, `password` 및 `account`를 실제 값으로 바꿉니다.

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 보안 암호의 이름을 지정합니다.

1. 나머지 설정은 최초 보안 암호를 만들 때 기본값으로 두거나 필요한 경우 사용자 지정할 수 있습니다.

1. 보안 암호를 만들고 ARN을 검색합니다.

# AWS Glue 연결 생성(관리자용)
<a name="sagemaker-sql-extension-datasources-glue-connection"></a>

SQL 확장과 함께 데이터 소스를 사용하기 위해 관리자는 각 데이터 소스에 대한 AWS Glue 연결을 설정할 수 있습니다. 이러한 연결은 데이터 소스에 액세스하고 상호 작용하는 데 필요한 구성 세부 정보를 저장합니다. 연결이 생성되고 [적절한 권한](sagemaker-sql-extension-datasources-connection-permissions.md)이 부여되면 실행 역할이 동일한 [Amazon SageMaker Studio 스페이스](studio-updated-spaces.md)의 모든 사용자에게 연결이 표시됩니다.

이러한 연결을 만드는 방법:
+ 먼저 각 데이터 소스에 대한 연결 속성을 정의하는 JSON 파일을 만듭니다. JSON 파일에는 AWS Glue 연결을 통해 데이터 소스에 액세스하기 위한 데이터 소스 식별자, 액세스 자격 증명 및 기타 관련 구성 파라미터와 같은 세부 정보가 포함되어 있습니다.
+ 그런 다음 AWS Command Line Interface (AWS CLI)를 사용하여 JSON 파일을 파라미터로 전달하여 AWS Glue 연결을 생성합니다. AWS CLI 명령은 JSON 파일에서 연결 세부 정보를 읽고 적절한 연결을 설정합니다.
**참고**  
SQL 확장은 AWS CLI 만 사용하여 연결 만들기를 지원합니다.

 AWS Glue 연결을 생성하기 전에 다음 단계를 완료해야 합니다.
+  AWS Command Line Interface ()를 설치하고 구성합니다AWS CLI. 설치 및 구성 방법에 대한 자세한 내용은 [AWS CLI 버전 2 정보를](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) AWS CLI참조하세요. 를 구성하는 데 사용되는 IAM 사용자 또는 역할의 액세스 키와 토큰에 연결을 생성하는 AWS Glue 데 필요한 권한이 AWS CLI 있는지 확인합니다. 없다면 `glue:CreateConnection` 작업을 허용하는 정책을 추가합니다.
+ 를 사용하는 방법을 이해합니다 AWS Secrets Manager. Secrets Manager를 사용하여 데이터 저장소에 대한 연결 자격 증명 및 기타 민감한 정보를 제공하는 것이 좋습니다. Secrets Manager를 사용하여 자격 증명을 저장하는 방법에 대한 자세한 내용은 [AWS Secrets Manager에 연결 자격 증명 저장](https://docs.aws.amazon.com/glue/latest/dg/connection-properties-secrets-manager.html)을 참조하세요.

## 연결 정의 JSON 파일 만들기
<a name="sagemaker-sql-extension-glue-connection-config"></a>

 AWS Glue 연결 정의 파일을 생성하려면 JSON 파일을 생성하여를 설치하고 구성한 시스템의 연결 세부 정보를 정의합니다 AWS CLI. 이 예시에서 파일의 이름은 `sagemaker-sql-connection.json`이라고 지정합니다.

연결 정의 파일은 다음 일반 형식을 따라야 합니다.
+ **Name**은 연결의 이름입니다.
+ **Description**은 연결에 대한 텍스트 설명입니다.
+ **ConnectionType**은 연결 유형입니다. Choose `REDSHIFT`, `ATHENA`, or `SNOWFLAKE`.
+ **ConnectionProperties**는 AWS 보안 암호의 ARN 또는 데이터베이스 이름과 같은 연결 속성의 키-값 페어 맵입니다.

```
{
    "ConnectionInput": {
        "Name": <GLUE_CONNECTION_NAME>,
        "Description": <GLUE_CONNECTION_DESCRIPTION>,
        "ConnectionType": "REDSHIFT | ATHENA | SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties": "{\"aws_secret_arn\": <SECRET_ARN>, \"database\": <...>}"
        }
    }
}
```

**참고**  
`ConnectionProperties` 키 내의 속성은 문자열화된 키-값 페어로 구성됩니다. 키 또는 값에 사용된 큰따옴표를 백슬래시(`\`) 문자로 이스케이프 처리합니다.
Secrets Manager에서 사용할 수 있는 모든 속성은 `PythonProperties`를 통해 직접 제공할 수도 있습니다. 그러나 `PythonProperties`에 암호와 같은 민감한 필드를 포함하는 것은 권장되지 않습니다. 대신 Secrets Manager를 사용하는 것이 좋습니다.

각기 다른 데이터 저장소별 연결 정의 파일은 다음 섹션에서 확인할 수 있습니다.

각 데이터 소스의 연결 정의 파일에는 SQL 확장에서 해당 데이터 저장소에 연결하는 데 필요한 특정 속성과 구성이 포함되어 있습니다. 해당 소스에 대한 연결을 정의하는 방법에 대한 자세한 내용은 해당 섹션을 참조하세요.
+ Amazon Redshift에 대한 AWS Glue 연결을 생성하려면의 샘플 정의 파일을 참조하세요[Amazon Redshift에 대한 AWS Glue 연결 구성](#sagemaker-sql-extension-redshift-glue-connection-config).
+ Amazon Athena에 대한 AWS Glue 연결을 생성하려면의 샘플 정의 파일을 참조하세요[Athena에 대한 AWS Glue 연결 구성](#sagemaker-sql-extension-athena-glue-connection-config).
+ Snowflake에 대한 AWS Glue 연결을 생성하려면의 샘플 정의 파일을 참조하세요[Snowflake에 대한 AWS Glue 연결 구성](#sagemaker-sql-extension-snowflake-glue-connection-config).

### Amazon Redshift에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-redshift-glue-connection-config"></a>

이 섹션에서는 Amazon Redshift에 고유한 JSON 정의 파일의 보안 암호 및 연결 속성에 대한 세부 정보를 제공합니다. 연결 구성 파일을 만들기 전에 Amazon Redshift 액세스 자격 증명을 Secrets Manager에 보안 암호로 저장하는 것이 좋습니다. 또는 AWS Identity and Access Management (IAM) 권한 정책을 통해 부여된 권한을 기반으로 임시 데이터베이스 자격 증명을 생성하여 Amazon Redshift 데이터베이스에 대한 사용자의 액세스를 관리할 수 있습니다. 자세한 내용은 [IAM 인증을 이용한 데이터베이스 사용자 자격 증명 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)을 참조하세요.

#### Amazon Redshift 액세스 자격 증명에 대한 보안 암호 만들기
<a name="sagemaker-sql-extension-redshift-secret"></a>

**AWS Secrets Manager에 Amazon Redshift 정보를 저장하려면**

1.  AWS 콘솔에서 Secrets Manager로 이동합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **보안 암호 유형**에서 **Amazon Redshift에 대한 자격 증명**을 선택합니다.

1. Amazon Redshift 클러스터를 시작할 때 구성된 관리 사용자 이름과 암호를 입력합니다.

1. 보안 암호와 연결된 Amazon Redshift 클러스터를 선택합니다.

1. 보안 암호의 이름을 지정합니다.

1. 나머지 설정은 최초 보안 암호를 만들 때 기본값으로 두거나 필요한 경우 사용자 지정할 수 있습니다.

1. 보안 암호를 만들고 ARN을 검색합니다.

#### Amazon Redshift에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-redshift-glue-connection-creation"></a>

SQL 확장은 사용자 지정 연결을 사용하여 데이터 소스에 AWS Glue 연결합니다. 데이터 소스 연결을 위한 AWS Glue 연결 생성에 대한 일반적인 정보는 섹션을 참조하세요[AWS Glue 연결 생성(관리자용)](#sagemaker-sql-extension-datasources-glue-connection). 다음 예제는 Amazon Redshift에 연결하기 위한 샘플 AWS Glue 연결 정의입니다.

새 연결을 만들기 전에 다음 권장 사항을 염두에 두세요.
+ `PythonProperties` 키 내의 속성은 문자열화된 키-값 페어로 구성됩니다. 키 또는 값에 사용된 큰따옴표를 백슬래시(`\`) 문자로 이스케이프 처리합니다.
+ 연결 정의 파일에 연결의 이름과 설명을 입력하고 `aws_secret_arn`의 보안 암호 ARN을 이전에 만든 보안 암호 ARN으로 바꿉니다.
+ 위의 연결 정의에서 이름으로 선언된 데이터베이스가 클러스터 데이터베이스와 일치하는지 확인합니다. 일치하는지 확인하려면 [Amazon Redshift 콘솔](https://console.aws.amazon.com/redshiftv2/)의 클러스터 세부 정보 페이지로 이동하여 **속성** 섹션의 **데이터베이스 구성**에서 데이터베이스 이름을 확인하면 됩니다.
+ 추가 파라미터는 [Amazon Redshift 연결 파라미터](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-redshift)의 Amazon Redshift에서 지원하는 연결 속성 목록을 참조하세요.
**참고**  
기본적으로 Python용 SQL 확장 커넥터는 연결 속성의 `auto_commit`이 `true`로 설정되지 않은 한 트랜잭션의 모든 쿼리를 실행합니다.
`database` 이름을 포함한 모든 연결 파라미터를 보안 암호에 추가할 수 있습니다.

```
{
  "ConnectionInput": {
      "Name": "Redshift connection name",
      "Description": "Redshift connection description",
      "ConnectionType": "REDSHIFT",
      "ConnectionProperties": {
          "PythonProperties":"{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"database\":\"database_name\", \"database_metadata_current_db_only\": false}"
      }
  }
}
```

정의 파일이 업데이트되면의 단계에 따라 AWS Glue 연결을 [AWS Glue 연결 생성](#sagemaker-sql-extension-datasources-glue-connection-creation) 생성합니다.

### Athena에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-athena-glue-connection-config"></a>

이 섹션에서는 Athena에 고유한 JSON 정의 파일의 연결 속성에 대한 세부 정보를 제공합니다.

#### Athena에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-athena-glue-connection-creation"></a>

SQL 확장은 사용자 지정 연결을 사용하여 데이터 소스에 AWS Glue 연결합니다. 데이터 소스 연결을 위한 AWS Glue 연결 생성에 대한 일반적인 정보는 섹션을 참조하세요[AWS Glue 연결 생성(관리자용)](#sagemaker-sql-extension-datasources-glue-connection). 다음 예제는 Athena에 연결하기 위한 샘플 AWS Glue 연결 정의입니다.

새 연결을 만들기 전에 다음 권장 사항을 염두에 두세요.
+ `ConnectionProperties` 키 내의 속성은 문자열화된 키-값 페어로 구성됩니다. 키 또는 값에 사용된 큰따옴표를 백슬래시(`\`) 문자로 이스케이프 처리합니다.
+ 연결 정의 파일에서 연결의 이름과 설명을 입력하고, `catalog_name`을 카탈로그의 이름으로 바꾸고, `s3_staging_dir`을 Amazon S3 버킷의 출력 디렉터리의 Amazon S3 URI(Uniform Resource Identifier)로 바꾸고, `region_name`을 Amazon S3 버킷의 리전으로 바꿉니다.
+ 추가 파라미터는 [Athena 연결 파라미터](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-athena)의 Athena에서 지원하는 연결 속성 목록을 참조하세요.
**참고**  
`catalog_name` 또는 `s3_staging_dir`을 포함한 모든 연결 파라미터를 보안 암호에 추가할 수 있습니다.
`workgroup`을 지정하는 경우 `s3_staging_dir`은 지정할 필요가 없습니다.

```
{
    "ConnectionInput": {
        "Name": "Athena connection name",
        "Description": "Athena connection description",
        "ConnectionType": "ATHENA",
        "ConnectionProperties": {
            "PythonProperties": "{\"catalog_name\": \"catalog_name\",\"s3_staging_dir\": \"s3://amzn-s3-demo-bucket_in_same_region/output_query_results_dir/\", \"region_name\": \"region\"}"
        }
    }
}
```

정의 파일이 업데이트되면의 단계에 따라 AWS Glue 연결을 [AWS Glue 연결 생성](#sagemaker-sql-extension-datasources-glue-connection-creation) 생성합니다.

### Snowflake에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-snowflake-glue-connection-config"></a>

이 섹션에서는 Snowflake에 고유한 JSON 정의 파일의 보안 암호 및 연결 속성에 대한 세부 정보를 제공합니다. 연결 구성 파일을 만들기 전에 Snowflake 액세스 자격 증명을 Secrets Manager에 보안 암호로 저장하는 것이 좋습니다.

#### Snowflake 액세스 자격 증명에 대한 보안 암호 만들기
<a name="sagemaker-sql-extension-snowflake-secret"></a>

**Secrets Manager에 Amazon Redshift 정보를 저장하는 방법**

1.  AWS 콘솔에서 로 이동합니다 AWS Secrets Manager.

1. **새 보안 암호 저장**을 선택합니다.

1. **암호 유형**에서 **다른 보안 암호 유형**을 선택합니다.

1. 키-값 페어에서 **일반 텍스트**를 선택한 후, 다음 JSON 콘텐츠를 복사합니다. `user`, `password` 및 `account`를 실제 값으로 바꿉니다.

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 보안 암호의 이름을 지정합니다.

1. 나머지 설정은 최초 보안 암호를 만들 때 기본값으로 두거나 필요한 경우 사용자 지정할 수 있습니다.

1. 보안 암호를 만들고 ARN을 검색합니다.

#### Snowflake에 대한 AWS Glue 연결 구성
<a name="sagemaker-sql-extension-snowflake-glue-connection-creation"></a>

SQL 확장은 사용자 지정 연결을 사용하여 데이터 소스에 AWS Glue 연결합니다. 데이터 소스 연결을 위한 AWS Glue 연결 생성에 대한 일반적인 정보는 섹션을 참조하세요[AWS Glue 연결 생성(관리자용)](#sagemaker-sql-extension-datasources-glue-connection). 다음 예제는 Snowflake에 연결하기 위한 샘플 AWS Glue 연결 정의입니다.

새 연결을 만들기 전에 다음 권장 사항을 염두에 두세요.
+ `ConnectionProperties` 키 내의 속성은 문자열화된 키-값 페어로 구성됩니다. 키 또는 값에 사용된 큰따옴표를 백슬래시(`\`) 문자로 이스케이프 처리합니다.
+ 연결 정의 파일에 연결의 이름과 설명을 입력하고 `aws_secret_arn`의 보안 암호 ARN을 이전에 만든 보안 암호 ARN과 `account`의 계정 ID로 바꿉니다.
+ 추가 파라미터는 [Snowflake 연결 파라미터](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-snowflake)의 Snowflake에서 지원하는 연결 속성 목록을 참조하세요.
**참고**  
`account`를 포함한 모든 연결 파라미터를 보안 암호에 추가할 수 있습니다.

```
{
    "ConnectionInput": {
        "Name": "Snowflake connection name",
        "Description": "Snowflake connection description",
        "ConnectionType": "SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties":  "{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"account\":\"account_id\"}"}"
        }
    }
}
```

정의 파일이 업데이트되면의 단계에 따라 AWS Glue 연결을 [AWS Glue 연결 생성](#sagemaker-sql-extension-datasources-glue-connection-creation) 생성합니다.

## AWS Glue 연결 생성
<a name="sagemaker-sql-extension-datasources-glue-connection-creation"></a>

를 통해 AWS Glue 연결을 생성하려면 연결 정의 파일을 AWS CLI사용하고이 AWS CLI 명령을 실행합니다. `region` 자리 표시자를 AWS 리전 이름으로 바꾸고 정의 파일의 로컬 경로를 제공합니다.

**참고**  
구성 정의 파일의 경로 앞에 `file://`가 와야 합니다.

```
aws --region region glue create-connection --cli-input-json file://path_to_file/sagemaker-sql-connection.json
```

다음 명령을 실행하여 AWS Glue 연결이 생성되었는지 확인하고 연결 이름을 확인합니다.

```
aws --region region glue get-connections
```

또는 다음과 같이 기존 AWS Glue 연결을 업데이트할 수 있습니다.
+ 필요에 따라 AWS Glue 연결 정의 파일을 수정합니다.
+ 다음 명령을 실행하여 연결을 업데이트합니다.

  ```
  aws --region region glue update-connection --name glue_connection_name --cli-input-json file://path_to_file/sagemaker-sql-connection.json
  ```

# 사용자 정의 AWS Glue 연결 생성
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined"></a>

**참고**  
SQL 확장 UI를 통해 사용자가 생성한 모든 AWS Glue 연결에는 다음과 같은 태그가 자동으로 지정됩니다.  
`UserProfile: user-profile-name`
`AppType: "JL"`
SQL 확장 UI를 통해 생성된 AWS Glue 연결에 적용되는 태그는 두 가지 용도로 사용됩니다. `"UserProfile": user-profile-name` 태그를 사용하면 AWS Glue 연결을 생성한 특정 사용자 프로필을 식별할 수 있으므로 연결을 담당하는 사용자에게 가시성을 제공할 수 있습니다. `"AppType": "JL"` 태그는 연결의 출처를 분류하여 JupyterLab 애플리케이션과 연결합니다. 이렇게 하면 이러한 연결을 AWS CLI등 다른 수단을 통해 생성되었을 수 있는 연결과 구별할 수 있습니다.

## 사전 조건
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-prerequisites"></a>

SQL 확장 UI를 사용하여 AWS Glue 연결을 생성하기 전에 다음 작업을 완료했는지 확인합니다.
+ 관리자에게 다음을 요청합니다.
  + Studio 도메인과 연결하려는 데이터 소스 간의 네트워크 통신을 활성화합니다. 네트워킹 요구 사항에 대한 자세한 내용은 [Studio와 데이터 소스 간의 네트워크 액세스 구성(관리자용)](sagemaker-sql-extension-networking.md) 섹션을 참조하세요.
  + Secrets Manager에 대한 AWS Glue 연결 및 액세스를 관리하는 데 필요한 IAM 권한이 설정되어 있는지 확인합니다. 필요한 권한에 대해 알아보려면 [데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)](sagemaker-sql-extension-datasources-connection-permissions.md) 섹션을 참조하세요.
**참고**  
관리자는 JupyterLab 애플리케이션 내에서 사용자가 생성한 연결로만 사용자 액세스를 제한할 수 있습니다. 이는 사용자 프로필로 범위가 축소된 [태그 기반 액세스 제어](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-sql-extension-datasources-connection-permissions.html#user-defined-connections-permissions)를 구성하여 수행할 수 있습니다.
+ 연결 속성 및 지침을 확인하여 [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md)에서 데이터 소스에 대한 보안 암호를 생성합니다.

## 사용자 워크플로
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-steps"></a>

다음 단계는 사용자 연결을 생성할 때 사용자 워크플로를 제공합니다.

1. **데이터 소스 유형 선택**: *새 연결 추가* 아이콘을 선택하면 양식이 열리고 Amazon Redshift, Athena 또는 Snowflake 등 연결하려는 데이터 소스 유형을 선택하라는 메시지가 표시됩니다.

1. **연결 속성 제공**: 선택한 데이터 소스를 기반으로 관련 연결 속성이 동적으로 로드됩니다. 양식은 선택한 데이터 소스에 대해 필수 또는 선택 사항인 필드를 나타냅니다. 데이터 소스에 사용 가능한 속성에 대한 자세한 내용은 [연결 파라미터](sagemaker-sql-extension-connection-properties.md) 섹션을 참조하세요.

1. ** AWS Secrets Manager ARN 선택**: Amazon Redshift 및 Snowflake 데이터 소스의 경우 사용자 이름 및 암호와 같은 민감한 정보를 저장하는 AWS Secrets Manager ARN을 선택하라는 메시지가 표시됩니다. 데이터 소스의 보안 암호 생성에 대한 자세한 내용은 [Secrets Manager에서 데이터베이스 액세스 자격 증명을 위한 보안 암호 생성](sagemaker-sql-extension-glue-connection-secrets.md) 섹션을 참조하세요.

1. **연결 세부 정보 저장**: **생성**을 클릭하면 제공된 연결 속성이 AWS Glue 연결로 저장됩니다.

1. **연결 테스트**: 연결에 성공하면 연결된 데이터베이스와 테이블이 탐색기에 표시됩니다. 연결이 실패하면 사용자에게 연결 세부 정보를 검토하고 수정하라는 오류 메시지가 표시됩니다.

1. **SQL 확장 기능 숙지**: 확장의 기능에 대해 알아보려면 [SQL 확장 기능 및 사용](sagemaker-sql-extension-features.md) 섹션을 참조하세요.

1. **(선택 사항) 사용자 생성 연결 업데이트 또는 삭제**: 사용자에게 필요한 권한이 부여된 경우 사용자가 생성한 연결을 업데이트하거나 삭제할 수 있습니다. 필요한 권한에 대해 알아보려면 [IAM 권한이 필요한 사용자 정의 연결](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions) 섹션을 참조하세요.

# 데이터 소스에 액세스할 수 있는 IAM 권한 설정(관리자용)
<a name="sagemaker-sql-extension-datasources-connection-permissions"></a>

관리자는 JupyterLab 애플리케이션에서 사용하는 실행 역할에 구성된 AWS Glue 연결을 통해 데이터에 액세스하는 데 필요한 AWS IAM 권한이 있는지 확인해야 합니다.
+ **를 사용하여 관리자가 생성한 연결 AWS CLI**: [관리자가 생성한](sagemaker-sql-extension-datasources-glue-connection.md) AWS Glue 연결을 보고 데이터에 액세스하려면 관리자가 Studio의 JupyterLab 애플리케이션에서 사용하는 SageMaker AI 실행 역할에 특정 권한을 연결하도록 해야 합니다. 여기에는에 대한 액세스 AWS Glue, Secrets Manager 및 데이터베이스별 권한이 포함됩니다. 관리자가 생성한 연결은 특정 AWS Glue 카탈로그 또는 데이터베이스를 볼 수 있는 권한이 부여된 실행 역할을 공유하는 모든 애플리케이션에 표시됩니다. 데이터 소스 유형별 필수 권한 목록에 대한 자세한 내용은 [IAM 권한이 필요한 관리자 정의 연결](#admin-defined-connections-permissions)의 관리자 정의 연결 권한을 참조하세요.
+ **JupyterLab에서 SQL 확장 UI를 사용하여 사용자가 생성한 연결**: 실행 역할이 동일한 [사용자 프로필에서 생성](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)한 연결도 나열됩니다. 단, 연결 표시 범위를 사용자가 생성한 연결로만 제한한 경우는 예외입니다. 사용자가 생성한 연결에는 해당 연결을 생성한 사용자 프로필로 태그가 지정됩니다. 사용자가 생성한 연결을 확인, 업데이트 또는 삭제하는 권한을 생성한 사용자로만 제한하기 위해 관리자는 실행 역할 IAM 권한에 태그 기반 액세스 제어 제한을 추가할 수 있습니다. 필요한 추가 태그 기반 액세스 제어에 대한 자세한 내용은 [IAM 권한이 필요한 사용자 정의 연결](#user-defined-connections-permissions) 섹션을 참조하세요.

## IAM 권한이 필요한 관리자 정의 연결
<a name="admin-defined-connections-permissions"></a>

연결을 통해 Studio의 JupyterLab 애플리케이션에서 사용하는 SageMaker AI 실행 역할에 데이터 소스에 대한 액세스 권한을 부여하려면 역할에 다음 인라인 정책을 AWS Glue 연결합니다.

각 데이터 소스 또는 인증 방법에 대한 특정 권한 및 정책 세부 정보를 보려면 아래에서 관련 연결 유형을 선택합니다.

**참고**  
정책의 권한을 필요한 리소스 및 작업으로만 제한하는 것이 좋습니다.  
정책의 범위를 줄이고 최소 권한 액세스를 부여하려면 정책의 와일드카드(`"Resource": ["*"]`)를 액세스가 필요한 정확한 리소스에 대한 특정 ARN으로 바꿉니다. 리소스의 액세스를 제어하는 방법에 대한 자세한 내용은 [세분화된 ARN 권한으로 AWS 리소스 액세스 미세 조정](#resource-access-control) 섹션을 참조하세요.

### 모든 연결 유형
<a name="datasources-connection-permissions-all"></a>

**참고**  
이 정책을 필요한 작업과 리소스로만 축소하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:glue:us-east-1:111122223333:catalog",
    "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-1:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name"
            ]
        }
    ]
}
```

------

### 아테나
<a name="datasources-connection-permissions-athena"></a>

**참고**  
이 정책을 필요한 리소스로만 축소하는 것이 좋습니다.

자세한 내용은 [Athena 설명서](https://docs.aws.amazon.com/athena/latest/ug/federated-query-iam-access.html)의 *IAM 권한 정책 예*를 참조하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",                
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteAthenaQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-2:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"       
            ]
        }
    ]
}
```

------

### Amazon Redshift 및 Amazon Redshift Serverless(사용자 이름 및 암호 인증) / Snowflake
<a name="datasources-connection-permissions-snowflake-redshift-user-password"></a>

**참고**  
이 정책을 필요한 리소스로만 축소하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"            
            ]
        }
    ]
}
```

------

### Amazon Redshift(IAM 인증)
<a name="datasources-connection-permissions-redshift-iam"></a>

**참고**  
이 정책을 필요한 리소스로만 축소하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*",
                "arn:aws:glue:us-east-1:111122223333:connection/connection-name"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name",
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-with-suffix"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name",
                "arn:aws:redshift:us-east-1:111122223333:dbuser:cluster-name/db-user-name"
            ]
        }
    ]
}
```

------

### Amazon Redshift serverless(IAM 인증)
<a name="datasources-connection-permissions-redshift-serverless-iam"></a>

**참고**  
이 정책을 필요한 리소스로만 축소하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"         
            ]
        },
        {
            "Sid": "GetRedshiftServerlessCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetCredentials"
            ],
            "Resource": [
                "arn:aws:redshift-serverless:us-east-2:111122223333:namespace/namespace-id"           
            ]
        }
    ]
}
```

------

## IAM 권한이 필요한 사용자 정의 연결
<a name="user-defined-connections-permissions"></a>

사용자의 IAM 정책 권한은 AWS Glue 연결 리소스에 `UserProfile` 태그가 있음을 설명할 수 있습니다.
+ ** AWS Glue 연결을 보는 경우**:
  + 사용자는 `UserProfile` 태그가 없는 모든 연결을 볼 수 있습니다(관리자가 생성).
  + 사용자는 사용자 프로필 이름과 값이 같은 `UserProfile` 태그가 있는 연결을 볼 수 있습니다.
  + 사용자는 사용자 프로필 이름과 값이 다른 `UserProfile` 태그가 있는 연결을 볼 수 없습니다.
+ ** AWS Glue 연결을 업데이트하거나 삭제하는 경우**:
  + 사용자는 사용자 프로필 이름과 값이 같은 `UserProfile` 태그가 있는 연결을 업데이트하거나 삭제할 수 있습니다.
  + 사용자는 사용자 프로필 이름과 값이 다른 `UserProfile` 태그가 있는 연결을 업데이트하거나 삭제할 수 있습니다.
  + 사용자는 `UserProfile` 태그가 없는 연결을 업데이트하거나 삭제할 수 없습니다.

이를 위해 관리자는 사용자 프로필의 JupyterLab 애플리케이션에서 사용하는 실행 역할에 기존 [관리자 정의 연결 권한](#admin-defined-connections-permissions) 이외의 추가 권한을 부여해야 합니다. 특히 관리자 정의 AWS Glue 연결에 액세스하는 데 필요한 권한 외에도 다음 두 가지 추가 IAM 권한을 사용자의 실행 역할에 부여해야 합니다.
+  AWS Glue 연결을 생성하고 `UserProfile` 태그를 사용자 프로필 이름의 값과 연결할 수 있는 권한입니다.
+ `UserProfile` 태그가 사용자의 프로필 이름과 일치하는 AWS Glue 연결을 보고, 업데이트하고, 삭제할 수 있는 권한.

이 권한은 특정 사용자 프로필 태그 값에 따라 AWS Glue 연결에 대한 액세스를 제한합니다. 대상으로 지정하려는 사용자의 프로필 이름으로 `UserProfile` 태그 값을 업데이트하세요.

```
"Action": [
    "glue:GetConnection",
    "glue:GetConnections"    
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEqualsIfExists": {
        "aws:ResourceTag/UserProfile": "user_profile_name"
    }
}
```

이 권한은 사용자가 생성한 연결을 생성, 업데이트 및 삭제하는 권한을 지정된 `UserProfile` 태그 값을 가진 사용자 프로필에서 생성한 연결로만 제한합니다.

```
"Action": [
    "glue:DeleteConnection",
    "glue:UpdateConnection",
    "glue:CreateConnection",
    "glue:TagResource"
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEquals": {
        "aws:ResourceTag/UserProfile": "user_profile"
    }
}
```

## 세분화된 ARN 권한으로 AWS 리소스 액세스 미세 조정
<a name="resource-access-control"></a>

 AWS 리소스에 대한 액세스를 더 세밀하게 제어하려면 `"Resource": ["*"]` 정책의 와일드카드 리소스를 액세스가 필요한 리소스의 특정 Amazon 리소스 이름(ARNs)으로 바꿉니다. 와일드카드 대신 정확한 ARN을 사용하면 의도한 리소스에 대한 액세스가 제한됩니다.
+ **특정 Amazon S3 버킷 ARN 사용**

  예를 들어 버킷 수준 또는 객체 수준 작업의 경우 `"arn:aws:s3:::bucket-name"` 또는 ` "arn:aws:s3:::bucket-name/*"`입니다.

  Amazon S3의 모든 리소스 유형에 대한 자세한 내용은 [Amazon S3에서 정의한 리소스 유형](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)을 참조하세요.
+ **특정 AWS Glue 데이터베이스 ARNs 사용**

  예를 들면 ` "arn:aws:glue:region:account-id:catalog"` 또는 ` "arn:aws:glue:region:account-id:database/db-name"`입니다. 의 모든 리소스 유형에 대한 자세한 내용은에서 [정의한 리소스 유형을 AWS Glue](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies) AWS Glue참조하세요.
+ **특정 Athena 작업 그룹 ARN 사용**

  예: `"arn:aws:athena:region:account-id:workgroup/workgroup-name"`. Athena의 모든 리소스 유형에 대한 자세한 내용은 [Athena에서 정의한 리소스 유형](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html#amazonathena-resources-for-iam-policies)을 참조하세요.
+ **특정 AWS Secrets Manager 보안 암호 ARNs 사용**

  예: `"arn:aws:secretsmanager:region:account-id:secret:secret-name"`. AWS Secrets Manager의 모든 리소스 유형에 대한 자세한 내용은 [AWS Secrets Manager에서 정의한 리소스 유형을 참조하세요](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecretsmanager.html#awssecretsmanager-resources-for-iam-policies).
+ **특정 Amazon Redshift 클러스터 ARN 사용**

  예: `"arn:aws:redshift:region:account-id:cluster:cluster-name"`. Redshift의 리소스 유형에 대한 자세한 내용은 [Amazon Redshift에서 정의한 리소스 유형](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-resources-for-iam-policies)을 참조하세요. Redshift Serverless의 모든 리소스 유형에 대한 자세한 내용은 [Redshift Serverless에서 정의한 리소스 유형](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html#amazonredshiftserverless-resources-for-iam-policies)을 참조하세요.

# 자주 묻는 질문(FAQ)
<a name="sagemaker-sql-extension-faqs"></a>

다음 FAQ에서는 JupyterLab의 SQL 확장에 대한 일반적인 질문에 대해 답합니다.

## Q: SQL 확장에 대한 로그는 어디에서 찾을 수 있나요?
<a name="sagemaker-sql-extension-faqs-0"></a>

A: SQL 확장은 Studio에서 JupyterLab 애플리케이션의 일반 로그 파일에 로그를 기록합니다. 이러한 로그는 `/var/log/apps/app_container.log`에서 찾을 수 있습니다.

## Q: 'UsageError: 셀 매직 `%%sm\$1sql` 찾을 수 없음'이라는 오류가 발생합니다.
<a name="sagemaker-sql-extension-faqs-1"></a>

A: 새 셀을 만들고 `%load_ext amazon_sagemaker_sql_magic`을 사용하여 확장을 다시 로드하세요.

## Q: `%%sm_sql` 명령의 다양한 파라미터를 나열하려면 어떻게 해야 하나요?
<a name="sagemaker-sql-extension-faqs-2"></a>

A: `%%sm_sql?`을 사용하여 명령의 도움말 콘텐츠를 가져옵니다.

## Q: 오른쪽 패널에서 데이터 검색 보기를 볼 수 없습니다.
<a name="sagemaker-sql-extension-faqs-3"></a>

A: 공간이 SageMaker 배포 이미지 버전 1.6 이상을 사용하는지 확인하세요. 이러한 SageMaker 이미지는 확장과 함께 사전 설치됩니다.

Studio에서 JupyterLab 애플리케이션 공간의 이미지를 업데이트한 경우 브라우저를 새로 고치세요.

## Q: 오른쪽 패널은 구성된 AWS Glue 연결을 정확하게 반영하지 않습니다.
<a name="sagemaker-sql-extension-faqs-4"></a>

A: 노트북의 SQL 확장 UI 오른쪽 하단 모서리에 있는 **새로 고침** 버튼을 사용하여 오른쪽 패널을 새로 고치세요.

## Q: SQL 문이 예상대로 실행되지 않거나 잘못 실행됩니다.
<a name="sagemaker-sql-extension-faqs-5"></a>

A: `%sm_sql_manage --clear-cached-connections` 매직 명령을 실행하여 캐싱된 연결을 지워보세요.

## Q: '실제 문 개수 2개가 바람직한 문 개수 1개와 일치하지 않습니다.'라는 오류가 발생합니다.
<a name="sagemaker-sql-extension-faqs-6"></a>

A: SQL 확장은 한 번에 하나의 SQL 쿼리 실행만 지원합니다.

## Snowflake FAQ
<a name="sagemaker-sql-extension-faqs-snowflake"></a>

다음 FAQ에서는 Snowflake를 데이터 소스로 사용하는 SQL 확장 사용자를 위해 일반적인 질문에 답합니다.

### Q: '현재 세션에서 활성 웨어하우스를 선택하지 않았습니다. "use warehouse" 명령을 사용하여 활성 웨어하우스를 선택하세요'라는 오류가 발생합니다.
<a name="sagemaker-sql-extension-faqs-snowflake-1"></a>

A: 사용자의 기본 웨어하우스를 선택하지 않은 경우 발생할 수 있습니다. 각 세션에 대해 `USE WAREHOUSE warehouse_name` 명령을 실행하세요.

### Q: '객체 "*foo*"가 존재하지 않거나 승인되지 않았습니다.'라는 오류가 발생합니다.
<a name="sagemaker-sql-extension-faqs-snowflake-2"></a>

A: Snowflake 사용자가 지정된 객체에 액세스할 수 있는지 확인하세요.

# 연결 파라미터
<a name="sagemaker-sql-extension-connection-properties"></a>

다음 표에는 데이터 스토어당 AWS Glue 연결에 대해 지원되는 Python 속성이 자세히 나와 있습니다.

## Amazon Redshift 연결 파라미터
<a name="sagemaker-sql-extension-connection-properties-redshift"></a>

다음 Python 연결 파라미터는 Amazon Redshift에 대한 AWS Glue 연결에서 지원됩니다.


| Key(키) | Type | 설명 | 제약 조건 | 필수 | 
| --- | --- | --- | --- | --- | 
| auto\$1create | 유형: boolean | 사용자가 없는 경우 사용자를 만들어야 하는지를 나타냅니다. 기본값은 false입니다. | true, false | 아니요 | 
| aws\$1secret\$1arn | 유형: string | 연결에 대한 추가 파라미터를 검색하는 데 사용되는 보안 암호의 ARN입니다. | 유효한 ARN | 아니요 | 
| cluster\$1identifier | 유형: string - maxLength: 63 | Amazon Redshift 클러스터의 클러스터 식별자입니다. | ^(?\$1.\$1—)[a-z][a-z0-9-]\$10,61\$1[a-z0-9]\$1 | 아니요 | 
| database | 유형: string - maxLength: 127 | 연결할 데이터베이스의 이름입니다. |  | 아니요 | 
| database\$1metadata\$1current\$1db\$1only | 유형: boolean | 애플리케이션이 다중 데이터베이스 데이터 공유 카탈로그를 지원하는지를 나타냅니다. 애플리케이션이 이전 버전과의 호환성을 위해 다중 데이터베이스 데이터 공유 카탈로그를 지원하지 않음을 나타내는 기본값은 true입니다. | true, false | 아니요 | 
| db\$1groups | 유형: string | db\$1user가 현재 세션에 대해 조인하는 기존 데이터베이스 그룹 이름을 쉼표로 구분한 목록입니다. |  | 아니요 | 
| db\$1user | 유형: string | Amazon Redshift에 사용할 사용자 ID입니다. |  | 아니요 | 
| host | 유형: string - maxLength: 256 | Amazon Redshift 클러스터의 호스트 이름입니다. |  | 아니요 | 
| iam | 유형: boolean | 연결에 대한 IAM 기반 인증을 활성화 또는 비활성화하는 플래그입니다. 기본값은 false입니다. | true, false | 아니요 | 
| iam\$1disable\$1cache | 유형: boolean | 이 옵션은 IAM 자격 증명이 캐시되는지 여부를 지정합니다. 기본값은 true입니다. API 게이트웨이에 대한 요청이 제한될 때 성능이 향상됩니다. | true, false | 아니요 | 
| max\$1prepared\$1statements | 유형: integer | 한 번에 열 수 있는 준비된 문의 최대 개수입니다. |  | 아니요 | 
| numeric\$1to\$1float | 소수를 부동소수점으로 | NUMERIC 데이터 유형 값을 소수에서 변환할지를 지정합니다. 기본적으로 NUMERIC 값은 decimal.Decimal Python 객체로 수신됩니다. 결과가 반올림될 수 있으므로 높은 정밀도를 선호하는 사용 사례에는 이 옵션을 활성화하지 않는 것이 좋습니다. 이 옵션을 활성화하기 전에 [https://docs.python.org/3/library/decimal.html#decimal-objects](https://docs.python.org/3/library/decimal.html#decimal-objects)의 Python 설명서를 참조하여 decimal.Decimal과 float의 장단점을 이해하세요. 기본값은 false입니다. | true, false | 아니요 | 
| port | 유형: integer | Amazon Redshift 클러스터의 포트 번호입니다. | 범위 1150\$165535 | 아니요 | 
| profile | 유형: string - maxLength: 256 |  AWS CLI에서 사용하는 자격 증명 및 설정이 포함된 프로필의 이름입니다. |  | 아니요 | 
| region | 유형: string | 클러스터가 위치한 AWS 리전입니다. | 유효한 AWS 리전 | 아니요 | 
| serverless\$1acct\$1id | 유형: string - maxLength: 256 | Amazon Redshift 서버리스 리소스와 연결된 AWS 계정 ID입니다. |  | 아니요 | 
| serverless\$1work\$1group | 유형: string - maxLength: 256 | Amazon Redshift 서버리스 엔드포인트의 작업 그룹 이름입니다. |  | 아니요 | 
| ssl | 유형: boolean | SSL이 활성화된 경우 true입니다. | true, false | 아니요 | 
| ssl\$1mode | 유형: enum[verify-ca, verify-full, null]) | Amazon Redshift에 대한 연결의 보안입니다. verify-ca(SSL을 사용하고 서버 인증서를 확인해야 함) 및 verify-full(SSL을 사용해야 함. 서버 인증서를 확인해야 하며 서버 호스트 이름이 인증서의 호스트 이름 속성과 일치해야 함)가 지원됩니다. 자세한 내용은 Amazon Redshift 설명서의 [연결을 위한 보안 옵션 구성](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-ssl-support.html)을 참조하세요. 기본값은 verify-ca입니다. | verify-ca, verify-full | 아니요 | 
| timeout | 유형: integer | 서버 연결 시간이 초과되기까지의 시간(초)입니다. | 0 | 아니요 | 

## Athena 연결 파라미터
<a name="sagemaker-sql-extension-connection-properties-athena"></a>

다음 Python 연결 파라미터는 Athena에 대한 AWS Glue 연결에서 지원됩니다.


| Key(키) | Type | 설명 | 제약 조건 | 필수 | 
| --- | --- | --- | --- | --- | 
| aws\$1access\$1key\$1id | 유형: string - maxLength: 256 | IAM 계정과 연결된 AWS 액세스 키를 지정합니다. 이 정보는 aws\$1secret에 저장하는 것이 좋습니다. | 길이 16\$1128 | 아니요 | 
| aws\$1secret\$1access\$1key | 유형: string - maxLength: 256 |  AWS 액세스 키의 보안 암호 부분입니다. 이 정보는 aws\$1secret에 저장하는 것이 좋습니다. |  | 아니요 | 
| aws\$1secret\$1arn | 유형: string | 연결에 대한 추가 파라미터를 검색하는 데 사용되는 보안 암호의 ARN입니다. | 유효한 ARN | 아니요 | 
| catalog\$1name | 유형: string - maxLength: 256 | 드라이버로 액세스하는 데이터베이스와 테이블이 들어 있는 카탈로그입니다. 카탈로그에 대한 자세한 내용은 [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html)를 참조하세요. |  | 아니요 | 
| duration\$1seconds | 유형: number | 역할 세션 지속 시간(초)입니다. 이 설정에는 1\$112시간의 값을 지정할 수 있습니다. 기본적으로 기간은 3,600초(1시간)로 설정됩니다. | 범위는 900초(15분)에서 해당 역할에 대한 최대 세션 기간 설정까지일 수 있습니다. | 아니요 | 
| encryption\$1option | 유형: enum[SSE\$1S3, SSE\$1KMS, CSE\$1KMS, null]) | Amazon S3의 저장 중 암호화입니다. [Athena 가이드](https://docs.aws.amazon.com/athena/latest/ug/encryption.html)의 저장 중 암호화 섹션을 참조하세요. | SSE\$1S3, SSE\$1KMS, CSE\$1KMS | 아니요 | 
| kms\$1key | 유형: string - maxLength: 256 | AWS KMS CSE\$1KMS에서를 사용하는 경우 키입니다encrytion\$1option. |  | 아니요 | 
| poll\$1interval | 유형: number | Athena에서 쿼리 결과의 상태를 폴링하는 초 단위 간격입니다. |  | 아니요 | 
| profile\$1name | 유형: string - maxLength: 256 | Athena에 대한 요청을 인증하는 데 자격 증명을 사용해야 하는 AWS 구성 프로필의 이름입니다. |  | 아니요 | 
| region\$1name | 유형: string | 쿼리가 실행되는 AWS 리전입니다. | 유효한 AWS 리전 | 아니요 | 
| result\$1reuse\$1enable | 유형: boolean | 이전 쿼리 결과의 재사용을 활성화합니다. | true, false | 아니요 | 
| result\$1reuse\$1minutes | 유형: integer | Athena에서 재사용을 고려해야 하는 이전 쿼리 결과의 최대 수명(분)을 지정합니다. 기본값은 60입니다. | >= 1 | 아니요 | 
| role\$1arn | 유형: string | 쿼리를 실행하는 데 사용할 역할입니다. | 유효한 ARN | 아니요 | 
| schema\$1name | 유형: string - maxLength: 256 | 데이터베이스에 사용할 기본 스키마의 이름입니다. |  | 아니요 | 
| s3\$1staging\$1dir | 유형: string - maxLength: 1024 | 쿼리 결과가 저장되는 Amazon S3의 위치입니다. |  | s3\$1staging\$1dir 또는 work\$1group은 필수입니다. | 
| work\$1group | 유형: string | 쿼리가 실행될 작업 그룹입니다. 작업 그룹에 대한 자세한 내용은 [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)을 참조하세요. | ^[a-zA-Z0-9.\$1-]\$11,128\$1\$1 | s3\$1staging\$1dir 또는 work\$1group은 필수입니다. | 

## Snowflake 연결 파라미터
<a name="sagemaker-sql-extension-connection-properties-snowflake"></a>

다음 Python 연결 파라미터는 Snowflake에 대한 AWS Glue 연결에서 지원됩니다.

Snowflake 연결 파라미터


| Key(키) | Type | 설명 | 제약 조건 | 필수 | 
| --- | --- | --- | --- | --- | 
| account | 유형: string - maxLength: 256 | Snowflake 계정 식별자입니다. 계정 식별자에는 snowflakecomputing.com 접미사가 포함되지 않습니다. |  | 예 | 
| arrow\$1number\$1to\$1decimal | 유형: boolean | 기본적으로 False입니다. 즉, NUMBER 열 값은 이중 정밀도 부동 소수점 숫자(float64)로 반환됩니다. fetch\$1pandas\$1all() 및 fetch\$1pandas\$1batches() 메서드를 직접 호출할 때 DECIMAL 열 값을 소수(decimal.Decimal)로 반환하려면 이 값을 True로 설정합니다. | true, false | 아니요 | 
| autocommit | 유형: boolean | Snowflake 파라미터 AUTOCOMMIT을 준수하는 false로 기본 설정됩니다. true 또는 false로 설정하여 세션에서 autocommit 모드를 각각 활성화 또는 비활성화합니다. | true, false | 아니요 | 
| aws\$1secret\$1arn | 유형: string | 연결에 대한 추가 파라미터를 검색하는 데 사용되는 보안 암호의 ARN입니다. | 유효한 ARN | 아니요 | 
| client\$1prefetch\$1threads | 유형: integer | 결과 세트를 다운로드하는 데 사용되는 스레드 수입니다(기본적으로 4개). 값을 늘리면 가져오기 성능이 향상되지만 메모리가 더 필요합니다. |  | 아니요 | 
| database | 유형: string - maxLength: 256 | 사용할 기본 데이터베이스의 이름입니다. |  | 아니요 | 
| login\$1timeout | 유형: integer | 로그인 요청에 대한 초 단위 제한 시간입니다. 기본값은 60초입니다. HTTP 응답이 success가 아닌 경우 제한 시간 이후에 로그인 요청을 포기합니다. |  | 아니요 | 
| network\$1timeout | 유형: integer | 그 외 모든 작업에 대한 제한 시간(초)입니다. 기본값은 none(무한)입니다. HTTP 응답이 success가 아닌 경우 제한 시간 이후에 일반 요청을 포기합니다. |  | 아니요 | 
| paramstyle | 유형: string - maxLength: 256 | Python 코드에서 SQL 쿼리를 실행할 때 파라미터 대체에 사용되는 자리 표시자 구문입니다. 클라이언트 측 바인딩의 경우 기본값은 pyformat입니다. 서버 측 바인딩에 대한 바인딩 변수 형식을 변경하려면 qmark 또는 numeric을 지정합니다. |  | 아니요 | 
| role | 유형: string - maxLength: 256 | 사용할 기본 역할의 이름입니다. |  | 아니요 | 
| schema | 유형: string - maxLength: 256 | 데이터베이스에 사용할 기본 스키마의 이름입니다. |  | 아니요 | 
| timezone | 유형: string - maxLength: 128 | 기본적으로 해당 사항이 없습니다. 이는 Snowflake 파라미터 TIMEZONE을 준수하는 것입니다. 세션 시간대를 설정하려면 유효한 시간대(예: America/Los\$1Angeles)로 설정합니다. | America/Los\$1Angeles와 유사한 형식의 시간대 | 아니요 | 
| validate\$1default\$1parameters | 유형: boolean | 지정된 데이터베이스, 스키마 또는 웨어하우스가 없는 경우 예외를 발생시키려면 true로 설정합니다. 기본값은 false입니다. |  | 아니요 | 
| warehouse | 유형: string - maxLength: 256 | 사용할 기본 웨어하우스의 이름입니다. |  | 아니요 | 

# Studio에서 Amazon EMR Serverless 애플리케이션 또는 Amazon EMR 클러스터를 사용하여 대규모 데이터 준비
<a name="studio-emr-data-preparation"></a>

Amazon SageMaker Studio와 레거시 버전인 Studio Classic은 데이터 과학자와 기계 학습(ML) 엔지니어에게 대규모로 데이터 분석 및 데이터 준비를 수행할 수 있는 도구를 제공합니다. 대량의 데이터를 분석, 변환, 준비하는 것은 모든 데이터 과학 및 ML 워크플로우의 기본 단계입니다. Studio와 Studio Classic 모두 Amazon EMR과의 통합 기능이 기본 제공되어 있으므로 사용자가 JupyterLab 노트북 내에서 대규모 대화형 데이터 준비 및 기계 학습 워크플로를 관리할 수 있습니다.

[Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)은 [Apache Spark](https://aws.amazon.com/emr/features/spark), [Apache Hive](https://aws.amazon.com/emr/features/hive), [Presto](https://aws.amazon.com/emr/features/presto), HBase, Flink 등 AWS 에서 오픈 소스 분석 프레임워크를 사용하여 페타바이트 규모의 분산형 데이터 처리 작업을 실행하는 데 도움이 되는 리소스를 갖춘 관리형 빅 데이터 플랫폼입니다. Studio 및 Studio Classic과 Amazon EMR의 통합을 통해, JupyterLab 노트북이나 Studio Classic 노트북을 떠나지 않고도 Amazon EMR 클러스터를 만들고, 검색하고, 탐색하고, 연결할 수 있습니다. 또한, 노트북 내에서 곧바로 Spark UI에 클릭 한 번으로 액세스하여 Spark 워크로드를 모니터링하고 디버깅할 수 있습니다.

대량의 데이터를 포함하는 대규모, 장기 실행 또는 복잡한 데이터 처리 요구 사항이 있거나, 광범위한 사용자 지정 및 다른 서비스와의 통합이 필요하거나, 사용자 지정 애플리케이션을 실행해야 하거나, Apache Spark 이외의 다양한 분산 데이터 처리 프레임워크를 실행할 계획인 경우 데이터 준비 워크로드에 Amazon EMR 클러스터를 고려해야 합니다.

[SageMaker 배포 이미지](sagemaker-distribution.md) `1.10` 이상을 사용하면 SageMaker AI Studio의 JupyterLab 노트북에서 직접 대화형 [EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html) 애플리케이션에 연결할 수 있습니다. Studio를 EMR Serverless와 통합하면 Amazon EMR 클러스터를 구성, 관리 또는 규모 조정하지 않고도 [Apache Spark](https://aws.amazon.com/emr/features/spark) 및 [Apache Hive](https://aws.amazon.com/emr/features/hive)와 같은 오픈 소스 빅 데이터 분석 프레임워크를 실행할 수 있습니다. EMR Serverless는 EMR Serverless 애플리케이션의 요구 사항에 따라 기본 컴퓨팅 및 메모리 리소스를 자동으로 프로비저닝하고 관리합니다. 리소스를 동적으로 스케일 업 및 스케일 다운하여 애플리케이션에서 사용하는 vCPU, 메모리 및 스토리지 리소스의 양에 대해 비용을 부과합니다. 이 서버리스 접근 방식을 사용하면 클러스터 관리에 대한 걱정 없이 JupyterLab 노트북에서 [대화형 데이터 준비 워크로드를 실행](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/interactive-workloads.html)하는 동시에 인스턴스 사용률과 비용 효율성을 높일 수 있습니다.

워크로드가 수명이 짧거나 간헐적이고 영구 클러스터가 필요하지 않은 경우, 인프라 관리 오버헤드를 피하면서 자동 리소스 프로비저닝 및 종료 기능을 제공하는 서버리스 환경을 선호하는 경우, 대화형 데이터 준비 작업이 주로 Apache Spark를 중심으로 수행되는 경우 대화형 데이터 준비 워크로드에 대해 EMR Serverless를 고려해야 합니다.

**Topics**
+ [Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md)
+ [EMR Serverless를 사용하여 데이터 준비](studio-notebooks-emr-serverless.md)
+ [Amazon EMR을 사용한 데이터 준비](studio-notebooks-emr-cluster.md)

# Amazon EMR 클러스터에 대한 네트워크 액세스 구성
<a name="studio-notebooks-emr-networking"></a>

Studio에서 데이터 준비 작업에 Amazon EMR 또는 EMR Serverless 사용을 시작하기 전에 사용자 또는 관리자가 Studio와 Amazon EMR 간의 통신을 허용하도록 네트워크를 구성했는지 확인하세요. 이 통신이 활성화되면 다음을 수행할 수 있습니다.
+ [EMR Serverless를 사용하여 데이터 준비](studio-notebooks-emr-serverless.md)
+ [Amazon EMR을 사용한 데이터 준비](studio-notebooks-emr-cluster.md)

**참고**  
EMR Serverless 사용자의 경우 가장 간단한 설정 방법은 **가상 프라이빗 클라우드(VPC)** 옵션의 기본 설정을 수정하지 않고 Studio UI에서 애플리케이션을 만드는 것입니다. 이 접근 방식을 사용하면 SageMaker 도메인의 VPC 내에서 애플리케이션을 만들 수 있으므로 추가 네트워킹 구성이 필요하지 않습니다. 이 옵션을 선택하면 다음 네트워킹 설정 섹션을 건너뛸 수 있습니다.

네트워킹 지침은 Studio 및 Amazon EMR이 프라이빗 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)(Amazon VPC) 내에 배포되어 있는지 아니면 인터넷으로 통신하는지에 따라 달라집니다.

기본적으로 Studio 또는 Studio Classic은 [인터넷에 액세스할](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-default) 수 있는 AWS 관리형 VPC에서 실행됩니다. 인터넷 연결을 사용하는 경우 Studio 및 Studio Classic은 인터넷을 통해 Amazon S3 버킷과 같은 AWS 리소스에 액세스합니다. 하지만 데이터 및 작업 컨테이너에 대한 액세스를 제어하기 위한 보안 요구 사항이 있는 경우 인터넷을 통해 데이터와 컨테이너에 액세스할 수 없도록 Studio 또는 Studio Classic 및 Amazon EMR을 구성하는 것이 좋습니다. 리소스에 대한 액세스를 제어하거나 퍼블릭 인터넷 액세스 없이 Studio 또는 Studio Classic을 실행하려면 [Amazon SageMaker AI 도메인](gs-studio-onboard.md)에 온보딩할 때 `VPC only` 네트워크 액세스 유형을 지정할 수 있습니다. 이 시나리오에서는 Studio와 Studio Classic 모두 프라이빗 [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)를 통해 다른 AWS 서비스와의 연결을 설정합니다. `VPC only` 모드에서 Studio 또는 Studio Classic을 구성하는 방법에 대한 자세한 내용은 [Connect SageMaker Studio or Studio Classic notebooks in a VPC to external resources](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-vpc-only)를 확인하세요.

처음 두 섹션에서는 퍼블릭 인터넷 액세스가 없는 VPC에서 Studio 및 Studio Classic과 Amazon EMR 간 통신을 보장하는 방법을 설명합니다. 마지막 섹션에서는 인터넷 연결을 사용하여 Studio 또는 Studio Classic과 Amazon EMR 간 통신을 보장하는 방법을 다룹니다. 인터넷 액세스 없이 Studio 또는 Studio Classic과 Amazon EMR을 연결하기 전에 Amazon Simple Storage Service(데이터 스토리지), Amazon CloudWatch(로깅 및 모니터링) 및 Amazon SageMaker Runtime(세분화된 역할 기반 액세스 제어(RBAC))의 엔드포인트를 설정해야 합니다.

Studio 또는 Studio Classic과 Amazon EMR을 연결하는 방법:
+ Studio 또는 Studio Classic과 Amazon EMR이 동일한 AWS 계정 또는 다른 계정에 있는 별도의 VPCs에 있는 경우 섹션을 참조하세요[서로 다른 VPC에 있는 Studio와 Amazon EMR](#studio-notebooks-emr-networking-requirements-cross-vpc).
+ Studio 또는 Studio Classic과 Amazon EMR이 동일한 VPC에 있는 경우 [동일한 VPC에 있는 Studio와 Amazon EMR](#studio-notebooks-emr-networking-requirements-same-vpc) 섹션을 참조하세요.
+ 퍼블릭 인터넷을 통해 Studio 또는 Studio Classic과 Amazon EMR을 연결하려는 경우 [Studio와 Amazon EMR은 퍼블릭 인터넷을 통해 통신합니다](#studio-notebooks-emr-networking-requirements-internet) 섹션을 참조하세요.

## 서로 다른 VPC에 있는 Studio와 Amazon EMR
<a name="studio-notebooks-emr-networking-requirements-cross-vpc"></a>

Studio 또는 Studio Classic과 Amazon EMR을 서로 다른 VPC에 배포할 때 Studio 또는 Studio Classic과 Amazon EMR 간 통신을 허용하는 방법은 다음과 같습니다.

1. VPC 피어링 연결을 통해 VPC를 연결하여 시작합니다.

1. Studio 또는 Studio Classic 서브넷과 Amazon EMR 서브넷 간 네트워크 트래픽을 양방향으로 라우팅하도록 각 VPC의 라우팅 테이블을 업데이트합니다.

1. 인바운드 및 아웃바운드 트래픽을 허용하도록 보안 그룹을 구성합니다.

Studio 또는 Studio Classic과 Amazon EMR을 연결하는 단계는 리소스가 단일 AWS 계정(단일 계정 사용 사례)에 배포되든 여러 AWS 계정에 배포되든(교차 계정 사용 사례) 동일합니다.

1. 

**VPC 피어링**

   [VPC 피어링 연결](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)을 만들어 두 VPC(Studio 또는 Studio Classic과 Amazon EMR) 간 네트워킹을 용이하게 합니다.

   1. Studio 또는 Studio Classic 계정의 VPC 대시보드에서 **피어링 연결**을 선택한 다음 **피어링 연결 만들기를** 선택합니다.

   1. Amazon EMR VPC와 Studio 또는 Studio Classic VPC를 피어링하는 요청을 만듭니다. 다른 AWS 계정에서 피어링을 요청할 때 **피어링할 다른 VPC 선택에서 다른** **계정을** 선택합니다.

      교차 계정 피어링의 경우 관리자는 Amazon EMR 계정의 요청을 수락해야 합니다.

      프라이빗 서브넷을 피어링할 때는 VPC 피어링 연결 수준에서 프라이빗 IP DNS 확인을 활성화해야 합니다.

1. 

**라우팅 테이블**

   Studio 또는 Studio Classic 서브넷과 Amazon EMR 서브넷 간 네트워크 트래픽을 양방향으로 전송합니다.

   피어링 연결을 설정한 후 관리자(교차 계정 액세스를 위한 각 계정에서)는 프라이빗 서브넷 라우팅 테이블에 경로를 추가하여 Studio 또는 Studio Classic VPC와 Amazon EMR VPC 간 트래픽을 라우팅할 수 있습니다. VPC 대시보드에서 각 VPC의 **라우팅 테이블** 섹션으로 이동하여 이러한 경로를 정의할 수 있습니다.

   Studio VPC 서브넷의 라우팅 테이블을 보여주는 다음 그림은 피어링 연결을 통해 Studio 계정에서 Amazon EMR VPC IP 범위(여기에서는 `2.0.1.0/24`)를 향하는 아웃바운드 경로의 예를 보여줍니다.  
![\[피어링 연결을 통해 Studio 계정에서 Amazon EMR VPC IP 범위(여기에서는 2.0.1.0/24)를 향하는 아웃바운드 경로의 예를 보여주는 Studio VPC 서브넷의 라우팅 테이블\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-return-route.png)

   Amazon EMR VPC 서브넷의 라우팅 테이블을 보여주는 다음 그림은 피어링 연결을 통해 Amazon EMR VPC에서 Studio VPC IP 범위(여기에서는 `10.0.20.0/24`)를 향하는 반환 경로의 예를 보여줍니다.  
![\[피어링 연결을 통해 Amazon EMR 계정에서 Studio VPC IP 범위(여기에서는 10.0.20.0/24)로의 반환 경로를 보여주는 Amazon EMR VPC 서브넷의 라우팅 테이블\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-outbound-route.png)

1. 

**보안 그룹**

   마지막으로 Studio 또는 Studio Classic 도메인의 보안 그룹은 아웃바운드 트래픽을 허용해야 하며 Amazon EMR 프라이머리 노드의 보안 그룹은 Studio 또는 Studio Classic 인스턴스 보안 그룹의 *Apache Livy*, *Hive* 또는 *Presto* TCP 포트(각각`8998`, `10000` 및 `8889`)의 인바운드 트래픽을 허용해야 합니다. [Apache Livy](https://livy.apache.org/)는 REST 인터페이스를 통해 Amazon EMR과 상호 작용을 활성화하는 서비스입니다.

다음 다이어그램은 JupyterLab 또는 Studio Classic 노트북이 Service Catalog의 CloudFormation 템플릿에서 Amazon EMR 클러스터를 프로비저닝한 다음 동일한 AWS 계정 내의 Amazon EMR 클러스터에 연결할 수 있도록 하는 Amazon VPC 설정의 예를 보여줍니다. 이 다이어그램은 VPCs가 인터넷에 액세스할 수 없는 경우 Amazon S3 또는 Amazon CloudWatch와 같은 다양한 AWS 서비스에 직접 연결하는 데 필요한 엔드포인트를 추가로 보여줍니다. 또는 인터넷에 액세스할 때 [NAT 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with)를 사용하여 여러 VPC의 프라이빗 서브넷에 있는 인스턴스가 [인터넷 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)가 제공하는 단일 퍼블릭 IP 주소를 공유할 수 있도록 해야 합니다.

![\[Studio 또는 Studio Classic 노트북이 Service Catalog의 CloudFormation 템플릿에서 Amazon EMR 클러스터를 프로비저닝한 다음 동일한 AWS 계정 내의 Amazon EMR 클러스터에 연결할 수 있는 간단한 Amazon VPC 설정의 예를 보여주는 아키텍처 다이어그램입니다. 이 다이어그램은 VPCs가 인터넷에 액세스할 수 없는 경우 Amazon S3 또는 Amazon CloudWatch와 같은 다양한 AWS 서비스에 직접 연결하는 데 필요한 엔드포인트를 추가로 보여줍니다. 또는 인터넷에 액세스할 때 NAT 게이트웨이를 사용하여 여러 VPC의 프라이빗 서브넷에 있는 인스턴스가 인터넷 게이트웨이가 제공하는 단일 퍼블릭 IP 주소를 공유할 수 있도록 해야 합니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-architecture-singleaccount-vpcendpoints.png)


## 동일한 VPC에 있는 Studio와 Amazon EMR
<a name="studio-notebooks-emr-networking-requirements-same-vpc"></a>

Studio 또는 Studio Classic과 Amazon EMR이 서로 다른 서브넷에 있는 경우 각 프라이빗 서브넷 라우팅 테이블에 경로를 추가하여 Studio 또는 Studio Classic과 Amazon EMR 서브넷 간 트래픽을 라우팅합니다. VPC 대시보드에서 각 VPC의 **라우팅 테이블** 섹션으로 이동하여 이러한 경로를 정의할 수 있습니다. Studio 또는 Studio Classic과 Amazon EMR을 동일한 VPC, 동일한 서브넷에 배포한 경우 Studio 또는 Studio Classic과 Amazon EMR 간 트래픽을 라우팅할 필요가 없습니다.

라우팅 테이블을 업데이트해야 하든 아니든 관계없이 Studio 또는 Studio Classic 도메인의 보안 그룹은 아웃바운드 트래픽을 허용해야 하며 Amazon EMR 프라이머리 노드의 보안 그룹은 Studio 또는 Studio Classic 인스턴스 보안 그룹의 *Apache Livy*, *Hive* 또는 *Presto* TCP 포트(각각`8998`, `10000` 및 `8889`)의 인바운드 트래픽을 허용해야 합니다. [Apache Livy](https://livy.apache.org/)는 REST 인터페이스를 통해 Amazon EMR과 상호 작용을 활성화하는 서비스입니다.

## Studio와 Amazon EMR은 퍼블릭 인터넷을 통해 통신합니다
<a name="studio-notebooks-emr-networking-requirements-internet"></a>

기본적으로 Studio 및 Studio Classic은 SageMaker 도메인과 연결된 VPC의 인터넷 게이트웨이를 통해 인터넷으로 통신할 수 있는 네트워크 인터페이스를 제공합니다. 퍼블릭 인터넷을 통해 Amazon EMR에 연결하기로 선택한 경우 Amazon EMR은 인터넷 게이트웨이로부터 *Apache Livy*, *Hive* 또는 *Presto* TCP 포트 (각각 `8998`, `10000`, 및 `8889`)의 인바운드 트래픽을 수락해야 합니다. [Apache Livy](https://livy.apache.org/)는 REST 인터페이스를 통해 Amazon EMR과 상호 작용을 활성화하는 서비스입니다.

인바운드 트래픽을 허용하는 모든 포트는 잠재적인 보안 취약성을 나타낸다는 점에 유의하세요. 취약점들을 최소한으로 줄일 수 있도록 사용자 지정 보안 그룹을 신중하게 검토하세요. 자세한 내용은 [보안 그룹에서 네트워크 트래픽 제어](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-security-groups.html)를 참조하세요.

또는 [Amazon EMR에서 Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)를 활성화하고 클러스터를 프라이빗 서브넷에 설정하며 [Network Load Balancer(NLB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)를 사용해 클러스터에 액세스하여 보안 그룹을 통해 액세스를 제어하는 특정 포트만 노출하는 방법에 대한 자세한 내용은 [블로그 및 백서](studio-notebooks-emr-resources.md)을 참조하세요.

**참고**  
퍼블릭 인터넷을 통해 Apache Livy 엔드포인트에 연결할 때는 TLS를 사용하여 Studio 또는 Studio Classic과 Amazon EMR 클러스터 간 통신을 보호하는 것이 좋습니다.  
Apache Livy로 HTTPS를 설정하는 방법에 대한 자세한 내용은 [Enabling HTTPS with Apache Livy](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)를 참조하세요. 전송 암호화가 활성화된 Amazon EMR 클러스터를 설정하는 방법에 대한 자세한 내용은 [Providing certificates for encrypting data in transit with Amazon EMR encryption](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-encryption-certificates)을 참조하세요. 또한 [HTTPS를 통해 Amazon EMR 클러스터에 연결](connect-emr-clusters.md#connect-emr-clusters-ssl)에서 지정한 대로 인증서 키에 액세스하도록 Studio 또는 Studio Classic을 구성해야 합니다.

# EMR Serverless를 사용하여 데이터 준비
<a name="studio-notebooks-emr-serverless"></a>

[SageMaker 배포 이미지](sagemaker-distribution.md) 버전부터 `1.10` Amazon SageMaker Studio는 EMR Serverless와 통합됩니다. SageMaker Studio의 JupyterLab 노트북 내에서 데이터 과학자와 데이터 엔지니어는 EMR Serverless 애플리케이션을 검색하고 연결한 다음 대규모 Apache Spark 또는 Apache Hive 워크로드를 대화형으로 탐색, 시각화 및 준비할 수 있습니다. 이 통합을 통해 ML 모델 훈련 및 배포를 준비하기 위해 대규모 대화형 데이터 사전 처리를 수행할 수 있습니다.

특히 [SageMaker AI 배포](https://github.com/aws/sagemaker-distribution/tree/main/build_artifacts/v1) 이미지 버전 `1.10`에 있는 [https://pypi.org/project/sagemaker-studio-analytics-extension/](https://pypi.org/project/sagemaker-studio-analytics-extension/)의 업데이트된 버전은 Apache Livy와 EMR Serverless 간의 통합을 활용하여 JupyterLab 노트북을 통해 Apache Livy 엔드포인트에 연결을 가능하게 합니다. 이 섹션에서는 [EMR Serverless 대화형 애플리케이션](https://docs.aws.amazon.com/EMR-Serverless-UserGuide/interactive-workloads.html)에 대해 이미 지식이 있다고 가정합니다.

**중요**  
Studio를 사용하는 경우 프라이빗 공간에서 시작된 JupyterLab 애플리케이션용 EMR Serverless 애플리케이션만 검색하고 연결할 수 있습니다. EMR Serverless 애플리케이션이 Studio 환경과 동일한 AWS 리전에 있는지 확인합니다.

## 사전 조건
<a name="studio-set-up-emr-serverless-prerequisites"></a>

JupyterLab 노트북에서 EMR Serverless로 대화형 워크로드 실행을 시작하기 전에 다음 사전 조건을 충족해야 합니다.

1. JupyterLab 공간은 SageMaker 배포 이미지 버전 `1.10` 이상을 사용해야 합니다.

1. Amazon EMR 버전 `6.14.0` 이상을 사용하여 EMR Serverless 대화형 애플리케이션을 만듭니다. [Studio에서 EMR Serverless 애플리케이션 만들기](create-emr-serverless-application.md)의 단계에 따라 Studio 사용자 인터페이스에서 EMR Serverless 애플리케이션을 만들 수 있습니다.
**참고**  
가장 간단한 설정을 위해 **가상 프라이빗 클라우드(VPC)** 옵션의 기본 설정을 변경하지 않고 Studio UI에서 EMR Serverless 애플리케이션을 만들 수 있습니다. 이렇게 하면 네트워킹 구성 없이 도메인 VPC 내에서 애플리케이션을 만들 수 있습니다. 이 경우 다음 네트워킹 설정 단계를 건너뛸 수 있습니다.

1. [Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md)의 네트워킹 및 보안 요구 사항을 검토합니다. 특히 다음을 확인합니다.
   + Studio 계정과 EMR Serverless 계정 간에 VPC 피어링 연결을 설정합니다.
   + 두 계정의 프라이빗 서브넷 라우팅 테이블에 경로를 추가합니다.
   + 아웃바운드 트래픽을 허용하도록 Studio 도메인에 연결된 보안 그룹을 설정하고 Studio 인스턴스 보안 그룹의 인바운드 TCP 트래픽을 허용하도록 EMR Serverless 애플리케이션을 실행할 VPC의 보안 그룹을 구성합니다.

1. EMR Serverless에서 대화형 애플리케이션에 액세스하고 SageMaker Studio의 JupyterLab 노트북에서 제출된 워크로드를 실행하려면 특정 권한 및 역할을 할당해야 합니다. 필요한 역할 및 권한에 대한 자세한 내용은 [SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.](studio-emr-serverless-permissions.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#studio-set-up-emr-serverless-prerequisites)
+ [SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.](studio-emr-serverless-permissions.md)
+ [Studio에서 EMR Serverless 애플리케이션 만들기](create-emr-serverless-application.md)
+ [Studio에서 EMR Serverless 애플리케이션에 연결](connect-emr-serverless-application.md)
+ [Studio UI에서 EMR Serverless 애플리케이션 중지 또는 삭제](terminate-emr-serverless-application.md)

# SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.
<a name="studio-emr-serverless-permissions"></a>

이 섹션에서는 Studio와 EMR Serverless 애플리케이션이 동일한 AWS 계정 또는 여러 계정에 배포되는 시나리오를 고려하여 SageMaker Studio에서 EMR Serverless 애플리케이션을 나열하고 연결하는 데 필요한 역할과 권한을 자세히 설명합니다.

필요한 권한을 추가해야 하는 역할은 Studio와 EMR Serverless 애플리케이션이 동일한 AWS 계정(*단일 계정*)에 상주하는지 아니면 별도의 계정(*교차 계정*)에 상주하는지에 따라 달라집니다. 두 가지 유형의 역할이 연관되어 있습니다.
+ 실행 역할:
  + EMR Serverless에서 사용하는 [런타임 실행 역할](https://docs.aws.amazon.com/http://emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults-executionRoleArn)(역할 기반 액세스 제어 역할): EMR Serverless 작업 실행 환경에서 데이터 액세스를 위한 Amazon S3, 로깅을 위한 CloudWatch, 워크로드 요구 사항에 따른 AWS Glue 데이터 카탈로그 또는 기타 서비스에 대한 액세스와 같이 런타임 중에 필요한 다른 AWS 서비스 및 리소스에 액세스하는 데 사용하는 IAM 역할입니다. EMR Serverless 애플리케이션이 실행 중인 계정에서 이러한 역할을 만드는 것이 좋습니다.

    런타임 역할에 대한 자세한 내용은 *EMR Serverless 사용 설명서*에서 [작업 런타임 역할](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)을 참조하세요.
**참고**  
EMR Serverless 애플리케이션에 대한 여러 RBAC 역할을 정의할 수 있습니다. 이러한 역할은 조직 내 다양한 사용자 또는 그룹에 필요한 책임 및 액세스 수준을 기반으로 할 수 있습니다. RBAC 권한에 대한 자세한 내용은 [Amazon EMR Serverless의 보안 모범 사례](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-best-practices.html#security-practice-rbac)를 참조하세요.
  + SageMaker AI 실행 역할: SageMaker AI가 Amazon S3 버킷에서 데이터 읽기, CloudWatch에 로그 쓰기, 워크플로에 필요할 수 있는 다른 AWS 서비스에 액세스와 같은 특정 작업을 수행하도록 허용하는 실행 역할입니다. 또한 SageMaker AI 실행 역할에는 SageMaker AI가 임시 런타임 실행 역할을 EMR Serverless 애플리케이션에 전달할 수 있는 `iam:PassRole`이라는 특수 권한이 있습니다. 이러한 역할은 EMR Serverless 애플리케이션에 실행 중인 다른 AWS 리소스와 상호 작용하는 데 필요한 권한을 부여합니다.
+ 수임 가능한 역할(*서비스 액세스 역할*이라고도 함):
  + 다음은 SageMaker AI의 실행 역할이 EMR Serverless 애플리케이션 관리와 관련된 작업을 수행하기 위해 수임할 수 있는 IAM 역할입니다. 이러한 역할은 EMR Serverless 애플리케이션을 나열, 연결 또는 관리할 때 필요한 권한 및 액세스 정책을 정의합니다. 일반적으로 EMR Serverless 애플리케이션이 SageMaker AI 도메인과 다른 AWS 계정에 있는 교차 계정 시나리오에서 사용됩니다. EMR Serverless 애플리케이션에 대한 전용 IAM 역할을 사용하면 최소 권한 원칙을 따르고 Amazon EMR이 AWS 계정의 다른 리소스를 보호하면서 작업을 실행하는 데 필요한 권한만 갖도록 할 수 있습니다.

이러한 역할을 올바르게 이해하고 구성하면 동일한 계정에 배포되었는지 또는 다른 계정에 배포되었는지에 관계없이 SageMaker Studio가 EMR Serverless 애플리케이션과 상호 작용하는 데 필요한 권한을 가질 수 있습니다.

## 단일 계정
<a name="studio-set-up-emr-serverless-permissions-singleaccount"></a>

다음 다이어그램은 Studio와 애플리케이션이 동일한 AWS 계정에 배포될 때 Studio에서 EMR Serverless 애플리케이션을 나열하고 연결하는 데 필요한 역할과 권한을 보여줍니다.

![\[이 다이어그램은 Studio와 애플리케이션이 동일한 AWS 계정에 있을 때 Studio에서 EMR Serverless 애플리케이션을 나열하고 연결하는 데 필요한 역할과 권한을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-singleaccount.png)


Amazon EMR 애플리케이션과 Studio가 동일한 AWS 계정에 배포된 경우 다음 단계를 따릅니다.

1. **1단계**: [Amazon S3 콘솔](https://console.aws.amazon.com/S3)에서 데이터 소스 및 출력 데이터 스토리지로 사용하는 Amazon S3 버킷의 ARN을 검색합니다.

   이름으로 버킷을 찾는 방법에 대한 자세한 내용은 [Amazon S3 버킷에 액세스 및 나열](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)을 참조하세요. Amazon S3 버킷 만들기에 대한 자세한 내용은 [버킷 만들기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)를 참조하세요.

1. **2단계**: 계정에서 EMR Serverless 애플리케이션에 대한 작업 런타임 실행 역할을 하나 이상 만듭니다(위의 *단일 계정* 사용 사례 다이어그램에서 `EMRServerlessRuntimeExecutionRoleA`). **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다. 작업에 필요한 권한을 추가합니다. 최소한 Amazon S3 버킷에 대한 전체 액세스 권한과 AWS Glue 데이터 카탈로그에 대한 생성 및 읽기 액세스 권한이 필요합니다.

   EMR Serverless 애플리케이션에 대한 새 런타임 실행 역할을 만드는 방법에 대한 자세한 지침은 다음 단계를 따르세요.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. 왼쪽 탐색 창에서 **정책**을 선택한 다음 **정책 만들기**를 선택합니다.

   1. 런타임 역할에 필요한 권한을 추가하고 정책의 이름을 지정한 다음 **정책 만들기**를 선택합니다.

      [EMR Serverless에 대한 작업 런타임 역할](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)을 참조하여 EMR Serverless 런타임 역할에 대한 샘플 런타임 정책을 찾을 수 있습니다.

   1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 만들기**를 선택합니다.

   1. **역할 만들기** 페이지에서 **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다.

   1. **사용자 지정 신뢰 정책** 섹션의 다음 JSON 문서에 붙여 넣은 다음 **다음**을 선택합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. **권한 추가** 페이지에서 만든 정책을 추가하고 **다음**을 선택합니다.

   1. **검토** 페이지에서 역할 이름(예: `EMRServerlessAppRuntimeRoleA`)을 입력하고 선택적으로 설명을 입력합니다.

   1. 역할 세부 정보를 검토하고 **역할 생성**을 선택합니다.

   이 역할을 사용하면 팀원과 함께 동일한 애플리케이션에 연결할 수 있습니다. 각각은 데이터에 대한 개별 액세스 수준에 맞는 권한 범위가 지정된 런타임 역할을 사용합니다.
**참고**  
Spark 세션은 다르게 작동합니다. Spark 세션은 Studio에서 사용되는 실행 역할에 따라 격리되므로 실행 역할이 다른 사용자는 별개의 격리된 Spark 세션을 갖게 됩니다. 또한 도메인에 소스 ID를 활성화한 경우 다른 소스 ID에서 Spark 세션이 추가로 분리됩니다.

1. **3단계**: 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 가져옵니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.
**참고**  
 또는 SageMaker AI를 처음 사용하는 사용자는 적절한 권한으로 새 SageMaker AI 실행 역할을 자동으로 만들어 설정 프로세스를 단순화할 수 있습니다. 이 경우 3단계와 4단계를 건너뜁니다. 대신 사용자는 다음 중 하나를 수행할 수 있습니다.  
[SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker) 왼쪽 탐색의 **도메인** 메뉴에서 새 도메인을 만들 때 **조직용 설정** 옵션을 선택합니다.
콘솔의 **역할 관리자** 메뉴에서 새 실행 역할을 만든 다음 해당 역할을 기존 도메인 또는 사용자 프로필에 연결합니다.
역할을 만들 때 **사용자가 수행할 ML 활동**에서 **Studio EMR Serverless 애플리케이션 실행** 옵션을 선택합니다. 그런 다음 Amazon S3 버킷의 이름과 EMR Serverless 애플리케이션이 사용할 작업 런타임 실행 역할을 입력합니다(2단계).  
SageMaker Role Manager는 EMR Serverless 애플리케이션을 실행하고 새 실행 역할에 연결하는 데 필요한 권한을 자동으로 추가합니다. [SageMaker Role Manager]()를 사용하면 EMR Serverless 애플리케이션에 하나의 런타임 역할만 할당할 수 있으며, Studio 배포된 것과 동일한 계정 내에서 만든 런타임 역할을 사용하여 해당 계정에서 애플리케이션을 실행해야 합니다.

1. **4단계**: EMR Serverless 애플리케이션에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 연결합니다.

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 IAM 콘솔을 엽니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 EMR Serverless 액세스 및 작업을 허용하는 Amazon EMR Serverless 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](#studio-set-up-emr-serverless-permissions-reference)의 *EMR Serverless policies*를 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 *region*, *accountID*, 전달된 *EMRServerlessAppRuntimeRole*을 실제 값으로 바꿉니다.
**참고**  
권한 내에 필요한 만큼 런타임 역할의 ARN 문자열을 포함시켜 쉼표로 구분할 수 있습니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. **인라인 정책 만들기** 단계를 반복하여 도메인, 사용자 프로필 및 공간을 업데이트할 수 있는 역할 권한을 부여하는 다른 인라인 정책을 추가합니다. `SageMakerUpdateResourcesPolicy` 정책 문서에 대한 자세한 내용은 [참조 정책](#studio-set-up-emr-serverless-permissions-reference)의 *도메인, 사용자 프로필 및 공간 업데이트 작업 정책*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 *region*, *accountID*를 실제 값으로 바꿉니다.

1. **5단계**:

   런타임 역할 목록을 사용자 프로필 또는 도메인과 연결하면 역할 목록을 시각적으로 탐색하고 JupyterLab에서 [EMR Serverless 애플리케이션에 연결](connect-emr-serverless-application.md)할 때 사용할 역할을 선택할 수 있습니다. SageMaker AI 콘솔 또는 다음 스크립트를 사용할 수 있습니다. 이후 Studio 노트북에서 만든 모든 Apache Spark 또는 Apache Hive 작업은 선택한 런타임 역할에 첨부된 정책에서 허용하는 데이터 및 리소스에만 액세스합니다.
**중요**  
이 단계를 완료하지 않으면 JupyterLab 노트북을 EMR Serverless 애플리케이션에 연결할 수 없습니다.

------
#### [ SageMaker AI console ]

   SageMaker AI 콘솔을 사용하여 런타임 역할을 사용자 프로필 또는 도메인과 연결하는 방법:

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

   1. 왼쪽 탐색 창에서 **도메인**을 선택한 다음 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 도메인을 선택합니다.

   1. 
      + 도메인에 런타임 역할을 추가하는 방법: **도메인 세부 정보** 페이지의 **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.
      + 사용자 프로필에 런타임 역할을 추가하는 방법: **도메인 세부 정보** 페이지에서 **사용자 프로필** 탭을 선택하고 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 사용자 프로필을 선택합니다. **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.

   1. **편집**을 선택하고 EMR Serverless 런타임 실행 역할의 ARN을 추가합니다.

   1. **제출**을 선택합니다.

   다음에 JupyterLab을 통해 EMR Serverless 애플리케이션에 연결하면 런타임 역할이 드롭다운 메뉴에 표시되어 선택할 수 있습니다.

------
#### [ Python script ]

   권한을 업데이트한 SageMaker AI 실행 역할을 사용하여 프라이빗 스페이스에서 시작한 JupyterLab 애플리케이션의 터미널에서 다음 명령을 실행합니다. `domainID`, `user-profile-name`, `studio-accountID` 및 `EMRServerlessRuntimeExecutionRole`을 적절한 값으로 바꿉니다. 이 코드 조각은 특정 사용자 프로필(`client.update_user_profile`) 또는 도메인 설정(`client.update_domain`)에 대한 사용자 프로필 설정을 업데이트합니다. 구체적으로, 이전에 만든 EMR Serverless 런타임 실행 역할을 연결합니다.

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'ExecutionRoleArns': ["arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleAA"]
           }
           
       }
   })
   resp = client.describe_domain(DomainId="domainID")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

## 교차 계정
<a name="studio-set-up-emr-serverless-permissions-crossaccount"></a>

다음 다이어그램은 Studio와 애플리케이션이 서로 다른 AWS 계정에 배포될 때 Studio에서 EMR Serverless 애플리케이션을 나열하고 연결하는 데 필요한 역할과 권한을 보여줍니다.

![\[다이어그램은 Studio와 애플리케이션이 서로 다른 AWS 계정에 있을 때 Studio에서 EMR Serverless 애플리케이션을 나열하고 연결하는 데 필요한 역할과 권한을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-crossaccount.png)


 AWS 계정에서 역할을 생성하는 방법에 대한 자세한 내용은 IAM 역할 [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) 생성(콘솔)을 참조하세요.

시작하기 전에 다음을 수행하세요.
+ 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 검색합니다. SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요. SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.
+ [Amazon S3 콘솔](https://console.aws.amazon.com/S3)에서 데이터 소스 및 출력 데이터 스토리지로 사용하는 Amazon S3 버킷의 ARN을 검색합니다.

  Amazon S3 버킷 만들기에 대한 자세한 내용은 [버킷 만들기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)를 참조하세요. 이름으로 버킷을 찾는 방법에 대한 자세한 내용은 [Amazon S3 버킷에 액세스 및 나열](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)을 참조하세요.

EMR Serverless 애플리케이션과 Studio가 서로 다른 AWS 계정에 배포된 경우 두 계정에 대한 권한을 구성합니다.

### EMR Serverless 계정에서
<a name="studio-set-up-emr-serverless-permissions-crossaccount-emraccount"></a>

다음 단계에 따라 EMR Serverless 애플리케이션이 실행 중인 계정(*신뢰하는 계정*이라고도 함)에서 필요한 역할 및 정책을 만듭니다.

1. **1단계**: 계정에서 EMR Serverless 애플리케이션에 대한 작업 런타임 실행 역할을 하나 이상 만듭니다(위의 *교차 계정* 다이어그램에서 `EMRServerlessRuntimeExecutionRoleB`). **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다. 작업에 필요한 권한을 추가합니다. 최소한 Amazon S3 버킷에 대한 전체 액세스 권한과 AWS Glue 데이터 카탈로그에 대한 생성 및 읽기 액세스 권한이 필요합니다.

   EMR Serverless 애플리케이션에 대한 새 런타임 실행 역할을 만드는 방법에 대한 자세한 지침은 다음 단계를 따르세요.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. 왼쪽 탐색 창에서 **정책**을 선택한 다음 **정책 만들기**를 선택합니다.

   1. 런타임 역할에 필요한 권한을 추가하고 정책의 이름을 지정한 다음 **정책 만들기**를 선택합니다.

      EMR Serverless 런타임 역할의 샘플 런타임 정책은 [Amazon EMR Serverless에 대한 작업 런타임 역할](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)을 참조하세요.

   1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 만들기**를 선택합니다.

   1. **역할 만들기** 페이지에서 **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다.

   1. **사용자 지정 신뢰 정책** 섹션의 다음 JSON 문서에 붙여 넣은 다음 **다음**을 선택합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. **권한 추가** 페이지에서 만든 정책을 추가하고 **다음**을 선택합니다.

   1. **검토** 페이지에서 역할 이름(예: `EMRServerlessAppRuntimeRoleB`)을 입력하고 선택적으로 설명을 입력합니다.

   1. 역할 세부 정보를 검토하고 **역할 생성**을 선택합니다.

   이 역할을 사용하면 팀원과 함께 동일한 애플리케이션에 연결할 수 있습니다. 각각은 데이터에 대한 개별 액세스 수준에 맞는 권한 범위가 지정된 런타임 역할을 사용합니다.
**참고**  
Spark 세션은 다르게 작동합니다. Spark 세션은 Studio에서 사용되는 실행 역할에 따라 격리되므로 실행 역할이 다른 사용자는 별개의 격리된 Spark 세션을 갖게 됩니다. 또한 도메인에 소스 ID를 활성화한 경우 다른 소스 ID에서 Spark 세션이 추가로 분리됩니다.

1. **2단계**: 다음 구성으로 `AssumableRole`이라는 사용자 지정 IAM 역할을 만듭니다.
   + 권한: EMR Serverless 리소스에 액세스할 수 있도록 `AssumableRole`에 필요한 권한(Amazon EMR Serverless 정책)을 부여합니다. 이 역할을 *액세스 역할*이라고도 합니다.
   + 신뢰 관계: 액세스가 필요한 Studio 계정에서 실행 역할(교차 계정 다이어그램의 `SageMakerExecutionRole`)을 수임할 수 있도록 `AssumableRole`에 대한 신뢰 정책을 구성합니다.

   Studio는 역할을 수임하여 EMR Serverless 계정에서 필요한 권한에 임시로 액세스할 수 있습니다.

   EMR Serverless AWS 계정`AssumableRole`에서 새를 생성하는 방법에 대한 자세한 지침은 다음 단계를 따르세요.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. 왼쪽 탐색 창에서 **정책**을 선택한 다음 **정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 EMR Serverless 액세스 및 작업을 허용하는 Amazon EMR Serverless 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](#studio-set-up-emr-serverless-permissions-reference)의 *EMR Serverless policies*를 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`, 전달된 `EMRServerlessAppRuntimeRole`을 실제 값으로 바꿉니다.
**참고**  
여기에 있는 `EMRServerlessAppRuntimeRole`은 1단계(위의 *교차 계정* 다이어그램의 `EMRServerlessAppRuntimeRoleB`)에서 만든 작업 런타임 실행 역할입니다. 권한 내에 필요한 만큼 런타임 역할의 ARN 문자열을 포함시켜 쉼표로 구분할 수 있습니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 만들기**를 선택합니다.

   1. **역할 만들기** 페이지에서 **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다.

   1. **사용자 지정 신뢰 정책** 섹션의 다음 JSON 문서에 붙여 넣은 다음 **다음**을 선택합니다.

      `studio-account`를 Studio 계정 ID로, `AmazonSageMaker-ExecutionRole`을 JupyterLab 공간에서 사용하는 실행 역할로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. **권한 추가** 페이지에서 2단계에서 만든 `EMRServerlessAppRuntimeRoleB` 권한을 추가한 다음 **다음**을 선택합니다.

   1. **검토** 페이지에서 역할 이름(예: `AssumableRole`)을 입력하고 선택적으로 설명을 입력합니다.

   1. 역할 세부 정보를 검토하고 **역할 생성**을 선택합니다.

    AWS 계정에서 역할을 생성하는 방법에 대한 자세한 내용은 [IAM 역할 생성(콘솔)을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).

### Studio 계정에서
<a name="studio-set-up-emr-serverless-permissions-crossaccount-studioaccount"></a>

Studio가 배포된 계정(*신뢰받는 계정*이라고도 함)에서 EMR Serverless 애플리케이션에 액세스하는 SageMaker AI 실행 역할을 신뢰하는 계정의 리소스에 액세스하는 데 필요한 권한으로 업데이트합니다.

1. **1단계**: 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 검색합니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

1. **2단계**: EMR Serverless 애플리케이션에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 연결합니다.

   1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 도메인, 사용자 프로필 및 공간을 업데이트할 수 있는 역할 권한을 부여하는 인라인 정책을 추가합니다. `SageMakerUpdateResourcesPolicy` 정책 문서에 대한 자세한 내용은 [참조 정책](#studio-set-up-emr-serverless-permissions-reference)의 *도메인, 사용자 프로필 및 공간 업데이트 작업 정책*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. **인라인 정책 만들기** 단계를 반복하여 `AssumableRole`을 수임한 다음 역할의 액세스 정책에서 허용하는 작업을 수행할 수 있는 권한을 실행 역할에 부여하는 다른 정책을 추가합니다.

      `emr-account`를 Amazon EMR Serverless 계정 ID로 바꾸고, `AssumableRole`을 Amazon EMR Serverless 계정에서 만든 수임 가능한 역할의 이름으로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": {
              "Sid": "AllowSTSToAssumeAssumableRole",
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Resource": "arn:aws:iam::111122223333:role/AssumableRole"
          }
      }
      ```

------

1. **3단계**:

   런타임 역할 목록을 도메인 또는 사용자 프로필과 연결하면 역할 목록을 시각적으로 탐색하고 JupyterLab에서 [EMR Serverless 애플리케이션에 연결](connect-emr-serverless-application.md)할 때 사용할 역할을 선택할 수 있습니다. SageMaker AI 콘솔 또는 다음 스크립트를 사용할 수 있습니다. 이후 Studio 노트북에서 만든 모든 Apache Spark 또는 Apache Hive 작업은 선택한 런타임 역할에 첨부된 정책에서 허용하는 데이터 및 리소스에만 액세스합니다.
**중요**  
이 단계를 완료하지 않으면 JupyterLab 노트북을 EMR Serverless 애플리케이션에 연결할 수 없습니다.

------
#### [ SageMaker AI console ]

   SageMaker AI 콘솔을 사용하여 런타임 역할을 사용자 프로필 또는 도메인과 연결하는 방법:

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

   1. 왼쪽 탐색 창에서 **도메인**을 선택한 다음 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 도메인을 선택합니다.

   1. 
      + 도메인에 런타임 역할을 추가하는 방법: **도메인 세부 정보** 페이지의 **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.
      + 사용자 프로필에 런타임 역할을 추가하는 방법: **도메인 세부 정보** 페이지에서 **사용자 프로필** 탭을 선택하고 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 사용자 프로필을 선택합니다. **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.

   1. **편집**을 선택하고 수임 가능한 역할 및 EMR Serverless 런타임 실행 역할의 ARN을 추가합니다.

   1. **제출**을 선택합니다.

   다음에 JupyterLab을 통해 EMR Serverless 애플리케이션에 연결하면 런타임 역할이 드롭다운 메뉴에 표시되어 선택할 수 있습니다.

------
#### [ Python script ]

    권한을 업데이트한 SageMaker AI 실행 역할을 사용하여 프라이빗 스페이스에서 시작한 JupyterLab 애플리케이션의 터미널에서 다음 명령을 실행합니다. `domainID`, `user-profile-name`, `studio-accountID` 및 `EMRServerlessRuntimeExecutionRole`을 적절한 값으로 바꿉니다. 이 코드 조각은 SageMaker AI 도메인 내의 특정 사용자 프로필(`client.update_user_profile`) 또는 도메인 설정(`client.update_domain`)에 대한 사용자 프로필 설정을 업데이트합니다. 특히 이전에 만든 Amazon EMR Serverless의 런타임 실행 역할을 설정합니다. 또한 JupyterLab 애플리케이션이 Amazon EMR 계정 내에서 EMR Serverless 애플리케이션을 실행하기 위해 특정 IAM 역할(`AssumableRole`)을 수임할 수 있도록 합니다.

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::emr-accountID:role/AnotherRuntimeExecutionRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

## 참조 정책
<a name="studio-set-up-emr-serverless-permissions-reference"></a>
+ **EMR Serverless 정책**: 이 정책은 나열, 만들기(필수 SageMaker AI 태그 포함), 시작, 중지, 세부 정보 가져오기, 삭제, Livy 엔드포인트 액세스, 작업 실행 대시보드 가져오기를 포함한 EMR 서버리스 애플리케이션 관리를 허용합니다. 또한 필요한 EMR Serverless 애플리케이션 런타임 역할을 서비스에 전달할 수 있도록 합니다.
  + `EMRServerlessListApplications`: 지정된 리전 및 AWS 계정의 모든 EMR Serverless 리소스에 대해 ListApplications 작업을 허용합니다.
  + `EMRServerlessPassRole`: 역할이에 전달되는 경우에만 제공된 AWS 계정에서 지정된 런타임 역할(들)을 전달하도록 허용합니다`emr-serverless.amazonaws.com service`.
  + `EMRServerlessCreateApplicationAction`: 지정된 리전 및 AWS 계정의 EMR Serverless 리소스에 대한 CreateApplication 및 TagResource 작업을 허용합니다. 그러나 만들어지거나 태그가 지정되는 리소스에 null이 아닌 값이 있는 특정 태그 키(`sagemaker:domain-arn`, `sagemaker:user-profile-arn` 및 `sagemaker:space-arn`)가 있어야 합니다.
  + `EMRServerlessDenyTaggingAction`: 리소스에 지정된 태그 키(`sagemaker:domain-arn`, 및 `sagemaker:space-arn`)가 설정되지 않은 경우 지정된 리전 및 AWS 계정의 EMR Serverless 리소스에 대한 TagResource `sagemaker:user-profile-arn`및 UntagResource 작업입니다.
  + `EMRServerlessActions`: 리소스에 null이 아닌 값으로 설정된 지정된 태그 키(`sagemaker:domain-arn`, `sagemaker:user-profile-arn`, `sagemaker:space-arn`) 세트가 있는 경우에만 EMR Serverless 리소스에 다양한 작업(`StartApplication`, `StopApplication`, `GetApplication`, `DeleteApplication`, `AccessLivyEndpoints`, `GetDashboardForJobRun`)을 허용합니다.

  제공된 JSON 문서에 정의된 IAM 정책은 이러한 권한을 부여하지만, 특정 SageMaker AI 도메인, 사용자 프로필 및 스페이스와 연결된 Amazon EMR Serverless 리소스만 관리할 수 있도록 해당 액세스를 EMR Serverless 애플리케이션의 특정 SageMaker AI 태그가 있을 때로만 제한합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "EMRServerlessListApplications",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:ListApplications"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*"
          },
          {
              "Sid": "EMRServerlessPassRole",
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/EMRServerlessAppRuntimeRole",
              "Condition": {
                  "StringLike": {
                      "iam:PassedToService": "emr-serverless.amazonaws.com"
                  }
              }
          },
          {
              "Sid": "EMRServerlessCreateApplicationAction",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:CreateApplication",
                  "emr-serverless:TagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "ForAllValues:StringEquals": {
                      "aws:TagKeys": [
                          "sagemaker:domain-arn",
                          "sagemaker:user-profile-arn",
                          "sagemaker:space-arn"
                      ]
                  },
                  "Null": {
                      "aws:RequestTag/sagemaker:domain-arn": "false",
                      "aws:RequestTag/sagemaker:user-profile-arn": "false",
                      "aws:RequestTag/sagemaker:space-arn": "false"
                  }
              }
          },
          {
              "Sid": "EMRServerlessDenyTaggingAction",
              "Effect": "Deny",
              "Action": [
                  "emr-serverless:TagResource",
                  "emr-serverless:UntagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "true",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "true",
                      "aws:ResourceTag/sagemaker:space-arn": "true"
                  }
              }
          },
          {
              "Sid": "EMRServerlessActions",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:StartApplication",
                  "emr-serverless:StopApplication",
                  "emr-serverless:GetApplication",
                  "emr-serverless:DeleteApplication",
                  "emr-serverless:AccessLivyEndpoints",
                  "emr-serverless:GetDashboardForJobRun"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "false",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "false",
                      "aws:ResourceTag/sagemaker:space-arn": "false"
                  }
              }
          }
      ]
  }
  ```

------
+ **도메인, 사용자 프로필 및 스페이스 업데이트 작업 정책**: 다음 정책은 지정된 리전 및 AWS 계정 내의 SageMaker AI 도메인, 사용자 프로필 및 스페이스를 업데이트할 수 있는 권한을 부여합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# Studio에서 EMR Serverless 애플리케이션 만들기
<a name="create-emr-serverless-application"></a>

데이터 과학자와 데이터 엔지니어는 Studio 사용자 인터페이스에서 직접 EMR Serverless 애플리케이션을 만들 수 있습니다. 시작하기 전에 [SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.](studio-emr-serverless-permissions.md) 섹션에 설명된 대로 필요한 권한을 구성했는지 확인합니다. 이러한 권한은 Studio에 애플리케이션에 대한 만들기, 시작, 보기, 액세스 및 종료 권한을 부여합니다.

Studio에서 EMR Serverless 애플리케이션을 만드는 방법:

1. Studio UI에서 왼쪽 패널로 이동하여 왼쪽 탐색 메뉴에서 **데이터** 노드를 선택합니다. 그런 다음 스크롤하여 **Amazon EMR 애플리케이션 및 클러스터** 옵션을 선택합니다. 그러면 Studio 환경 내에서 액세스할 수 있는 Amazon EMR 애플리케이션이 **서버리스 애플리케이션** 탭 아래에 표시되는 페이지가 열립니다.

1. 오른쪽 상단 모서리에서 **서버리스 애플리케이션 만들기** 버튼을 선택합니다. 그러면 **애플리케이션 설정 옵션**에서 **사용자 지정 설정 사용**을 선택할 때 [EMR Serverless 콘솔](https://console.aws.amazon.com/emrserverless)에 표시되는 보기와 유사한 **애플리케이션 만들기** 페이지가 열립니다.

1. 이름 및 설정하려는 특정 구성 가능한 파라미터를 포함하여 애플리케이션에 필요한 세부 정보를 제공한 다음 **애플리케이션 만들기**를 선택합니다.  
![\[Studio에서 EMR Serverless 애플리케이션을 만드는 양식\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-create-app.png)

   모든 구성 설정에는 기본값이 있으며 수정할 수 있습니다. 사용 가능한 각 파라미터에 대한 자세한 내용은 EMR Serverless 사용 설명서의 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/application-capacity.html)을 참조하세요.
**참고**  
Studio UI에서 애플리케이션 만들기 프로세스 중에 **애플리케이션 만들기** 또는 **애플리케이션 만들기 및 시작** 옵션이 있습니다. 선택에 따라 애플리케이션은 각각 `Creating` 또는 `Starting` 상태로 들어갑니다.  
즉시 시작하지 않고 애플리케이션을 만들도록 선택한 경우 **작업 제출 시 애플리케이션 자동 시작** 옵션이 선택되어 있는지 확인합니다. 이렇게 하면 나중에 실행할 작업을 제출할 때 애플리케이션이 자동으로 `Starting` 상태로 전환됩니다.
가장 간단한 설정을 위해서는 **네트워크 연결** 섹션에서 **가상 프라이빗 클라우드(VPC)** 옵션을 기본값인 **VPC의 리소스에 대한 네트워크 연결 없음**으로 두는 좋습니다. 이렇게 하면 추가 네트워킹 구성 없이 도메인 VPC 내에서 애플리케이션을 만들 수 있습니다.  
 다른 경우에는 다음 단계를 수행해야 합니다.  
VPC를 피어링합니다.
프라이빗 서브넷 라우팅 테이블에 경로를 추가합니다.
[Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md)에 설명된 대로 보안 그룹을 구성합니다.
이렇게 하면 기본값인 **네트워크 연결 없음** 옵션 이상으로 애플리케이션에 적절한 네트워킹 설정이 보장됩니다.
Studio Classic UI에서 만든 애플리케이션의 경우 다음 구성이 자동으로 적용됩니다.  
Apache Livy 엔드포인트가 활성화됩니다.
애플리케이션에 다음과 같은 태그가 지정됩니다.  
sagemaker:user-profile-arn
sagemaker:domain-arn
sagemaker:space-arn
Studio 외부에서 애플리케이션을 만드는 경우 Apache Livy 엔드포인트를 수동으로 활성화하고 애플리케이션에 동일한 태그 세트를 적용해야 합니다.

애플리케이션이 만들어지면 Studio Classic UI에 *애플리케이션이 성공적으로 만들어짐*이라는 메시지가 표시되고 새 애플리케이션이 **서버리스 애플리케이션** 목록에 나타납니다.

EMR Serverless 애플리케이션에 연결하려면 [Studio에서 EMR Serverless 애플리케이션에 연결](connect-emr-serverless-application.md) 섹션을 참조하세요.

# Studio에서 EMR Serverless 애플리케이션에 연결
<a name="connect-emr-serverless-application"></a>

데이터 과학자와 데이터 엔지니어는 Studio 사용자 인터페이스에서 직접 EMR Serverless 애플리케이션을 검색한 다음 연결할 수 있습니다. 시작하기 전에 [Studio에서 EMR Serverless 애플리케이션 만들기](create-emr-serverless-application.md)의 지침에 따라 EMR Serverless 애플리케이션을 만들었는지 확인하세요.

EMR Serverless 애플리케이션을 Studio UI에서 직접 새 JupyterLab 노트북에 연결하거나 실행 중인 JupyterLab 애플리케이션의 노트북에서 연결을 시작하도록 선택할 수 있습니다.

**중요**  
Studio를 사용하는 경우 프라이빗 공간에서 시작된 JupyterLab 애플리케이션용 EMR Serverless 애플리케이션만 검색하고 연결할 수 있습니다. EMR Serverless 애플리케이션이 Studio 환경과 동일한 AWS 리전에 있는지 확인합니다. JupyterLab 공간은 SageMaker 배포 이미지 버전 `1.10` 이상을 사용해야 합니다.

**Studio UI에서 EMR Serverless 애플리케이션을 새 JupyterLab 노트북에 연결하는 방법:**

1. Studio UI에서 왼쪽 패널로 이동하여 왼쪽 탐색 메뉴에서 **데이터** 노드를 선택합니다. 그런 다음 스크롤하여 **Amazon EMR 애플리케이션 및 클러스터** 옵션을 선택합니다. 그러면 Studio 환경 내에서 액세스할 수 있는 Amazon EMR 애플리케이션이 **서버리스 애플리케이션** 탭 아래에 표시되는 페이지가 열립니다.
**참고**  
사용자 또는 관리자가 EMR Serverless 애플리케이션에 대한 교차 계정 액세스를 허용하도록 권한을 구성한 경우 Studio에 대한 액세스 권한을 부여한 모든 계정의 통합 애플리케이션 목록을 볼 수 있습니다.

1. 새 노트북에 연결할 EMR Serverless 애플리케이션을 선택한 다음 **노트북에 연결**을 선택합니다. 그러면 JupyterLab 공간 목록이 표시된 모달 창이 열립니다.

1. 
   + JupyterLab 애플리케이션을 시작할 프라이빗 공간을 선택한 다음 **노트북 열기**를 선택합니다. 이렇게 하면 선택한 공간에서 JupyterLab 애플리케이션이 시작되고 새 노트북이 열립니다.
   + 또는 모달 창 상단의 **새 공간 만들기** 버튼을 선택하여 새 프라이빗 공간을 만들 수 있습니다. 공간 이름을 입력한 다음 **공간 만들기 및 노트북 열기**를 선택합니다. 이렇게 하면 기본 인스턴스 유형과 사용 가능한 최신 SageMaker 배포 이미지가 있는 프라이빗 공간이 만들어지고 JupyterLab 애플리케이션이 시작되며 새 노트북이 열립니다.

1. EMR Serverless 애플리케이션이 작업 실행을 위해 수임할 수 있는 IAM 런타임 실행 역할의 이름을 선택합니다. 선택하면 연결 명령이 노트북의 첫 번째 셀을 채우고 EMR Serverless 애플리케이션과의 연결을 시작합니다.
**중요**  
JupyterLab 노트북을 EMR Serverless 애플리케이션에 성공적으로 연결하려면 먼저 [SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.](studio-emr-serverless-permissions.md)에 설명된 대로 런타임 역할 목록을 도메인 또는 사용자 프로필과 연결해야 합니다. 이 단계를 완료하지 않으면 연결을 설정할 수 없습니다.

   연결이 성공하면 메시지가 연결을 확인하고 EMR Serverless 애플리케이션을 시작하고 Spark 세션을 시작합니다.
**참고**  
EMR Serverless 애플리케이션에 연결하면 상태가 `Stopped` 또는 `Created`에서 `Started`로 전환됩니다.

**또는 JupyterLab 노트북에서 클러스터에 연결할 수도 있습니다.**

1. 노트북 오른쪽 상단에서 **클러스터** 버튼을 선택합니다. 그러면 액세스할 수 있는 EMR Serverless 애플리케이션이 나열된 모달 창이 열립니다. **서버리스 애플리케이션** 탭에서 애플리케이션을 볼 수 있습니다.

1. 연결할 애플리케이션을 선택한 다음 **연결**을 선택합니다.

1. EMR Serverless는 [SageMaker Studio에서 Amazon EMR 애플리케이션을 나열하고 시작할 수 있는 권한을 설정합니다.](studio-emr-serverless-permissions.md)에 설명된 대로 필요한 권한을 설정할 때 미리 로드된 런타임 IAM 역할을 지원합니다. 이 단계를 완료하지 않으면 연결을 설정할 수 없습니다.

   **Amazon EMR 실행 역할** 드롭다운 메뉴에서 역할을 선택할 수 있습니다. EMR Serverless에 연결하면 Studio가 노트북의 활성 셀에 코드 블록을 추가하여 연결을 설정합니다.

1. 활성 셀이 채워지고 실행됩니다. 이 셀에는 노트북을 애플리케이션에 연결하는 연결 매직 명령이 포함되어 있습니다.

   연결에 성공하면 Spark 애플리케이션의 연결과 시작을 확인하는 메시지가 나타납니다. EMR Serverless 애플리케이션에 데이터 처리 작업 제출을 시작할 수 있습니다.

# Studio UI에서 EMR Serverless 애플리케이션 중지 또는 삭제
<a name="terminate-emr-serverless-application"></a>

Studio UI의 애플리케이션 목록에서 EMR Serverless 애플리케이션을 중지(`Stopped` 상태로 전환)하거나 삭제(`Deleted` 상태로 전환)할 수 있습니다.

**애플리케이션을 중지하거나 삭제하려면 사용 가능한 EMR Serverless 애플리케이션 목록으로 이동합니다.**

1. Studio UI에서 왼쪽 패널로 이동하여 왼쪽 탐색 메뉴에서 **데이터** 노드를 선택합니다. 그런 다음 스크롤하여 **Amazon EMR 애플리케이션 및 클러스터** 옵션을 선택합니다. 그러면 Studio 환경 내에서 액세스할 수 있는 Amazon EMR 애플리케이션이 **서버리스 애플리케이션** 탭 아래에 표시되는 페이지가 열립니다.

1. 중지하거나 삭제할 애플리케이션의 이름을 선택한 다음 해당하는 **중지** 또는 **삭제** 버튼을 선택합니다.

1. 보류 중인 작업이 영구적으로 손실된다는 확인 메시지가 표시됩니다.

# Amazon EMR을 사용한 데이터 준비
<a name="studio-notebooks-emr-cluster"></a>

**중요**  
Amazon SageMaker Studio 및 Amazon SageMaker Studio Classic은 SageMaker AI와 상호작용하는 데 사용할 수 있는 두 가지 기계 학습 환경입니다.  
도메인이 2023년 11월 30일 후에 만들어진 경우 Studio가 기본 환경입니다.  
도메인이 2023년 11월 30일 전에 만들어진 경우 Amazon SageMaker Studio Classic이 기본 환경입니다. Amazon SageMaker Studio Classic이 기본 환경인 경우 Studio를 사용하려면 [Amazon SageMaker Studio Classic에서 마이그레이션](studio-updated-migrate.md) 섹션을 참조하세요.  
Amazon SageMaker Studio Classic에서 Amazon SageMaker Studio로 마이그레이션할 때 사용 가능한 기능이 손실되지 않습니다. Studio Classic은 레거시 기계 학습 워크플로를 실행하는 데 도움이 되도록 Amazon SageMaker Studio 내의 애플리케이션으로도 존재합니다.

Amazon SageMaker Studio 및 Studio Classic에는 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)과의 통합 기능이 기본 제공되어 있습니다. JupyterLab 및 Studio Classic 노트북 내에서 데이터 과학자와 데이터 엔지니어는 기존 Amazon EMR 클러스터를 검색하고 연결한 다음 [Apache Spark](https://aws.amazon.com/emr/features/spark), [Apache Hive](https://aws.amazon.com/emr/features/hive) 또는 [Presto](https://aws.amazon.com/emr/features/presto)를 사용하여 기계 학습을 위한 대규모 데이터를 대화식으로 탐색하고 시각화하며 준비할 수 있습니다. 클릭 한 번으로 Spark UI에 액세스하여 노트북을 떠나지 않고도 Spark 작업의 상태와 지표를 모니터링할 수 있습니다.

관리자는 Amazon EMR 클러스터를 정의하는 [CloudFormation 템플릿](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)을 만들 수 있습니다. 그런 다음 Studio 및 Studio Classic 사용자가 시작할 수 있도록 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/userguide/end-user-console.html)에서 이러한 클러스터 템플릿이 사용 가능하게 할 수 있습니다. 그러면 데이터 과학자는 미리 정의된 템플릿을 선택하여 Studio 환경에서 직접 Amazon EMR 클러스터를 자체 프로비저닝할 수 있습니다. 관리자는 템플릿을 추가로 파라미터화하여 사용자가 사전 정의된 값 내에서 클러스터 측면을 선택할 수 있도록 할 수 있습니다. 예를 들어 사용자는 코어 노드 수를 지정하거나 드롭다운 메뉴에서 노드의 인스턴스 유형을 선택할 수 있습니다.

 CloudFormation관리자는를 사용하여 Amazon EMR 클러스터의 조직, 보안 및 네트워킹 설정을 제어할 수 있습니다. 그런 다음 데이터 과학자와 데이터 엔지니어는 복잡한 구성을 설정하지 않고도 Studio 및 Studio Classic에서 직접 온디맨드 Amazon EMR 클러스터를 만들기 위해 워크로드에 맞게 이러한 템플릿을 사용자 지정할 수 있습니다. 사용자는 사용 후 Amazon EMR 클러스터를 종료할 수 있습니다.
+ **관리자인 경우**:

  Studio 또는 Studio Classic과 Amazon EMR 클러스터 간의 통신을 활성화했는지 확인합니다. 지침은 [Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md) 섹션을 참조하세요. 이 통신이 활성화되면 다음을 수행할 수 있습니다.
  + [Service Catalog에서 Amazon EMR CloudFormation 템플릿 구성](studio-notebooks-set-up-emr-templates.md)
  + [Amazon EMR 클러스터 나열 구성](studio-notebooks-configure-discoverability-emr-cluster.md)
+ **데이터 과학자 또는 데이터 엔지니어인 경우** 다음을 수행할 수 있습니다.
  + [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 시작하기](studio-notebooks-launch-emr-cluster-from-template.md)
  + [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열](discover-emr-clusters.md)
  + [SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결](connect-emr-clusters.md)
  + [Studio에서 Amazon EMR 클러스터 종료](terminate-emr-clusters.md)
  + [Studio 또는 Studio Classic에서 Spark UI 액세스](studio-notebooks-access-spark-ui.md)

**Topics**
+ [빠른 시작: SageMaker AI 샌드박스 도메인을 만들어 Studio에서 Amazon EMR 클러스터 시작](studio-notebooks-emr-cluster-quickstart.md)
+ [관리자 안내서](studio-emr-admin-guide.md)
+ [사용 설명서](studio-emr-user-guide.md)
+ [블로그 및 백서](studio-notebooks-emr-resources.md)
+ [문제 해결](studio-notebooks-emr-troubleshooting.md)

# 빠른 시작: SageMaker AI 샌드박스 도메인을 만들어 Studio에서 Amazon EMR 클러스터 시작
<a name="studio-notebooks-emr-cluster-quickstart"></a>

이 섹션에서는 Amazon SageMaker Studio에서 전체 테스트 환경을 빠르게 설정하는 방법을 안내합니다. 사용자가 Studio에서 직접 새 Amazon EMR 클러스터를 시작할 수 있는 새 Studio 도메인을 만듭니다. 이 단계에서는 Amazon EMR 클러스터에 연결하여 Spark 워크로드 실행을 시작할 수 있는 예시 노트북을 제공합니다. 이 노트북을 사용하여 Amazon EMR Spark 분산 처리 및 OpenSearch 벡터 데이터베이스를 사용하여 검색 증강 생성(RAG)을 구축합니다.

**참고**  
시작하려면 관리자 권한이 있는 AWS Identity and Access Management (IAM) 사용자 계정을 사용하여 AWS Management Console에 로그인합니다. AWS 계정에 가입하고 관리 액세스 권한이 있는 사용자를 만드는 방법에 대한 자세한 내용은 [Amazon SageMaker AI 사전 조건 충족](gs-set-up.md) 섹션을 참조하세요.

**Studio 테스트 환경을 설정하고 Spark 작업 실행을 시작하는 방법:**
+ [1단계: Studio에서 Amazon EMR 클러스터를 시작하기 위한 SageMaker AI 도메인 만들기](#studio-notebooks-emr-cluster-quickstart-setup)
+ [2단계: Studio UI에서 새 Amazon EMR 클러스터 시작](#studio-notebooks-emr-cluster-quickstart-launch)
+ [3단계: JupyterLab 노트북을 Amazon EMR 클러스터에 연결](#studio-notebooks-emr-cluster-quickstart-connect)
+ [4단계: CloudFormation 스택 정리](#studio-notebooks-emr-cluster-quickstart-clean-stack)

## 1단계: Studio에서 Amazon EMR 클러스터를 시작하기 위한 SageMaker AI 도메인 만들기
<a name="studio-notebooks-emr-cluster-quickstart-setup"></a>

다음 단계에서는 CloudFormation 스택을 적용하여 새 SageMaker AI 도메인을 자동으로 생성합니다. 또한 스택은 사용자 프로필을 만들고 필요한 환경 및 권한을 구성합니다. SageMaker AI 도메인은 Studio에서 Amazon EMR 클러스터를 직접 시작할 수 있도록 구성됩니다. 이 예에서 Amazon EMR 클러스터는 인증 없이 SageMaker AI와 동일한 AWS 계정에 만들어집니다. [get\$1started](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 리포지토리에서 Kerberos와 같은 다양한 인증 방법을 지원하는 추가 CloudFormation 스택을 찾을 수 있습니다.

**참고**  
SageMaker AI는 AWS 리전 기본적으로 AWS 계정당 5개의 Studio 도메인을 허용합니다. 스택을 만들기 전에 계정에 리전에 도메인이 4개 이하인지 확인하세요.

**Studio에서 Amazon EMR 클러스터를 시작하기 위한 SageMaker AI 도메인을 설정하려면 다음 단계를 따르세요.**

1. `sagemaker-studio-emr` GitHub 리포지토리에서 이 [CloudFormation 템플릿](https://github.com/aws-samples/sagemaker-studio-foundation-models/blob/main/workshop-artifacts/cfn/workshop-cfn.yaml)의 원시 파일을 다운로드합니다.

1.  CloudFormation 콘솔로 이동: [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. **스택 만들기**를 선택한 다음 드롭다운 메뉴에서 **새 리소스 사용(표준)**을 선택합니다.

1. **1단계**에서:

   1. **템플릿 준비** 섹션에서 **기존 템플릿 선택**을 선택합니다.

   1. **템플릿 지정** 섹션에서 **템플릿 파일 업로드**를 선택합니다.

   1. 다운로드한 CloudFormation 템플릿을 업로드하고 **다음을** 선택합니다.

1. **2단계**에서 **스택 이름**과 **SageMakerDomainName**을 입력한 후, **다음**을 선택합니다.

1. **3단계**에서 모든 기본값을 유지하고 **다음**을 선택합니다.

1. **4단계**에서 확인란을 선택하여 리소스 만들기를 확인하고 **스택 만들기**를 선택합니다. 이렇게 하면 계정 및 리전에 Studio 도메인이 만들어집니다.

## 2단계: Studio UI에서 새 Amazon EMR 클러스터 시작
<a name="studio-notebooks-emr-cluster-quickstart-launch"></a>

아래 단계에서는 Studio UI에서 새 Amazon EMR 클러스터를 만듭니다.

1. SageMaker AI 콘솔([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))로 이동한 후 왼쪽 메뉴에서 **도메인**을 선택합니다.

1. 도메인 이름(**GenerativeAIDomain**)을 클릭하여 **도메인 세부 정보** 페이지를 엽니다.

1. 사용자 프로필 `genai-user`에서 Studio를 시작합니다.

1. 왼쪽 탐색 창에서 **데이터**로 이동한 다음 **Amazon EMR 클러스터**로 이동합니다.

1. Amazon EMR 클러스터 페이지에서 **만들기**를 선택합니다. CloudFormation 스택에서 만든 **SageMaker Studio 도메인 인증 없음 EMR** 템플릿을 선택한 후, **다음**을 선택합니다.

1. 새 Amazon EMR 클러스터의 이름을 입력합니다. 선택적으로 코어 및 마스터 노드의 인스턴스 유형, 유휴 제한 시간 또는 코어 노드 수와 같은 다른 파라미터를 업데이트합니다.

1. **리소스 만들기**를 선택하여 새 Amazon EMR 클러스터를 시작합니다.

   Amazon EMR 클러스터를 만든 후 **EMR 클러스터** 페이지의 상태를 따릅니다. 상태가 `Running/Waiting`으로 변경되면 Amazon EMR 클러스터를 Studio에서 사용할 준비가 된 것입니다.

## 3단계: JupyterLab 노트북을 Amazon EMR 클러스터에 연결
<a name="studio-notebooks-emr-cluster-quickstart-connect"></a>

아래 단계에서는 JupyterLab의 노트북을 실행 중인 Amazon EMR 클러스터에 연결합니다. 이 예에서는 노트북을 가져와 Amazon EMR Spark 분산 처리 및 OpenSearch 벡터 데이터베이스를 사용하여 검색 증강 생성(RAG) 시스템을 구축합니다.

1. 

**JupyterLab 시작**

   Studio에서 JupyterLab 애플리케이션을 시작합니다.

1. 

**프라이빗 공간 만들기**

   JupyterLab 애플리케이션을 위한 공간을 만들지 않은 경우 **JupyterLab 공간 만들기**를 선택합니다. 공간의 이름을 입력하고 공간을 **프라이빗**으로 유지합니다. 다른 모든 설정은 기본값으로 두고 **공간 만들기**를 선택합니다.

   아니면 JupyterLab 공간을 실행하여 JupyterLab 애플리케이션을 시작합니다.

1. 

**추론을 위한 LLM 및 임베딩 모델 배포**
   + 상단 메뉴에서 **파일**을 선택한 다음 **새로 만들기**와 **터미널**을 차례로 선택합니다.
   + 터미널에서 다음 명령을 실행합니다.

     ```
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb
     mkdir AWSGuides
     cd AWSGuides
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/AmazonSageMakerDeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/EC2DeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/S3DeveloperGuide.pdf
     ```

     그러면 `Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` 노트북이 로컬 디렉터리로 검색되고 3개의 PDF 파일이 로컬 `AWSGuides` 폴더에 다운로드됩니다.
   + `lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb`를 열고 `Python 3 (ipykernel)` 커널을 유지한 다음 각 셀을 실행합니다.
**주의**  
계속하기 전에 **Llama 2 라이선스 계약** 섹션에서 Llama2 EULA를 수락해야 합니다.  
노트북은 추론을 위해 `Llama 2` 및 `all-MiniLM-L6-v2 Models`이라는 두 모델을 `ml.g5.2xlarge`에 배포합니다.

     모델을 배포하고 엔드포인트를 만드는 데 시간이 걸릴 수 있습니다.

1. 

**기본 노트북 열기**

   JupyterLab에서 터미널을 열고 다음 명령을 실행합니다.

   ```
   cd ..
   wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb
   ```

   JupyterLab 의 왼쪽 패널에 추가 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 노트북이 표시됩니다.

1. 

**`PySpark` 커널 선택**

   `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 노트북을 열고 `SparkMagic PySpark` 커널을 사용하고 있는지 확인합니다. 노트북의 오른쪽 상단에서 커널을 전환할 수 있습니다. 현재 커널 이름을 선택하여 커널 선택 모달을 연 다음 `SparkMagic PySpark`를 선택합니다.

1. 

**클러스터에 노트북 연결**

   1. 노트북 오른쪽 상단에서 **클러스터**를 선택합니다. 이 작업을 수행하면 액세스 권한이 있는 실행 중인 모든 클러스터가 나열된 모달 창이 열립니다.

   1. 클러스터를 선택하고 **연결**을 선택합니다. 새 자격 증명 유형 선택 모달 창이 열립니다.

   1. **자격 증명 없음**을 선택한 다음 **연결**을 선택합니다.  
![\[JupyterLab 노트북에 대한 Amazon EMR 자격 증명 선택을 보여주는 모달입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-credential-selection.png)

   1. 노트북 셀이 자동으로 채워지고 실행됩니다. 노트북 셀은 Amazon EMR 클러스터에 연결하는 기능을 제공하는 `sagemaker_studio_analytics_extension.magics` 확장을 로드합니다. 그런 다음 `%sm_analytics` 매직 명령을 사용하여 Amazon EMR 클러스터 및 Spark 애플리케이션에 대한 연결을 시작합니다.
**참고**  
Amazon EMR 클러스터에 대한 연결 문자열에 인증 유형이 `None`으로 설정되어 있는지 확인합니다. 이는 다음 예에서 `--auth-type None` 값으로 표시됩니다. 필요한 경우 필드를 수정할 수 있습니다.  

      ```
      %load_ext sagemaker_studio_analytics_extension.magics
      %sm_analytics emr connect --verify-certificate False --cluster-id your-cluster-id --auth-type None --language python
      ```

   1. 연결을 성공적으로 설정하면 연결 셀 출력 메시지에 클러스터 ID, `YARN` 애플리케이션 ID, Spark 작업을 모니터링하기 위한 Spark UI 링크를 포함한 `SparkSession` 세부 정보가 표시됩니다.

`Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 노트북을 사용할 준비가 되었습니다. 이 예시 노트북은 LangChain 및 OpenSearch를 사용하여 RAG 시스템을 구축하기 위해 분산 PySpark 워크로드를 실행합니다.

## 4단계: CloudFormation 스택 정리
<a name="studio-notebooks-emr-cluster-quickstart-clean-stack"></a>

완료 후에는 두 엔드포인트를 종료하고 CloudFormation 스택을 삭제하여 요금이 지속적으로 발생하는 것을 방지해야 합니다. 스택을 삭제하면 스택에서 프로비저닝한 모든 리소스가 정리됩니다.

**스택 작업을 마쳤을 때 CloudFormation 스택을 삭제하려면**

1.  CloudFormation 콘솔로 이동: [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. 삭제할 스택을 선택합니다. 이름으로 검색하거나 스택 목록에서 찾을 수 있습니다.

1. **삭제** 버튼을 클릭하여 스택 삭제를 완료한 다음 **삭제**를 다시 클릭하여 스택에서 만든 모든 리소스가 삭제됨을 확인합니다.

   스택 삭제가 완료될 때까지 기다립니다. 몇 분 정도 걸릴 수 있습니다. CloudFormation 은 스택 템플릿에 정의된 모든 리소스를 자동으로 정리합니다.

1. 스택에서 만든 모든 리소스가 삭제되었는지 확인합니다. 예를 들어 남은 Amazon EMR 클러스터가 있는지 확인합니다.

**모델의 API 엔드포인트를 제거하는 방법**

1. SageMaker AI 콘솔([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))로 이동합니다.

1. 탐색 창에서 **추론**을 선택하고 **엔드포인트**를 선택합니다.

1. `hf-allminil6v2-embedding-ep` 엔드포인트를 선택한 다음 **작업** 드롭다운 목록에서 **삭제**를 선택합니다. `meta-llama2-7b-chat-tg-ep` 엔드포인트에 대해 단계를 반복합니다.

# 관리자 안내서
<a name="studio-emr-admin-guide"></a>

이 섹션에서는 Studio 또는 Studio Classic과 Amazon EMR 클러스터 간의 통신을 허용하는 사전 조건, 네트워킹 지침을 제공합니다. Studio 및 Amazon EMR이 퍼블릭 인터넷 액세스 없이 프라이빗 Amazon VPC 내에서 프로비저닝되는 경우와 인터넷을 통해 통신해야 하는 경우 등 각기 다른 배포 시나리오를 다룹니다.

관리자가를 사용하여 Studio에서 CloudFormation 템플릿을 사용할 수 있도록 AWS Service Catalog 하여 데이터 과학자가 Studio 내에서 직접 Amazon EMR 클러스터를 검색하고 자체 프로비저닝할 수 있도록 하는 방법을 안내합니다. 여기에는 Service Catalog 포트폴리오 만들기, 필수 권한 부여, Amazon EMR 템플릿 참조, 클러스터를 만드는 중에 사용자 지정을 활성화하기 위한 파라미터화가 포함됩니다.

마지막으로 Studio 및 Studio Classic에서 실행 중인 기존 Amazon EMR 클러스터의 검색 가능성을 구성하는 방법에 대한 지침을 제공하며, 필요한 IAM 권한과 함께 단일 계정 및 교차 계정 액세스 시나리오를 다룹니다.

**Topics**
+ [Service Catalog에서 Amazon EMR CloudFormation 템플릿 구성](studio-notebooks-set-up-emr-templates.md)
+ [Amazon EMR 클러스터 나열 구성](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [Studio에서 Amazon EMR 클러스터 액세스를 위한 IAM 런타임 역할 구성](studio-notebooks-emr-cluster-rbac.md)
+ [참조 정책](studio-set-up-emr-permissions-reference.md)

# Service Catalog에서 Amazon EMR CloudFormation 템플릿 구성
<a name="studio-notebooks-set-up-emr-templates"></a>

이 주제에서는 관리자가 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html), [의 포트폴리오 및 제품 AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html), [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)에 대해 잘 알고 있다고 가정합니다.

Studio에서 Amazon EMR 클러스터 만들기를 단순화하기 위해 관리자는 [Amazon EMR CloudFormation 템플릿](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)을 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 포트폴리오의 제품으로 등록할 수 있습니다. 데이터 과학자가 템플릿을 사용할 수 있도록 하려면 포트폴리오를 Studio 또는 Studio Classic에서 사용되는 SageMaker AI 실행 역할과 연결해야 합니다. 마지막으로 사용자가 템플릿을 검색하고 클러스터를 프로비저닝하고 Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 하려면 관리자가 적절한 액세스 권한을 설정해야 합니다.

Amazon EMR CloudFormation 템플릿을 사용하면 최종 사용자가 다양한 클러스터 측면을 사용자 지정할 수 있습니다. 예를 들어 관리자는 사용자가 클러스터를 만들 때 선택할 수 있는 승인된 인스턴스 유형 목록을 정의할 수 있습니다.

다음 지침에서는 엔드투엔드 [CloudFormation 스택](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)을 사용하여 Studio 또는 Studio Classic 도메인, 사용자 프로필, Service Catalog 포트폴리오를 설정하고 Amazon EMR 시작 템플릿을 채웁니다. 아래 단계에서는 Studio 또는 Studio Classic이 Service Catalog 제품에 액세스하고 Amazon EMR 클러스터를 프로비저닝할 수 있도록 관리자가 엔드투엔드 스택에 적용해야 하는 특정 설정을 강조합니다.

**참고**  
GitHub 리포지토리 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)에는 필요한 IAM 역할, 네트워킹, SageMaker 도메인, 사용자 프로필, Service Catalog 포트폴리오를 배포하고 Amazon EMR 시작 CloudFormation 템플릿을 추가하는 예시 엔드투엔드 CloudFormation 스택이 포함되어 있습니다. 템플릿은 Studio 또는 Studio Classic과 Amazon EMR 클러스터 간에 다양한 인증 옵션을 제공합니다. 이 예시 템플릿에서 상위 CloudFormation 스택은 SageMaker AI VPC, 보안 그룹 및 서브넷 파라미터를 Amazon EMR 클러스터 템플릿에 전달합니다.  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates) 리포지토리에는 단일 계정 및 교차 계정 배포 옵션을 포함하여 다양한 샘플 Amazon EMR CloudFormation 시작 템플릿이 포함되어 있습니다.  
Amazon EMR 클러스터에 연결하는 데 사용할 수 있는 인증 방법에 대한 자세한 내용은 [SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결](connect-emr-clusters.md) 섹션을 참조하세요.

데이터 과학자가 Studio 또는 Studio Classic에서 Amazon EMR CloudFormation 템플릿을 검색하고 클러스터를 프로비저닝하도록 하려면 다음 단계를 따르세요.

## 0단계: 네트워킹 확인 및 CloudFormation 스택 준비
<a name="studio-set-up-emr-prereq"></a>

시작하기 전에:
+ [Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md)의 네트워킹 및 보안 요구 사항을 검토했는지 확인합니다.
+ 선택한 인증 방법을 지원하는 기존 엔드투엔드 CloudFormation 스택이 있어야 합니다. [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 리포지토리에서 CloudFormation 템플릿의 예를 확인할 수 있습니다. 다음 단계에서는 Studio 또는 Studio Classic 내에서 Amazon EMR 템플릿을 사용할 수 있도록 하는 엔드투엔드 스택의 특정 구성을 강조합니다.

## 1단계: Service Catalog 포트폴리오를 SageMaker AI와 연결
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**Service Catalog 포트폴리오에서** 포트폴리오 ID를 클러스터에 액세스하는 SageMaker AI 실행 역할과 연결합니다.

이렇게 하려면 스택에 다음 섹션(여기서는 YAML 형식)을 추가합니다. 이렇게 하면 SageMaker AI 실행 역할이 Amazon EMR 템플릿과 같은 제품이 포함된 지정된 Service Catalog 포트폴리오에 액세스할 수 있습니다. 이를 통해 SageMaker AI가 수임하는 역할이 해당 제품을 시작할 수 있습니다.

 *SageMakerExecutionRole.Arn* 및 *SageMakerStudioEMRProductPortfolio.ID*를 실제 값으로 바꿉니다.

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

필요한 IAM 권한 세트에 대한 자세한 내용은 [권한](#studio-emr-permissions) 섹션을 참조하세요.

## 2단계: Service Catalog 제품의 Amazon EMR 템플릿 참조
<a name="studio-set-up-emr-service-catalog-product"></a>

**포트폴리오의 Service Catalog 제품에서** Amazon EMR 템플릿 리소스를 참조하고 Studio 또는 Studio Classic에서 가시성을 확보합니다.

그러려면 Service Catalog 제품 정의에서 Amazon EMR 템플릿 리소스를 참조한 후, 다음 태그 키 `"sagemaker:studio-visibility:emr"` 세트를 `"true"` 값(YAML 형식 예시 참조)에 추가합니다.

Service Catalog 제품 정의에서 클러스터의 CloudFormation 템플릿은 URL을 통해 참조됩니다. True로 설정된 추가 태그는 Studio 또는 Studio Classic에서 Amazon EMR 템플릿의 가시성을 보장합니다.

**참고**  
예에 제공된 URL에서 참조하는 Amazon EMR 템플릿은 시작할 때 인증 요구 사항을 적용하지 않습니다. 이 옵션은 데모 및 학습을 위한 것입니다. 프로덕션 환경에서는 권장되지 않습니다.

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 3단계: Amazon EMR CloudFormation 템플릿 파라미터화
<a name="studio-set-up-emr-cfn-template"></a>

**Service Catalog 제품 내에서 Amazon EMR 클러스터를 정의하는 데 사용되는 CloudFormation 템플릿**을 사용하면 관리자가 구성 가능한 파라미터를 지정할 수 있습니다. 관리자는 템플릿의 `Parameters` 섹션 내에서 이러한 파라미터의 `Default` 값과 `AllowedValues` 범위를 정의할 수 있습니다. 클러스터 시작 프로세스 중에 데이터 과학자는 사용자 지정 입력을 제공하거나 사전 정의된 옵션 중에서 선택하여 Amazon EMR 클러스터의 특정 측면을 사용자 지정할 수 있습니다.

다음 예는 Amazon EMR 템플릿을 생성할 때 관리자가 설정할 수 있는 추가 입력 파라미터를 보여줍니다.

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

관리자가 Studio 내에서 Amazon EMR CloudFormation 템플릿을 사용할 수 있게 한 후 데이터 과학자는 이를 사용하여 Amazon EMR 클러스터를 자체 프로비저닝할 수 있습니다. 템플릿에 정의된 `Parameters` 섹션은 Studio 또는 Studio Classic 내에서 클러스터를 만드는 양식의 입력 필드로 변환됩니다. 각 파라미터에 대해 데이터 과학자는 입력 상자에 사용자 지정 값을 입력하거나 드롭다운 메뉴에 나열된 사전 정의된 옵션(템플릿에 지정된 `AllowedValues`에 해당함) 중에서 선택할 수 있습니다.

다음 그림은 Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 만들기 위해 CloudFormation Amazon EMR 템플릿에서 조합된 동적 양식을 보여줍니다.

![\[Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 만들기 위해 CloudFormation Amazon EMR 템플릿에서 조합된 동적 양식을 보여주는 그림.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


Amazon EMR 템플릿을 사용하여 Studio 또는 Studio Classic에서 클러스터를 시작하는 방법을 알아보려면 [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 시작하기](studio-notebooks-launch-emr-cluster-from-template.md) 섹션을 방문하세요.

## 4단계: Studio에서 Amazon EMR 클러스터 나열 및 시작을 활성화하는 권한 설정
<a name="studio-emr-permissions"></a>

마지막으로, Studio 또는 Studio Classic에서 실행 중인 기존 Amazon EMR 클러스터를 나열하고 새 클러스터를 자체 프로비저닝할 수 있도록 필요한 IAM 권한을 연결합니다.

이러한 권한을 추가해야 하는 역할은 Studio 또는 Studio Classic과 Amazon EMR이 동일한 계정(*단일 계정* 선택)에 배포되었는지 아니면 다른 계정(*교차 계정* 선택)에 배포되었는지에 따라 다릅니다.

**중요**  
프라이빗 공간에서 시작된 JupyterLab 및 Studio Classic 애플리케이션용 Amazon EMR 클러스터만 검색하고 연결할 수 있습니다. Amazon EMR 클러스터가 Studio 환경과 동일한 AWS 리전에 있는지 확인합니다.

### 단일 계정
<a name="studio-set-up-emr-permissions-singleaccount"></a>

Amazon EMR 클러스터와 Studio 또는 Studio Classic이 동일한 AWS 계정에 배포된 경우 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 연결합니다.

1. **1단계**: 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 가져옵니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

1. **2단계**: Amazon EMR 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 부여합니다.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 Amazon EMR 액세스 및 작업을 허용하는 Amazon EMR 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. **인라인 정책 만들기** 단계를 반복하여 CloudFormation 템플릿을 사용하여 새 Amazon EMR 클러스터를 프로비저닝할 수 있는 권한을 실행 역할에 부여하는 다른 정책을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 클러스터 정책 만들기*를 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

**참고**  
Amazon EMR 클러스터에 대한 역할 기반 액세스 제어(RBAC) 연결 사용자도 [Amazon EMR 클러스터와 Studio가 동일한 계정에 있을 때 런타임 역할 인증을 구성합니다.](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same) 섹션을 참조해야 합니다.

### 교차 계정
<a name="studio-set-up-emr-permissions-crossaccount"></a>

시작하기 전에 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 검색합니다.

SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

Amazon EMR 클러스터와 Studio 또는 Studio Classic이 별도의 AWS 계정에 배포된 경우 두 계정 모두에 대한 권한을 구성합니다.

**참고**  
Amazon EMR 클러스터에 대한 역할 기반 액세스 제어(RBAC) 연결 사용자도 [클러스터와 Studio가 서로 다른 계정에 있는 경우 런타임 역할 인증 구성](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff) 섹션을 참조해야 합니다.

#### Amazon EMR 클러스터 계정에서
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

다음 단계에 따라 Amazon EMR이 배포된 계정(*신뢰하는 계정*이라고도 함)에서 필요한 역할 및 정책을 만듭니다.

1. **1단계**: [Amazon EMR 클러스터 서비스 역할](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)의 ARN을 검색합니다.

   클러스터 서비스 역할의 ARN을 찾는 방법에 대한 자세한 내용은 [AWS 서비스 및 리소스의 Amazon EMR 권한에 대한 AWS 서비스 역할 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)을 참조하세요.

1. **2단계**: 다음 구성으로 `AssumableRole`이라는 사용자 지정 IAM 역할을 만듭니다.
   + 권한: Amazon EMR 리소스에 대한 액세스를 허용하는 데 필요한 권한을 `AssumableRole`에 부여합니다. 이 역할은 교차 계정 액세스와 관련된 시나리오에서 *액세스 역할*이라고도 합니다.
   + 신뢰 관계: 액세스가 필요한 Studio 계정에서 실행 역할(교차 계정 다이어그램의 `SageMakerExecutionRole`)을 수임할 수 있도록 `AssumableRole`에 대한 신뢰 정책을 구성합니다.

   Studio 또는 Studio Classic은 역할을 수임하여 Amazon EMR에서 필요한 권한에 임시로 액세스할 수 있습니다.

   Amazon EMR AWS 계정`AssumableRole`에서 새를 생성하는 방법에 대한 자세한 지침은 다음 단계를 따르세요.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. 왼쪽 탐색 창에서 **정책**을 선택한 다음 **정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 Amazon EMR 액세스 및 작업을 허용하는 Amazon EMR 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 만들기**를 선택합니다.

   1. **역할 만들기** 페이지에서 **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다.

   1. **사용자 지정 신뢰 정책** 섹션의 다음 JSON 문서에 붙여 넣은 다음 **다음**을 선택합니다.

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`를 Studio 계정 ID로, `AmazonSageMaker-ExecutionRole`을 JupyterLab 공간에서 사용하는 실행 역할로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      `studio-account`를 Studio Classic 계정 ID로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. **권한 추가** 페이지에서 방금 만든 권한을 추가하고 **다음**을 선택합니다.

   1. **검토** 페이지에서 역할 이름(예: `AssumableRole`)을 입력하고 선택적으로 설명을 입력합니다.

   1. 역할 세부 정보를 검토하고 **역할 생성**을 선택합니다.

    AWS 계정에서 역할 만들기에 대한 자세한 내용은 [IAM 역할 만들기(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)를 참조하세요.

#### Studio 계정에서
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

Studio가 배포된 계정(*신뢰받는 계정*이라고도 함)에서 클러스터에 액세스하는 SageMaker AI 실행 역할을 신뢰하는 계정의 리소스에 액세스하는 데 필요한 권한으로 업데이트합니다.

1. **1단계**: 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 가져옵니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

1. **2단계**: Amazon EMR 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 부여합니다.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 도메인, 사용자 프로필 및 공간을 업데이트할 수 있는 역할 권한을 부여하는 인라인 정책을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *도메인, 사용자 프로필 및 공간 업데이트 작업 정책*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. **인라인 정책 만들기** 단계를 반복하여 `AssumableRole`을 수임한 다음 역할의 액세스 정책에서 허용하는 작업을 수행할 수 있는 권한을 실행 역할에 부여하는 다른 정책을 추가합니다. `emr-account`를 Amazon EMR 계정 ID로 바꾸고, `AssumableRole`을 Amazon EMR 계정에서 만든 수임 가능한 역할의 이름으로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. **인라인 정책 만들기** 단계를 반복하여 CloudFormation 템플릿을 사용하여 새 Amazon EMR 클러스터를 프로비저닝할 수 있는 권한을 실행 역할에 부여하는 다른 정책을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 클러스터 정책 만들기*를 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. (선택 사항) Studio와 동일한 계정에 배포된 Amazon EMR 클러스터를 나열하도록 허용하려면 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*에 정의된 대로 Studio 실행 역할에 인라인 정책을 추가합니다.

1. **3단계**: 수임 가능한 역할(액세스 역할)을 도메인 또는 사용자 프로필과 연결합니다. Studio의 JupyterLab 사용자는 SageMaker AI 콘솔 또는 제공된 스크립트를 사용할 수 있습니다.

    사용 사례에 해당하는 탭을 선택합니다.

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   SageMaker AI 콘솔을 사용하여 수임 가능한 역할을 사용자 프로필 또는 도메인과 연결하는 방법:

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

   1. 왼쪽 탐색 창에서 **도메인**을 선택한 다음 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 도메인을 선택합니다.

   1. 
      + 도메인에 수임 가능한 역할(액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지의 **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.
      + 사용자 프로필에 수임 가능한 역할(액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지에서 **사용자 프로필** 탭을 선택하고 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 사용자 프로필을 선택합니다. **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.

   1. **편집**을 선택하고 수임 가능한 역할(액세스 역할)의 ARN을 추가합니다.

   1. **제출**을 선택합니다.

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    권한을 업데이트한 SageMaker AI 실행 역할을 사용하여 스페이스에서 시작한 JupyterLab 애플리케이션의 터미널에서 다음 명령을 실행합니다. `domainID`, `user-profile-name`, `emr-accountID` 및 `AssumableRole`([RBAC 런타임 역할]()의 경우 `EMRServiceRole`)을 적절한 값으로 바꿉니다. 이 코드 조각은 SageMaker AI 도메인 내의 특정 사용자 프로필(`client.update_userprofile` 사용) 또는 도메인 설정(`client.update_domain` 사용)에 대한 사용자 프로필 설정을 업데이트합니다. 특히 JupyterLab 애플리케이션이 Amazon EMR 계정 내에서 Amazon EMR 클러스터를 실행하기 위해 특정 IAM 역할(`AssumableRole`)을 수임할 수 있도록 합니다.

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   Studio Classic 실행 역할에 `AssumableRole`의 ARN을 제공합니다. ARN은 시작 시 Jupyter 서버에서 로드됩니다. Studio에서 사용하는 실행 역할은 *신뢰하는 계정*에서 Amazon EMR 클러스터를 검색하고 연결하는 교차 계정 역할을 수임합니다.

   수명 주기 구성(LCC) 스크립트를 사용하여 이 정보를 지정할 수 있습니다. LCC를 도메인 또는 특정 사용자 프로필에 연결할 수 있습니다. 사용하는 LCC 스크립트는 JupyterServer 구성이어야 합니다. LCC 스크립트를 만드는 방법에 대한 자세한 내용은 [Use Lifecycle Configurations with Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)을 참조하세요.

   다음은 예제 LCC 스크립트입니다. 스크립트를 수정하려면 `AssumableRole` 및 `emr-account`를 각각 실제 값으로 바꿉니다. 교차 계정의 수는 5개로 제한됩니다.

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    LCC가 실행되고 파일이 기록되면 서버는 파일 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json`을 읽고 교차 계정 ARN을 저장합니다.

------

# Amazon EMR 클러스터 나열 구성
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

관리자는 SageMaker Studio 실행 역할에 대한 권한을 구성하여 사용자에게 액세스할 수 있는 Amazon EMR 클러스터 목록을 볼 수 있는 권한을 부여하여 이러한 클러스터에 연결하도록 허용할 수 있습니다. 액세스하려는 클러스터는 Studio와 동일한 AWS 계정(*단일 계정 선택*) 또는 별도의 계정(*교차 계정 선택)에 배포할 수 있습니다*. 이어지는 페이지에서는 Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 볼 수 있는 권한을 부여하는 방법을 설명합니다.

**중요**  
프라이빗 공간에서 시작된 JupyterLab 및 Studio Classic 애플리케이션용 Amazon EMR 클러스터만 검색하고 연결할 수 있습니다. Amazon EMR 클러스터가 Studio 환경과 동일한 AWS 리전에 있는지 확인합니다.

데이터 과학자가 Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 검색한 다음 연결할 수 있도록 하려면 다음 단계를 따르세요.

## 단일 계정
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

Amazon EMR 클러스터와 Studio 또는 Studio Classic이 동일한 AWS 계정에 배포된 경우 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 연결합니다.

1. **1단계**: 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 가져옵니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

1. **2단계**: Amazon EMR 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 부여합니다.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 Amazon EMR 액세스 및 작업을 허용하는 Amazon EMR 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

**참고**  
Amazon EMR 클러스터에 대한 역할 기반 액세스 제어(RBAC) 연결 사용자도 [Amazon EMR 클러스터와 Studio가 동일한 계정에 있을 때 런타임 역할 인증을 구성합니다.](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same) 섹션을 참조해야 합니다.

## 교차 계정
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

시작하기 전에 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 검색합니다.

SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

Amazon EMR 클러스터와 Studio 또는 Studio Classic을 서로 다른 AWS 계정에 배포하는 경우 두 계정 모두에서 권한을 구성합니다.

**참고**  
Amazon EMR 클러스터에 대한 역할 기반 액세스 제어(RBAC) 연결 사용자도 [클러스터와 Studio가 서로 다른 계정에 있는 경우 런타임 역할 인증 구성](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff) 섹션을 참조해야 합니다.

**Amazon EMR 클러스터 계정에서**

다음 단계에 따라 Amazon EMR이 배포된 계정(*신뢰하는 계정*이라고도 함)에서 필요한 역할 및 정책을 만듭니다.

1. **1단계**: [Amazon EMR 클러스터 서비스 역할](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)의 ARN을 검색합니다.

   클러스터 서비스 역할의 ARN을 찾는 방법에 대한 자세한 내용은 [AWS 서비스 및 리소스의 Amazon EMR 권한에 대한 AWS 서비스 역할 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)을 참조하세요.

1. **2단계**: 다음 구성으로 `AssumableRole`이라는 사용자 지정 IAM 역할을 만듭니다.
   + 권한: Amazon EMR 리소스에 대한 액세스를 허용하는 데 필요한 권한을 `AssumableRole`에 부여합니다. 이 역할은 교차 계정 액세스와 관련된 시나리오에서 *액세스 역할*이라고도 합니다.
   + 신뢰 관계: 액세스가 필요한 Studio 계정에서 실행 역할(교차 계정 다이어그램의 `SageMakerExecutionRole`)을 수임할 수 있도록 `AssumableRole`에 대한 신뢰 정책을 구성합니다.

   Studio 또는 Studio Classic은 역할을 수임하여 Amazon EMR에서 필요한 권한에 임시로 액세스할 수 있습니다.

   Amazon EMR AWS 계정`AssumableRole`에서 새를 생성하는 방법에 대한 자세한 지침은 다음 단계를 따르세요.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. 왼쪽 탐색 창에서 **정책**을 선택한 다음 **정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 Amazon EMR 액세스 및 작업을 허용하는 Amazon EMR 권한을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 만들기**를 선택합니다.

   1. **역할 만들기** 페이지에서 **사용자 지정 신뢰 정책**을 신뢰할 수 있는 엔터티로 선택합니다.

   1. **사용자 지정 신뢰 정책** 섹션의 다음 JSON 문서에 붙여 넣은 다음 **다음**을 선택합니다.

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`를 Studio 계정 ID로, `AmazonSageMaker-ExecutionRole`을 JupyterLab 공간에서 사용하는 실행 역할로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      `studio-account`를 Studio Classic 계정 ID로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. **권한 추가** 페이지에서 방금 만든 권한을 추가하고 **다음**을 선택합니다.

   1. **검토** 페이지에서 역할 이름(예: `AssumableRole`)을 입력하고 선택적으로 설명을 입력합니다.

   1. 역할 세부 정보를 검토하고 **역할 생성**을 선택합니다.

    AWS 계정에서 역할을 생성하는 방법에 대한 자세한 내용은 [IAM 역할 생성(콘솔)을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).

**Studio 계정에서**

Studio가 배포된 계정(*신뢰받는 계정*이라고도 함)에서 클러스터에 액세스하는 SageMaker AI 실행 역할을 신뢰하는 계정의 리소스에 액세스하는 데 필요한 권한으로 업데이트합니다.

1. **1단계**: 프라이빗 스페이스에서 사용하는 SageMaker AI 실행 역할의 ARN을 가져옵니다.

   SageMaker AI의 스페이스 및 실행 역할에 대한 자세한 내용은 [도메인 공간 권한 및 실행 역할 이해](execution-roles-and-spaces.md) 섹션을 참조하세요.

   SageMaker AI의 실행 역할 ARN을 검색하는 방법에 대한 자세한 내용은 [실행 역할을 가져옵니다.](sagemaker-roles.md#sagemaker-roles-get-execution-role) 섹션을 참조하세요.

1. **2단계**: Amazon EMR 클러스터에 액세스하는 SageMaker AI 실행 역할에 다음 권한을 부여합니다.

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. **역할**을 선택한 다음 **검색** 필드에서 이름으로 실행 역할을 검색합니다. 역할 이름은 마지막 슬래시(/) 뒤에 있는 ARN의 마지막 부분입니다.

   1. 역할의 링크를 따라갑니다.

   1. **권한 추가**를 선택한 후 **인라인 정책 만들기**를 선택합니다.

   1. **JSON** 탭에서 도메인, 사용자 프로필 및 공간을 업데이트할 수 있는 역할 권한을 부여하는 인라인 정책을 추가합니다. 정책 문서에 대한 자세한 내용은 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *도메인, 사용자 프로필 및 공간 업데이트 작업 정책*을 참조하세요. 문 목록을 역할의 인라인 정책에 복사하기 전에 `region`, `accountID`를 실제 값으로 바꿉니다.

   1. **다음**을 선택한 다음 **정책 이름**을 입력합니다.

   1. **정책 생성**을 선택합니다.

   1. **인라인 정책 만들기** 단계를 반복하여 `AssumableRole`을 수임한 다음 역할의 액세스 정책에서 허용하는 작업을 수행할 수 있는 권한을 실행 역할에 부여하는 다른 정책을 추가합니다. `emr-account`를 Amazon EMR 계정 ID로 바꾸고, `AssumableRole`을 Amazon EMR 계정에서 만든 수임 가능한 역할의 이름으로 바꿉니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. (선택 사항) Studio와 동일한 계정에 배포된 Amazon EMR 클러스터를 나열하도록 허용하려면 [참조 정책](studio-set-up-emr-permissions-reference.md)의 *Amazon EMR 정책 나열*에 정의된 대로 Studio 실행 역할에 인라인 정책을 추가합니다.

1. **3단계**: 수임 가능한 역할(액세스 역할)을 도메인 또는 사용자 프로필과 연결합니다. Studio의 JupyterLab 사용자는 SageMaker AI 콘솔 또는 제공된 스크립트를 사용할 수 있습니다.

    사용 사례에 해당하는 탭을 선택합니다.

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   SageMaker AI 콘솔을 사용하여 수임 가능한 역할을 사용자 프로필 또는 도메인과 연결하는 방법:

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

   1. 왼쪽 탐색 창에서 **도메인**을 선택한 다음 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 도메인을 선택합니다.

   1. 
      + 도메인에 수임 가능한 역할(액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지의 **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.
      + 사용자 프로필에 수임 가능한 역할(액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지에서 **사용자 프로필** 탭을 선택하고 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 사용자 프로필을 선택합니다. **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.

   1. **편집**을 선택하고 수임 가능한 역할(액세스 역할)의 ARN을 추가합니다.

   1. **제출**을 선택합니다.

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    권한을 업데이트한 SageMaker AI 실행 역할을 사용하여 스페이스에서 시작한 JupyterLab 애플리케이션의 터미널에서 다음 명령을 실행합니다. `domainID`, `user-profile-name`, `emr-accountID` 및 `AssumableRole`([RBAC 런타임 역할]()의 경우 `EMRServiceRole`)을 적절한 값으로 바꿉니다. 이 코드 조각은 SageMaker AI 도메인 내의 특정 사용자 프로필(`client.update_userprofile` 사용) 또는 도메인 설정(`client.update_domain` 사용)에 대한 사용자 프로필 설정을 업데이트합니다. 특히 JupyterLab 애플리케이션이 Amazon EMR 계정 내에서 Amazon EMR 클러스터를 실행하기 위해 특정 IAM 역할(`AssumableRole`)을 수임할 수 있도록 합니다.

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   Studio Classic 실행 역할에 `AssumableRole`의 ARN을 제공합니다. ARN은 시작 시 Jupyter 서버에서 로드됩니다. Studio에서 사용하는 실행 역할은 *신뢰하는 계정*에서 Amazon EMR 클러스터를 검색하고 연결하는 교차 계정 역할을 수임합니다.

   수명 주기 구성(LCC) 스크립트를 사용하여 이 정보를 지정할 수 있습니다. LCC를 도메인 또는 특정 사용자 프로필에 연결할 수 있습니다. 사용하는 LCC 스크립트는 JupyterServer 구성이어야 합니다. LCC 스크립트를 만드는 방법에 대한 자세한 내용은 [Use Lifecycle Configurations with Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)을 참조하세요.

   다음은 예제 LCC 스크립트입니다. 스크립트를 수정하려면 `AssumableRole` 및 `emr-account`를 각각 실제 값으로 바꿉니다. 교차 계정의 수는 5개로 제한됩니다.

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    LCC가 실행되고 파일이 기록되면 서버는 파일 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json`을 읽고 교차 계정 ARN을 저장합니다.

------

Studio 또는 Studio Classic 노트북에서 Amazon EMR 클러스터를 검색하고 연결하는 방법을 알아보려면 [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열](discover-emr-clusters.md) 섹션을 참조하세요.

# Studio에서 Amazon EMR 클러스터 액세스를 위한 IAM 런타임 역할 구성
<a name="studio-notebooks-emr-cluster-rbac"></a>

Studio 또는 Studio Classic 노트북에서 Amazon EMR 클러스터에 연결하면 런타임 역할이라고 하는 IAM 역할 목록을 시각적으로 탐색하고 즉시 하나를 선택할 수 있습니다. 이후 노트북에서 만든 모든 Apache Spark, Apache Hive 또는 Presto 작업은 런타임 역할에 첨부된 정책에서 허용하는 데이터 및 리소스에만 액세스합니다. 또한 로 관리되는 데이터 레이크에서 데이터에 액세스할 때 런타임 역할에 연결된 정책을 사용하여 테이블 수준 및 열 수준 액세스를 적용할 AWS Lake Formation수 있습니다.

이 기능을 사용하면 팀원과 함께 동일한 클러스터에 연결할 수 있습니다. 각각은 데이터에 대한 개별 액세스 수준에 맞는 권한 범위가 지정된 런타임 역할을 사용합니다. 또한 클러스터 공유에서는 세션이 서로 격리됩니다.

Studio Classic을 사용하여이 기능을 시도하려면 [AWS Lake Formation 및 Amazon SageMaker Studio Classic의 Amazon EMR을 사용하여 세분화된 데이터 액세스 제어 적용을 ](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)참조하세요. 이 블로그 게시물은 사전 구성된 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결해 볼 수 있는 데모 환경을 설정하는 데 도움이 됩니다.

## 사전 조건
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

시작하기 전에 다음 사전 조건을 충족하는지 확인합니다.
+ Amazon EMR 버전 6.9 이상을 사용하세요.
+ **Studio Classic 사용자의 경우**: Studio Classic Jupyter 서버 애플리케이션 구성에서 JupyterLab 버전 3을 사용합니다. 이 버전은 런타임 역할을 사용하여 Amazon EMR 클러스터에 대한 Studio Classic 연결을 지원합니다.

  **Studio 사용자의 경우:** [SageMaker 배포 이미지](sagemaker-distribution.md) 버전 `1.10` 이상을 사용합니다.
+ 클러스터의 보안 구성에서 런타임 역할을 사용할 수 있도록 허용하세요. 자세한 내용은 [Amazon EMR 단계에 대한 런타임 역할](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)을 참조하세요.
+ [Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 지원되는 이미지 및 커널](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)에 나열된 커널 중 하나를 사용하여 노트북을 생성하세요.
+ 런타임 역할을 구성하려면 [런타임 IAM 역할을 사용하도록 Studio 설정](#studio-notebooks-emr-cluster-iam)의 지침을 검토하세요.

## 교차 계정 연결 시나리오
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

런타임 역할 인증은 데이터가 Studio 계정 외부에 있는 경우 다양한 교차 계정 연결 시나리오를 지원합니다. 다음 이미지는 Studio와 데이터 계정 간에 Amazon EMR 클러스터, 데이터 및 Amazon EMR 런타임 실행 역할을 할당할 수 있는 세 가지 방법을 보여줍니다.

![\[런타임 IAM 역할 인증으로 지원되는 교차 계정 시나리오.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


옵션 1에서 Amazon EMR 클러스터 및 Amazon EMR 런타임 실행 역할은 Studio 계정과 별개의 데이터 계정에 있습니다. Studio 또는 Studio Classic 실행 역할에 Amazon EMR 액세스 역할(`Assumable role`이라고도 함)을 수임할 권한을 부여하는 별도의 Amazon EMR 액세스 역할 권한 정책을 정의합니다. 그러면 Amazon EMR 액세스 역할이 Studio 또는 Studio Classic 실행 역할을 대신하여 Amazon EMR API `GetClusterSessionCredentials`을 직접 호출하여 클러스터에 대한 액세스를 제공합니다.

옵션 2에서는 Amazon EMR 클러스터와 Amazon EMR 런타임 실행 역할이 Studio 계정에 있습니다. Studio 실행 역할에는 Amazon EMR API `GetClusterSessionCredentials`를 사용하여 클러스터에 액세스할 수 있는 권한이 있습니다. Amazon S3 버킷에 액세스하려면 Amazon EMR 런타임 실행 역할에 교차 계정 Amazon S3 버킷 액세스 권한을 부여하세요. Amazon S3 버킷 정책 내에서 이러한 권한을 부여하면 됩니다.

옵션 3에서 Amazon EMR 클러스터는 Studio 계정에 있고 Amazon EMR 런타임 실행 역할은 데이터 계정에 있습니다. Studio 또는 Studio Classic 실행 역할에는 Amazon EMR API `GetClusterSessionCredentials`을 사용하여 클러스터에 액세스할 수 있는 권한이 있습니다. Amazon EMR 런타임 실행 역할을 실행 역할 구성 JSON에 추가합니다. 그러면 클러스터를 선택할 때 UI에서 역할을 선택할 수 있습니다. 실행 역할 구성 JSON 파일을 설정하는 방법에 대한 자세한 내용은 [실행 역할을 Studio 또는 Studio Classic에 미리 로드](#studio-notebooks-emr-cluster-iam-preload) 섹션을 참조하세요.

## 런타임 IAM 역할을 사용하도록 Studio 설정
<a name="studio-notebooks-emr-cluster-iam"></a>

Amazon EMR 클러스터의 런타임 역할 인증을 설정하려면 필수 IAM 정책, 네트워크 및 사용성 개선을 구성하세요. 설정은 Amazon EMR 클러스터, Amazon EMR 런타임 실행 역할 또는 둘 다 Studio 계정 외부에 있는 경우 교차 계정 방식을 처리하는지 여부에 따라 달라집니다. 다음 섹션에서는 설치 정책, 교차 계정 간 트래픽을 허용하도록 네트워크를 구성하는 방법, Amazon EMR 연결을 자동화하도록 설정하는 로컬 구성 파일을 안내합니다.

### Amazon EMR 클러스터와 Studio가 동일한 계정에 있을 때 런타임 역할 인증을 구성합니다.
<a name="studio-notebooks-emr-cluster-iam-same"></a>

Amazon EMR 클러스터가 Studio 계정에 있는 경우 다음 단계를 완료하여 Studio 실행 정책에 필요한 권한을 추가합니다.

1. Amazon EMR 클러스터에 연결하는 데 필요한 IAM 정책을 추가합니다. 자세한 내용은 [Amazon EMR 클러스터 나열 구성](studio-notebooks-configure-discoverability-emr-cluster.md)을 참조하세요.

1. 정책에 지정된 하나 이상의 허용된 Amazon EMR 런타임 실행 역할을 전달할 때 Amazon EMR API `GetClusterSessionCredentials`을 직접 호출할 권한을 부여합니다.

1. (선택 사항) 사용자 지정 명명 규칙을 따르는 IAM 역할을 전달할 권한을 부여합니다.

1. (선택 사항) 특정 사용자 지정 문자열로 태그가 지정된 Amazon EMR 클러스터에 액세스할 수 있는 권한을 부여합니다.

1. Amazon EMR 클러스터에 연결할 때 사용할 역할을 선택할 수 있도록 IAM 역할을 미리 로드합니다. IAM 역할을 미리 로드하는 방법에 대한 자세한 내용은 [실행 역할을 Studio 또는 Studio Classic에 미리 로드](#studio-notebooks-emr-cluster-iam-preload) 섹션을 참조하세요.

다음 예시 정책은 모델링 및 훈련 그룹에 속하는 Amazon EMR 런타임 실행 역할이 `GetClusterSessionCredentials`을 직접 호출하도록 허용합니다. 또한 정책 소유자는 문자열 `modeling` 또는 `training` 태그가 지정된 Amazon EMR 클러스터에 액세스할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### 클러스터와 Studio가 서로 다른 계정에 있는 경우 런타임 역할 인증 구성
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

Amazon EMR 클러스터가 Studio 계정에 없는 경우, SageMaker AI 실행 역할이 교차 계정 Amazon EMR 액세스 역할을 수임하도록 허용하면 클러스터에 연결할 수 있습니다. 교차 계정 구성을 설정하려면 다음 단계를 완료하세요.

1. 실행 역할이 Amazon EMR 액세스 역할을 수임할 수 있도록 SageMaker AI 실행 역할 권한 정책을 만듭니다. 다음은 정책의 예입니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 신뢰 정책을 생성하여 Amazon EMR 액세스 역할을 수임하도록 신뢰할 수 있는 Studio 계정 ID를 지정합니다. 다음은 정책의 예입니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. Amazon EMR 액세스 역할 권한 정책을 만들어 Amazon EMR 런타임 실행 역할에 클러스터에서 의도한 작업을 수행하는 데 필요한 권한을 부여합니다. 액세스 역할 권한 정책에 지정된 Amazon EMR 런타임 실행 역할을 사용하여 API `GetClusterSessionCredentials`을 직접 호출하도록 Amazon EMR 액세스 역할을 구성합니다. 다음은 정책의 예입니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 트래픽이 계정 간에 앞뒤로 이동할 수 있도록 교차 계정 네트워크를 설정하세요. 관련 지침은 *[Amazon EMR 클러스터에 대한 네트워크 액세스 구성](studio-notebooks-emr-networking.md)*를 참조하세요. 이 섹션에서 다루는 단계는 다음 작업을 완료하는 데 도움이 됩니다.

   1. Studio 계정과 Amazon EMR 계정을 VPC 피어링하여 연결을 설정합니다.

   1. 두 계정의 프라이빗 서브넷 라우팅 테이블에 경로를 수동으로 추가합니다. 이를 통해 Studio 계정에서 원격 계정의 프라이빗 서브넷으로 Amazon EMR 클러스터를 생성하고 연결할 수 있습니다.

   1. 아웃바운드 트래픽을 허용하도록 Studio 도메인에 연결된 보안 그룹과 Studio 인스턴스 보안 그룹의 인바운드 TCP 트래픽을 허용하도록 Amazon EMR 기본 노드의 보안 그룹을 설정합니다.

1. Amazon EMR 클러스터에 연결할 때 사용할 역할을 선택할 수 있도록 IAM 런타임 역할을 미리 로드합니다. IAM 역할을 미리 로드하는 방법에 대한 자세한 내용은 [실행 역할을 Studio 또는 Studio Classic에 미리 로드](#studio-notebooks-emr-cluster-iam-preload) 섹션을 참조하세요.

### Lake Formation 액세스 구성
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

에서 관리하는 데이터 레이크에서 데이터에 액세스할 때 런타임 역할에 연결된 정책을 사용하여 테이블 수준 및 열 수준 액세스를 적용할 AWS Lake Formation수 있습니다. Lake Formation 액세스 권한을 구성하려면 [AWS Lake Formation과 Amazon EMR 통합](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)을 참조하세요.

### 실행 역할을 Studio 또는 Studio Classic에 미리 로드
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

Amazon EMR 클러스터에 연결할 때 사용할 역할을 선택할 수 있도록 IAM 런타임 역할을 미리 로드할 수 있습니다. Studio의 JupyterLab 사용자는 SageMaker AI 콘솔 또는 제공된 스크립트를 사용할 수 있습니다.

------
#### [ Preload runtime roles in JupyterLab using the SageMaker AI console ]

SageMaker AI 콘솔을 사용하여 런타임 역할을 사용자 프로필 또는 도메인과 연결하는 방법:

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **도메인**을 선택한 다음 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 도메인을 선택합니다.

1. 
   + 도메인에 런타임 역할(및 교차 계정 사용 사례의 액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지의 **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.
   + 사용자 프로필에 런타임 역할(및 교차 계정 사용 사례의 액세스 역할)을 추가하는 방법: **도메인 세부 정보** 페이지에서 **사용자 프로필** 탭을 선택하고 업데이트된 권한이 있는 SageMaker AI 실행 역할을 사용하는 사용자 프로필을 선택합니다. **앱 구성** 탭에서 **JupyterLab** 섹션으로 이동합니다.

1. **편집**을 선택하고 액세스 역할(수임 가능한 역할) 및 EMR Serverless 런타임 실행 역할의 ARN을 추가합니다.

1. **제출**을 선택합니다.

다음에 Amazon EMR 서버에 연결할 때 드롭다운 메뉴에 런타임 역할이 표시되어 선택할 수 있습니다.

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

권한을 업데이트한 SageMaker AI 실행 역할을 사용하여 스페이스에서 시작한 JupyterLab 애플리케이션의 터미널에서 다음 명령을 실행합니다. `domainID`, `user-profile-name`, `emr-accountID` 및 `EMRServiceRole`을 적절한 값으로 바꿉니다. 이 코드 조각은 교차 계정 사용 사례에서 SageMaker AI 도메인 내의 사용자 프로필 설정(`client.update_user_profile`)을 업데이트합니다. 구체적으로, Amazon EMR에 대한 서비스 역할을 설정합니다. 또한 JupyterLab 애플리케이션이 Amazon EMR 계정 내에서 Amazon EMR을 실행하기 위해 특정 IAM 역할(`AssumableRole` 또는 `AccessRole`)을 수임할 수 있도록 합니다.

또는 공간이 도메인 수준에서 실행 역할 세트를 사용하는 경우 `client.update_domain`을 사용하여 도메인 설정을 업데이트합니다.

```
import botocore.session
import json
sess = botocore.session.get_session()
client = sess.create_client('sagemaker')

client.update_user_profile(
DomainId="domainID", 
UserProfileName="user-profile-name",
UserSettings={
    'JupyterLabAppSettings': {
        'EmrSettings': {
            'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
            'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                             "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
        }
        
    }
})
resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")

resp['CreationTime'] = str(resp['CreationTime'])
resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
print(json.dumps(resp, indent=2))
```

------
#### [ Preload runtime roles in Studio Classic ]

`AccessRole`(`AssumableRole`)의 ARN을 SageMaker AI 실행 역할에 제공합니다. ARN은 시작 시 Jupyter 서버에서 로드됩니다. Studio에서 사용하는 실행 역할은 *신뢰하는 계정*에서 Amazon EMR 클러스터를 검색하고 연결하는 교차 계정 역할을 수임합니다.

수명 주기 구성(LCC) 스크립트를 사용하여 이 정보를 지정할 수 있습니다. LCC를 도메인 또는 특정 사용자 프로필에 연결할 수 있습니다. 사용하는 LCC 스크립트는 JupyterServer 구성이어야 합니다. LCC 스크립트를 만드는 방법에 대한 자세한 내용은 [Use Lifecycle Configurations with Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)을 참조하세요.

다음은 예제 LCC 스크립트입니다. 스크립트를 수정하려면 `AssumableRole` 및 `emr-account`를 각각 실제 값으로 바꿉니다. 교차 계정의 수는 5개로 제한됩니다.

다음 코드 조각은 Studio Classic 애플리케이션과 클러스터가 동일한 계정에 있는 경우 적용할 수 있는 예시 LCC bash 스크립트입니다.

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

Studio Classic 애플리케이션과 클러스터가 서로 다른 계정에 있는 경우 클러스터를 사용할 수 있는 Amazon EMR 액세스 역할을 지정합니다. 다음 예시 정책에서 *123456789012*는 Amazon EMR 클러스터 계정 ID이고, *212121212121*과 *434343434343*은 허용된 Amazon EMR 액세스 역할에 대한 ARN입니다.

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# 참조 정책
<a name="studio-set-up-emr-permissions-reference"></a>
+ **Amazon EMR 정책 나열**: 이 정책은 다음 작업을 수행하도록 허용합니다.
  + `AllowPresignedUrl`은 Studio 내에서 Spark UI에 액세스하기 위해 미리 서명된 URL을 생성하도록 허용합니다.
  + `AllowClusterDiscovery` 및 `AllowClusterDetailsDiscovery`는 제공된 리전 및 계정에서 Amazon EMR 클러스터를 나열하고 설명하도록 허용합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **Amazon EMR 클러스터 정책 만들기**: 이 정책은 다음 작업을 수행하도록 허용합니다.
  + `AllowEMRTemplateDiscovery`는 Service Catalog에서 Amazon EMR 템플릿을 검색하도록 허용합니다. Studio 및 Studio Classic은 이를 사용하여 사용 가능한 템플릿을 표시합니다.
  + `AllowSagemakerProjectManagement`는 [SageMaker AI 프로젝트는 무엇인가요?](sagemaker-projects-whatis.md) 만들기를 허용합니다. Studio 또는 Studio Classic에서에 대한 액세스 AWS Service Catalog 는를 통해 관리됩니다[SageMaker AI 프로젝트는 무엇인가요?](sagemaker-projects-whatis.md).

  제공된 JSON에 정의된 IAM 정책은 이러한 권한을 부여합니다. 문 목록을 역할의 인라인 정책에 복사하기 전에 *region*, *accountID*를 실제 리전과 AWS 계정의 ID 값으로 바꿉니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **도메인, 사용자 프로필 및 스페이스 업데이트 작업 정책**: 다음 정책은 지정된 리전 및 AWS 계정 내의 SageMaker AI 도메인, 사용자 프로필 및 스페이스를 업데이트할 수 있는 권한을 부여합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# 사용 설명서
<a name="studio-emr-user-guide"></a>

이 섹션에서는 데이터 과학자와 데이터 엔지니어가 Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 시작, 검색, 연결 또는 종료하는 방법을 다룹니다.

사용자가 클러스터를 나열하거나 시작하려면 먼저 관리자가 Studio 환경에서 필요한 설정을 구성해야 합니다. 관리자가 Amazon EMR 클러스터의 자체 프로비저닝 및 나열을 허용하도록 Studio 환경을 구성하는 방법에 대한 자세한 내용은 [관리자 안내서](studio-emr-admin-guide.md) 섹션을 참조하세요.

**Topics**
+ [Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 지원되는 이미지 및 커널](#studio-notebooks-emr-cluster-connect-kernels)
+ [사용자 고유 이미지 가져오기](#studio-notebooks-emr-byoi)
+ [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 시작하기](studio-notebooks-launch-emr-cluster-from-template.md)
+ [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열](discover-emr-clusters.md)
+ [SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결](connect-emr-clusters.md)
+ [Studio에서 Amazon EMR 클러스터 종료](terminate-emr-clusters.md)
+ [Studio 또는 Studio Classic에서 Spark UI 액세스](studio-notebooks-access-spark-ui.md)

## Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 지원되는 이미지 및 커널
<a name="studio-notebooks-emr-cluster-connect-kernels"></a>

다음 이미지와 커널에는 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)이 함께 제공되는데 이는 [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) 라이브러리를 통해 [Apache Livy](https://livy.apache.org/)를 사용하여 원격 Spark(Amazon EMR) 클러스터에 연결하는 JupyterLab 확장입니다.
+ **Studio 사용자의 경우:** SageMaker Distribution은 JupyterLab 노트북 인스턴스의 기본 이미지로 사용되는 데이터 과학용 Docker 환경입니다. [SageMaker AI Distribution](https://github.com/aws/sagemaker-distribution)의 모든 버전에는 `sagemaker-studio-analytics-extension`이 사전 설치된 상태로 제공됩니다.
+ **Studio Classic 사용자의 경우:** 다음 이미지가 `sagemaker-studio-analytics-extension`과 함께 사전 설치됩니다.
  + DataScience – Python 3 커널
  + DataScience 2.0 – Python 3 커널
  + DataScience 3.0 – Python 3 커널
  + SparkAnalytics 1.0 – SparkMagic 및 PySpark 커널
  + SparkAnalytics 2.0 – SparkMagic 및 PySpark 커널
  + SparkMagic – SparkMagic 및 PySpark 커널
  + PyTorch 1.8 – Python 3 커널
  + TensorFlow 2.6 – Python 3 커널
  + TensorFlow 2.11 – Python 3 커널

다른 내장 이미지 또는 자체 이미지를 사용하여 Amazon EMR 클러스터에 연결하려면 [사용자 고유 이미지 가져오기](#studio-notebooks-emr-byoi)의 지침을 따릅니다.

## 사용자 고유 이미지 가져오기
<a name="studio-notebooks-emr-byoi"></a>

Studio 또는 Studio Classic에서 사용자 자체 이미지를 가져와 Amazon EMR 클러스터에 노트북을 연결하려면 커널에 다음 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) 확장을 설치합니다. 이는 [SparkMagic](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html) 라이브러리를 통해 Spark(Amazon EMR) 클러스터에 SageMaker Studio 또는 Studio Classic 노트북을 연결할 수 있도록 지원합니다.

```
pip install sparkmagic
pip install sagemaker-studio-sparkmagic-lib
pip install sagemaker-studio-analytics-extension
```

또한 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html) 인증을 사용하여 Amazon EMR에 연결하려면 kinit 클라이언트를 설치해야 합니다. OS에 따라 kinit 클라이언트를 설치하는 명령이 다를 수 있습니다. Ubuntu(Debian 기반) 이미지를 가져오려면 `apt-get install -y -qq krb5-user` 명령을 사용합니다.

SageMaker Studio 또는 Studio Classic에서 사용자 자체 이미지를 가져오는 방법에 대한 자세한 정보는 [Bring your own SageMaker image](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)를 참조하세요.

# Studio 또는 Studio Classic에서 Amazon EMR 클러스터 시작하기
<a name="studio-notebooks-launch-emr-cluster-from-template"></a>

데이터 과학자와 데이터 엔지니어는 관리자가 설정한 CloudFormation 템플릿을 사용하여 Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 자체 프로비저닝할 수 있습니다. 사용자가 클러스터를 시작하려면 먼저 관리자가 Studio 환경에서 필요한 설정을 구성해야 합니다. 관리자가 Amazon EMR 클러스터의 자체 프로비저닝을 허용하도록 Studio 환경을 구성하는 방법에 대한 자세한 내용은 [Service Catalog에서 Amazon EMR CloudFormation 템플릿 구성](studio-notebooks-set-up-emr-templates.md) 섹션을 참조하세요.

Studio 또는 Studio Classic에서 새 Amazon EMR 클러스터를 프로비저닝하는 방법:

1. Studio 또는 Studio Classic UI의 왼쪽 패널에 있는 왼쪽 탐색 메뉴에서 **데이터** 노드를 선택합니다. **Amazon EMR 클러스터**로 이동합니다. 그러면 Studio 또는 Studio Classic에서 액세스할 수 있는 Amazon EMR 클러스터가 나열된 페이지가 열립니다.

1. 오른쪽 상단 모서리에서 **만들기** 버튼을 선택합니다. 그러면 사용 가능한 클러스터 템플릿이 나열된 새 모달이 열립니다.

1. 템플릿 이름을 선택하여 클러스터 템플릿을 선택한 후, **다음**을 선택합니다.

1. 클러스터 이름, 관리자가 설정한 구성 가능한 특정 파라미터 등 클러스터의 세부 정보를 입력한 다음 **클러스터 만들기**를 선택합니다. 클러스터를 생성하는 데 몇 분 정도 걸릴 수 있습니다.  
![\[Studio 또는 Studio Classic에서 Amazon EMR 클러스터를 만드는 양식\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)

클러스터가 프로비저닝되면 Studio 또는 Studio Classic UI에 *클러스터가 성공적으로 만들어졌습니다*라는 메시지가 표시됩니다.

클러스터에 연결하려면 [SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결](connect-emr-clusters.md) 섹션을 참조하세요.

# Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열
<a name="discover-emr-clusters"></a>

데이터 과학자와 데이터 엔지니어는 Studio에서 Amazon EMR 클러스터를 검색, 연결 및 관리할 수 있습니다. Amazon EMR 클러스터는 Studio와 동일한 AWS 계정 또는 다른 AWS 계정에 있을 수 있습니다.

사용자가 클러스터를 나열하거나 클러스터에 연결하려면 먼저 관리자가 Studio 환경에서 필요한 설정을 구성해야 합니다. 관리자가 실행 중인 Amazon EMR 클러스터의 검색을 허용하도록 Studio 환경을 구성하는 방법에 대한 자세한 내용은 [관리자 안내서](studio-emr-admin-guide.md) 섹션을 참조하세요. 관리자가 [Amazon EMR 클러스터의 교차 계정 검색을 구성](studio-notebooks-configure-discoverability-emr-cluster.md)한 경우 통합된 클러스터 목록을 볼 수 있습니다. 목록에는 Studio에서 사용하는 AWS 계정의 클러스터와 액세스 권한이 부여된 원격 계정의 클러스터가 포함됩니다.

Studio 내에서 사용 가능한 Amazon EMR 클러스터 목록을 확인하는 방법:

1. Studio UI의 왼쪽 탐색 메뉴에서 아래로 스크롤하여 **EMR 클러스터**로 이동합니다. 그러면 액세스할 수 있는 Amazon EMR 클러스터가 나열된 페이지가 열립니다.

   목록에는 **부트스트래핑**, **시작 중**, **실행 중**, **대기 중** 상태의 클러스터가 표시됩니다. 필터 아이콘을 사용하여 현재 상태별로 표시된 클러스터의 범위를 좁힐 수 있습니다.

1. 연결하려는 특정 **실행 중** 클러스터를 선택한 다음 [SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결](connect-emr-clusters.md) 섹션을 참조하세요.

# SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결
<a name="connect-emr-clusters"></a>

데이터 과학자와 데이터 엔지니어는 Studio 사용자 인터페이스에서 직접 Amazon EMR 클러스터를 검색한 다음 연결할 수 있습니다. 시작하기 전에 [4단계: Studio에서 Amazon EMR 클러스터 나열 및 시작을 활성화하는 권한 설정](studio-notebooks-set-up-emr-templates.md#studio-emr-permissions) 섹션에 설명된 대로 필요한 권한을 구성했는지 확인합니다. 이러한 권한은 Studio에 클러스터에 대한 만들기, 시작, 보기, 액세스 및 종료 권한을 부여합니다.

Amazon EMR 클러스터를 Studio UI에서 직접 새 JupyterLab 노트북에 연결하거나 실행 중인 JupyterLab 애플리케이션의 노트북에서 연결을 시작하도록 선택할 수 있습니다.

**중요**  
프라이빗 공간에서 시작된 JupyterLab 및 Studio Classic 애플리케이션용 Amazon EMR 클러스터만 검색하고 연결할 수 있습니다. Amazon EMR 클러스터가 Studio 환경과 동일한 AWS 리전에 있는지 확인합니다. JupyterLab 공간은 SageMaker 배포 이미지 버전 `1.10` 이상을 사용해야 합니다.

## Studio UI를 사용하여 Amazon EMR 클러스터에 연결
<a name="connect-emr-clusters-ui-options"></a>

Studio 또는 Studio Classic UI를 사용하여 클러스터에 연결하려면 [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열](discover-emr-clusters.md)에서 액세스한 클러스터 목록이나 SageMaker Studio 또는 Studio Classic의 노트북에서 연결을 시작할 수 있습니다.

**Studio UI에서 Amazon EMR 클러스터를 새 JupyterLab 노트북에 연결하는 방법:**

1. Studio UI의 왼쪽 패널에 있는 왼쪽 탐색 메뉴에서 **데이터** 노드를 선택합니다. **Amazon EMR 애플리케이션 및 클러스터**로 이동합니다. 그러면 Studio의 **Amazon EMR 클러스터** 탭에서 액세스할 수 있는 Amazon EMR 클러스터가 나열된 페이지가 열립니다.
**참고**  
사용자 또는 관리자가 Amazon EMR 클러스터에 대한 교차 계정 액세스를 허용하도록 권한을 구성한 경우 Studio에 대한 액세스 권한을 부여한 모든 계정의 통합 클러스터 목록을 볼 수 있습니다.

1. 새 노트북에 연결할 Amazon EMR 클러스터를 선택한 다음 **노트북에 연결**을 선택합니다. 그러면 JupyterLab 공간 목록이 표시된 모달 창이 열립니다.

1. 
   + JupyterLab 애플리케이션을 시작할 공간을 선택한 다음 **노트북 열기**를 선택합니다. 이렇게 하면 선택한 공간에서 JupyterLab 애플리케이션이 시작되고 새 노트북이 열립니다.
**참고**  
Studio Classic 사용자는 이미지와 커널을 선택해야 합니다. 지원되는 이미지 목록은 [Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 지원되는 이미지 및 커널](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 또는 [사용자 고유 이미지 가져오기](studio-emr-user-guide.md#studio-notebooks-emr-byoi)를 참조하세요.
   + 또는 모달 창 상단의 **새 공간 만들기** 버튼을 선택하여 새 프라이빗 공간을 만들 수 있습니다. 공간 이름을 입력한 다음 **공간 만들기 및 노트북 열기**를 선택합니다. 이렇게 하면 기본 인스턴스 유형과 사용 가능한 최신 SageMaker 배포 이미지가 있는 프라이빗 공간이 만들어지고 JupyterLab 애플리케이션이 시작되며 새 노트북이 열립니다.

1. 선택한 클러스터가 Kerberos, LDAP 또는 [런타임 역할]() 인증을 사용하지 않는 경우 Studio는 자격 증명 유형을 선택하라는 메시지를 표시합니다. **Http 기본 인증** 또는 **자격 증명 없음** 중에서 선택한 다음 해당하는 경우 자격 증명을 입력합니다.

   선택한 클러스터가 런타임 역할을 지원하는 경우 Amazon EMR 클러스터가 작업 실행을 위해 수임할 수 있는 IAM 역할의 이름을 선택합니다.
**중요**  
JupyterLab 노트북을 런타임 역할을 지원하는 Amazon EMR 클러스터에 성공적으로 연결하려면 먼저 [Studio에서 Amazon EMR 클러스터 액세스를 위한 IAM 런타임 역할 구성](studio-notebooks-emr-cluster-rbac.md)에 설명된 대로 런타임 역할 목록을 도메인 또는 사용자 프로필과 연결해야 합니다. 이 단계를 완료하지 않으면 연결을 설정할 수 없습니다.

   선택하면 연결 명령은 노트북의 첫 번째 셀을 채우고 Amazon EMR 클러스터와의 연결을 시작합니다.

   연결에 성공하면 Spark 애플리케이션의 연결과 시작을 확인하는 메시지가 나타납니다.

**아니면 JupyterLab 또는 Studio Classic 노트북에서 클러스터에 연결할 수도 있습니다.**

1. 노트북 상단에서 **클러스터** 버튼을 선택합니다. 그러면 액세스할 수 있는 `Running` 상태의 Amazon EMR 클러스터가 나열된 모달 창이 열립니다. **Amazon EMR 클러스터** 탭에서 `Running` Amazon EMR 클러스터를 볼 수 있습니다.
**참고**  
Studio Classic 사용자의 경우 **클러스터**는 [Studio 또는 Studio Classic에서 Amazon EMR 클러스터에 연결할 수 있도록 지원되는 이미지 및 커널](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 또는 [사용자 고유 이미지 가져오기](studio-emr-user-guide.md#studio-notebooks-emr-byoi)에서 커널을 사용하는 경우에만 표시됩니다. 노트북 상단에 **클러스터**가 보이지 않는 경우 관리자가 [클러스터 검색 가능성을 구성](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-configure-discoverability-emr-cluster.html)했는지 확인하고 지원되는 커널로 전환합니다.

1. 연결할 클러스터를 선택한 다음 **연결**을 선택합니다.

1. [런타임 IAM 역할](studio-notebooks-emr-cluster-rbac.md)을 지원하도록 Amazon EMR 클러스터를 구성한 경우 **Amazon EMR 실행 역할** 드롭다운 메뉴에서 역할을 선택할 수 있습니다.
**중요**  
JupyterLab 노트북을 런타임 역할을 지원하는 Amazon EMR 클러스터에 성공적으로 연결하려면 먼저 [Studio에서 Amazon EMR 클러스터 액세스를 위한 IAM 런타임 역할 구성](studio-notebooks-emr-cluster-rbac.md)에 설명된 대로 런타임 역할 목록을 도메인 또는 사용자 프로필과 연결해야 합니다. 이 단계를 완료하지 않으면 연결을 설정할 수 없습니다.

   아니면 선택한 클러스터가 Kerberos, LDAP 또는 런타임 역할 인증을 사용하지 않는 경우 Studio 또는 Studio Classic은 자격 증명 유형을 선택하라는 메시지를 표시합니다. **HTTP 기본 인증** 또는 **자격 증명 없음**을 선택할 수 있습니다.

1. Studio는 활성 셀에 코드 블록을 추가한 다음 실행하여 연결을 설정합니다. 이 셀에는 인증 유형에 따라 노트북을 애플리케이션에 연결하는 연결 매직 명령이 포함되어 있습니다.

   연결에 성공하면 Spark 애플리케이션의 연결과 시작을 확인하는 메시지가 나타납니다.

## 연결 명령을 사용하여 Amazon EMR 클러스터에 연결
<a name="connect-emr-clusters-manually"></a>

Amazon EMR 클러스터에 대한 연결을 설정하려면 노트북 셀 내에서 연결 명령을 실행할 수 있습니다.

연결을 설정할 때 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html), [Lightweight Directory Access Protocol(LDAP)](https://docs.aws.amazon.com/) 또는 [런타임 IAM 역할](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-rbac.html) 인증을 사용하여 인증할 수 있습니다. 선택하는 인증 방법은 클러스터 구성에 따라 달라집니다.

[Access Apache Livy using a Network Load Balancer on a Kerberos-enabled Amazon EMR cluster](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/) 예시를 참조하여 Kerberos 인증을 사용하는 Amazon EMR 클러스터를 설정할 수 있습니다. 또는 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 리포지토리에서 Kerberos 또는 LDAP 인증을 사용하는 CloudFormation 예시 템플릿을 살펴볼 수도 있습니다.

관리자가 교차 계정 액세스를 활성화한 경우 Studio Classic 애플리케이션과 클러스터가 동일한 계정에 상주하든 다른 AWS 계정에 상주하든 관계없이 Studio Classic 노트북에서 Amazon EMR 클러스터에 연결할 수 있습니다.

다음 각 인증 유형의 경우 지정된 명령을 사용하여 Studio 또는 Studio Classic 노트북에서 클러스터에 연결합니다.
+ **Kerberos**

  교차 계정 Amazon EMR 액세스가 필요한 경우 `--assumable-role-arn` 인수를 추가하세요. HTTPS를 사용하여 클러스터에 연결하는 경우 `--verify-certificate` 인수를 추가하세요.

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Kerberos --language python 
  [--assumable-role-arn EMR_access_role_ARN ] 
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **LDAP**

  교차 계정 Amazon EMR 액세스가 필요한 경우 `--assumable-role-arn` 인수를 추가하세요. HTTPS를 사용하여 클러스터에 연결하는 경우 `--verify-certificate` 인수를 추가하세요.

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access --language python 
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **NoAuth**

  교차 계정 Amazon EMR 액세스가 필요한 경우 `--assumable-role-arn` 인수를 추가하세요. HTTPS를 사용하여 클러스터에 연결하는 경우 `--verify-certificate` 인수를 추가하세요.

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type None --language python
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **런타임 IAM 역할**

  교차 계정 Amazon EMR 액세스가 필요한 경우 `--assumable-role-arn` 인수를 추가하세요. HTTPS를 사용하여 클러스터에 연결하는 경우 `--verify-certificate` 인수를 추가하세요.

  런타임 IAM 역할을 사용하여 Amazon EMR 클러스터에 연결하는 방법에 대한 자세한 내용은 [Studio에서 Amazon EMR 클러스터 액세스를 위한 IAM 런타임 역할 구성](studio-notebooks-emr-cluster-rbac.md) 섹션을 참조하세요.

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access \
  --emr-execution-role-arn arn:aws:iam::studio_account_id:role/emr-execution-role-name
  [--assumable-role-arn EMR_access_role_ARN]
  [--verify-certificate /home/user/certificateKey.pem]
  ```

## HTTPS를 통해 Amazon EMR 클러스터에 연결
<a name="connect-emr-clusters-ssl"></a>

전송 암호화를 활성화한 상태로 Amazon EMR 클러스터를 구성하고 HTTPS용 Apache Livy 서버를 구성하였으며 Studio 또는 Studio Classic이 HTTPS를 사용하여 Amazon EMR과 통신하도록 하려면 Studio가 인증서 키에 액세스하도록 구성해야 합니다.

자체 서명 또는 로컬 인증 기관(CA) 서명 인증서의 경우 다음 두 단계로 이를 수행할 수 있습니다.

1. 다음 옵션 중 하나를 사용하여 로컬 파일 시스템에 인증서의 PEM 파일을 다운로드합니다.
   + Jupyter에 내장된 파일 업로드 기능.
   + 노트북 셀.
   + (Studio Classic 사용자만 해당) 수명 주기 구성(LCC) 스크립트입니다.

     LCC 스크립트 사용 방법에 대한 자세한 내용은 [수명 주기 구성 스크립트를 사용한 노트북 인스턴스 사용자 지정](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)을 참조하세요.

1. 연결 명령의 `--verify-certificate` 인수에 인증서 경로를 제공하여 인증서의 검증을 활성화하세요.

   ```
   %sm_analytics emr connect --cluster-id cluster_id \
   --verify-certificate /home/user/certificateKey.pem ...
   ```

퍼블릭 CA에서 발급한 인증서의 경우 `--verify-certificate` 파라미터를 `true`로 설정하여 인증서 검증을 설정합니다.

또는 `--verify-certificate` 매개변수를 `false`로 설정하여 인증서 검증을 비활성화할 수 있습니다.

Amazon EMR 클러스터에 사용할 수 있는 연결 명령 목록은 [연결 명령을 사용하여 Amazon EMR 클러스터에 연결](#connect-emr-clusters-manually)에서 확인할 수 있습니다.

# Studio에서 Amazon EMR 클러스터 종료
<a name="terminate-emr-clusters"></a>

다음 절차에서는 Studio 또는 Studio Classic 노트북에서 Amazon EMR 클러스터를 종료하는 방법을 보여줍니다.

**`Running` 상태의 클러스터를 종료하려면 사용 가능한 Amazon EMR 클러스터 목록으로 이동합니다.**

1. Studio UI에서 왼쪽 탐색 메뉴의 **데이터** 노드까지 아래로 스크롤합니다.

1. **EMR 클러스터** 노드로 이동합니다. 그러면 액세스할 수 있는 Amazon EMR 클러스터가 나열된 페이지가 열립니다.

1. 종료하려는 클러스터의 이름을 선택한 다음 **종료**를 선택합니다.

1. 그러면 클러스터에서 대기 중인 작업 또는 데이터가 종료 후 영구적으로 손실된다는 사실을 알리는 확인 창이 열립니다. **종료**를 다시 선택하여 확인합니다.

# Studio 또는 Studio Classic에서 Spark UI 액세스
<a name="studio-notebooks-access-spark-ui"></a>

다음 섹션에서는 SageMaker AI Studio 또는 Studio Classic 노트북에서 Spark UI에 액세스하는 방법에 대한 지침을 제공합니다. Spark UI를 사용하면 Amazon EMR에서 실행하도록 제출한 Spark 작업을 Studio 또는 Studio Classic 노트북에서 모니터링하고 디버깅할 수 있습니다. SSH 터널링 및 미리 서명된 URL은 Spark UI에 액세스하는 두 가지 방법입니다.

## Spark UI에 액세스하기 위한 SSH 터널링 설정하기
<a name="studio-notebooks-emr-ssh-tunneling"></a>

Spark UI에 액세스하기 위한 SSH 터널링을 설정하려면 이 섹션의 두 옵션 중 하나를 따릅니다.

SSH 터널링 설정 옵션:
+ [옵션 1: 로컬 포트 전달을 사용하여 마스터 노드에 SSH 터널 설정](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)
+ [옵션 2, 파트 1: 동적 포트 전달을 사용하여 마스터 노드에 SSH 터널 설정](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel.html)

  [옵션 2, 파트 2: 마스터 노드에 호스팅된 웹 사이트를 표시하도록 프록시 설정 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-proxy.html)

Amazon EMR에서 웹 인터페이스를 보는 방법에 대한 자세한 내용은 [View web interfaces hosted on Amazon EMR Clusters](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)를 참조하세요. Amazon EMR 콘솔을 방문하여 Spark UI에 액세스할 수도 있습니다.

**참고**  
미리 서명된 URL을 사용할 수 없는 경우에도 SSH 터널을 설정할 수 있습니다.

## 미리 서명된 URL
<a name="studio-notebooks-emr-spark-ui-presigned-urls"></a>

SageMaker Studio 또는 Studio Classic 노트북에서 Amazon EMR의 Spark UI에 액세스할 수 있는 원클릭 URL을 만들려면 다음 IAM 권한을 활성화해야 합니다. 다음 중 해당하는 옵션을 선택합니다.
+ **SageMaker Studio 노트북과 동일한 계정에 있는 Amazon EMR 클러스터의 경우: SageMaker Studio 또는 Studio Classic IAM 실행 역할에 다음 권한을 추가합니다. ** 
+ **다른 계정(SageMaker Studio 또는 Studio Classic 노트북 아님)에 있는 Amazon EMR 클러스터의 경우: [Studio 또는 Studio Classic에서 Amazon EMR 클러스터 나열](discover-emr-clusters.md)용으로 만든 교차 계정 역할에 다음 권한을 추가합니다.**

**참고**  
다음 리전은 콘솔에서 미리 서명된 URL에 액세스할 수 있습니다.  
미국 동부(버지니아 북부) 리전
미국 서부(캘리포니아 북부)
캐나다(중부) 리전
Europe (Frankfurt) Region
Europe (Stockholm) Region
유럽(아일랜드) 리전
Europe (London) Region
Europe (Paris) Region
아시아 태평양(도쿄) 리전
Asia Pacific (Seoul) Region
아시아 태평양(시드니) 리전
Asia Pacific (Mumbai) Region
Asia Pacific (Singapore) Region
남아메리카(상파울루)

 다음 정책은 실행 역할에 사전 서명된 URL 액세스를 제공합니다.

```
{
        "Sid": "AllowPresignedUrl",
        "Effect": "Allow",
        "Action": [
            "elasticmapreduce:DescribeCluster",
            "elasticmapreduce:ListInstanceGroups",
            "elasticmapreduce:CreatePersistentAppUI",
            "elasticmapreduce:DescribePersistentAppUI",
            "elasticmapreduce:GetPersistentAppUIPresignedURL",
            "elasticmapreduce:GetOnClusterAppUIPresignedURL"
        ],
        "Resource": [
            "arn:aws:elasticmapreduce:region:account-id:cluster/*"
        ]
}
```

# 블로그 및 백서
<a name="studio-notebooks-emr-resources"></a>

다음 블로그는 영화 리뷰를 위한 감정 예측 사례 연구를 사용하여 전체 기계 학습 워크플로를 실행하는 프로세스를 설명합니다. 여기에는 데이터 준비, Spark 작업 모니터링, Studio 또는 Studio Classic 노트북에서 직접 예측을 가져올 수 있도록 ML 모델을 훈련 및 배포하는 작업이 포함됩니다.
+ [Create and manage Amazon EMR clusters from SageMaker Studio or Studio Classic to run interactive Spark and ML workloads](https://aws.amazon.com/blogs/machine-learning/part-1-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/).
+ SageMaker Studio 또는 Studio Classic과 Amazon EMR 클러스터가 별도의 AWS 계정에 배포되는 교차 계정 구성으로 사용 사례를 확장하려면 [ SageMaker Studio 또는 Studio Classic에서 Amazon EMR 클러스터 생성 및 관리를 참조하여 대화형 Spark 및 ML 워크로드 - 2부를 실행합니다](https://aws.amazon.com/blogs/machine-learning/part-2-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/).

또한 다음 섹션도 참조하세요.
+ [Access Apache Livy using a Network Load Balancer on a Kerberos-enabled Amazon EMR cluster](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/) 구성 안내서
+ AWS [SageMaker Studio 또는 Studio Classic 모범 사례에](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/sagemaker-studio-admin-best-practices.html) 대한 백서.

# 문제 해결
<a name="studio-notebooks-emr-troubleshooting"></a>

Studio 또는 Studio Classic 노트북의 Amazon EMR 클러스터를 사용할 때 연결 또는 사용 프로세스 중에 다양한 잠재적 문제 또는 문제가 발생할 수 있습니다. 이러한 문제와 오류를 해결하는 데 도움이 되도록 이 섹션에서는 발생할 수 있는 일반적인 문제에 대한 지침을 제공합니다.

다음은 Studio 또는 Studio Classic 노트북에서 Amazon EMR 클러스터를 연결 또는 사용하는 동안 발생할 수 있는 일반적인 오류입니다.

## Livy 연결이 중단 또는 실패하는 문제의 해결
<a name="studio-notebooks-emr-troubleshooting.memoryerror"></a>

다음은 Studio 또는 Studio Classic 노트북에서 Amazon EMR 클러스터를 사용하는 동안 발생할 수 있는 Livy 연결 문제입니다.
+ **Amazon EMR 클러스터에서 메모리 부족 오류가 발생했습니다.**

  Amazon EMR 클러스터에서 메모리 부족 오류가 발생한 경우 `sparkmagic`을 통한 Livy 연결이 중단되거나 실패할 수 있습니다.

  기본적으로 Apache Spark 드라이버 `spark.driver.defaultJavaOptions`의 Java 구성 파라미터는 `-XX:OnOutOfMemoryError='kill -9 %p'`로 설정되어 있습니다. 즉, 드라이버 프로그램에서 `OutOfMemoryError`가 발생할 때 실행하는 기본 작업은 SIGKILL 신호를 전송하여 드라이버 프로그램을 종료하는 것입니다. Apache Spark 드라이버가 종료되면 해당 드라이버를 활용하는 `sparkmagic`을 통한 모든 Livy 연결이 중단되거나 실패합니다. 이는 Spark 드라이버가 태스크 예약 및 실행을 포함한 Spark 애플리케이션의 리소스 관리를 담당하기 때문입니다. 드라이버가 없으면 Spark 애플리케이션이 작동하지 않으며 이와 상호 작용하려는 모든 시도가 실패합니다.

  Spark 클러스터에 메모리 문제가 발생한 것으로 의심되는 경우 [Amazon EMR 로그](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)를 확인하면 됩니다. 메모리 부족 오류로 인해 종료된 컨테이너는 일반적으로 코드 `137`로 종료됩니다. 이러한 경우 Spark 애플리케이션을 다시 시작하고 새 Livy 연결을 설정하여 Spark 클러스터와의 상호 작용을 재개해야 합니다.

  [Amazon EMR의 Spark에서 지식 기반 문서 "메모리 제한을 초과하여 YARN에 의해 종료된 컨테이너" 오류를 해결하려면 어떻게 해야 합니까?를 참조할 수 있습니다.](https://repost.aws/knowledge-center/emr-spark-yarn-memory-limit) 의 AWS re:Post 에서 out-of-memory 문제를 해결하는 데 사용할 수 있는 다양한 전략과 파라미터에 대해 알아봅니다.

  [Amazon EMR 모범 사례 안내서](https://aws.github.io/aws-emr-best-practices/)를 통해 Amazon EMR 클러스터에서 Apache Spark 워크로드를 실행하는 모범 사례와 조정 지침을 검토하는 것이 좋습니다.
+ **처음으로 Amazon EMR 클러스터에 연결할 때는 Livy 세션 제한 시간이 초과됩니다.**

  [Apache Livy](https://livy.apache.org/)를 사용하여 [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) 라이브러리를 통해 원격 Spark(Amazon EMR) 클러스터 연결을 구현하는 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)으로 Amazon EMR 클러스터에 처음 연결할 경우 연결 제한 시간 초과 오류가 발생할 수 있습니다.

  `An error was encountered: Session 0 did not start up in 60 seconds.`

  연결 설정 시 Amazon EMR 클러스터에서 Spark 애플리케이션을 초기화해야 하는 경우 연결 제한 시간 초과 오류가 발생할 가능성이 높아집니다.

  분석 확장 프로그램인 `sagemaker-studio-analytics-extension` 버전 `0.0.19` 이상을 통해 Livy를 사용하여 Amazon EMR 클러스터에 연결할 때 제한 시간 초과가 발생할 가능성을 줄이려면 기본 서버 세션 제한 시간을 `sparkmagic`의 기본값인 `60`초 대신 `120`초로 재정의합니다.

  다음 업그레이드 명령을 실행하여 확장 프로그램 `0.0.18`을 더 빠르게 업그레이드하는 것이 좋습니다.

  ```
  pip install --upgrade sagemaker-studio-analytics-extension
  ```

  `sparkmagic`에서 사용자 지정 제한 시간 구성을 제공할 경우 `sagemaker-studio-analytics-extension`에 재정의가 적용됩니다. 하지만 세션 제한 시간을 `60`초로 설정하면 `sagemaker-studio-analytics-extension`에서 기본 서버 세션 제한 시간인 `120`초마다 자동으로 트리거됩니다.

# AWS Glue 대화형 세션을 사용한 데이터 준비
<a name="studio-notebooks-glue"></a>

[AWS Glue 대화형 세션](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-overview.html)은 데이터 레이크 및 데이터 파이프라인에 저장할 데이터를 수집, 변환, 정리 및 준비하기 위해 사용할 수 있는 서버리스 서비스입니다. AWS Glue 대화형 세션은 복잡한 컴퓨팅 클러스터 인프라를 프로비저닝하고 관리할 필요 없이 전용 데이터 처리 장치(DPU)에서 몇 초 만에 초기화할 수 있는 온디맨드 서버리스 Apache Spark 런타임 환경을 제공합니다. 초기화 후 Studio 또는 Studio Classic 노트북에서 바로 AWS Glue 데이터 카탈로그를 검색하고, 대규모 쿼리를 실행하고 AWS Lake Formation,에서 관리하는 데이터에 액세스하고, Spark를 사용하여 대화형으로 데이터를 분석하고 준비할 수 있습니다. 그런 다음 준비된 데이터를 사용하여 SageMaker Studio 또는 Studio Classic 내에서 특별히 구축된 ML 도구를 사용하여 모델을 훈련, 조정 및 배포할 수 있습니다. 구성 가능성과 유연성을 중간 수준으로 제어하는 서버리스 Spark 서비스를 원하는 경우 데이터 준비 워크로드에 AWS Glue 대화형 세션을 고려해야 합니다.

Studio 또는 Studio Classic에서 JupyterLab 노트북을 시작하여 AWS Glue 대화형 세션을 시작할 수 있습니다. 노트북을 시작할 때 기본 제공 `Glue PySpark and Ray` 또는 `Glue Spark` 커널을 선택하세요. 그러면 대화형 서버리스 Spark 세션이 자동으로 시작됩니다. 컴퓨팅 클러스터 또는 인프라를 프로비저닝하거나 관리할 필요가 없습니다. 초기화 후 Studio 또는 Studio Classic 노트북 내에서 데이터를 탐색하고 상호 작용할 수 있습니다.

Studio 또는 Studio Classic에서 AWS Glue 대화형 세션을 시작하기 전에 적절한 역할 및 정책을 설정해야 합니다. 또한 스토리지 Amazon S3 버킷과 같은 추가 리소스에 대한 액세스 권한을 제공해야 할 수 있습니다. 필수 IAM 정책에 관한 자세한 내용은 [Studio 또는 Studio Classic의 AWS Glue 대화형 세션에 대한 권한](getting-started-glue-sm.md#glue-sm-iam) 섹션을 참조하세요.

Studio 및 Studio Classic은 AWS Glue 대화형 세션에 대한 기본 구성을 제공하지만 Jupyter 매직 명령의 AWS Glue전체 카탈로그를 사용하여 환경을 추가로 사용자 지정할 수 있습니다. AWS Glue 대화형 세션에서 사용할 수 있는 기본 및 추가 Jupyter 매직에 대한 자세한 내용은 섹션을 참조하세요[Studio 또는 Studio Classic에서 AWS Glue 대화형 세션 구성](getting-started-glue-sm.md#glue-sm-magics).
+  AWS Glue 대화형 세션을 시작하는 Studio Classic 사용자의 경우 다음 이미지 및 커널 중에서 선택할 수 있습니다.
  + 이미지: `SparkAnalytics 1.0`, `SparkAnalytics 2.0` 
  + 커널: `Glue Python [PySpark and Ray]` 및 `Glue Spark`
+ Studio 사용자의 경우 기본 [SageMaker 배포 이미지](https://github.com/aws/sagemaker-distribution)를 사용하고 `Glue Python [PySpark and Ray]` 또는 `Glue Spark` 커널을 선택합니다.

# AWS Glue 대화형 세션 시작하기
<a name="getting-started-glue-sm"></a>

이 가이드에서는 SageMaker AI Studio Classic에서 AWS Glue 대화형 세션을 시작하고 Jupyter 매직으로 환경을 관리하는 방법을 알아봅니다.

## Studio 또는 Studio Classic의 AWS Glue 대화형 세션에 대한 권한
<a name="glue-sm-iam"></a>

이 섹션에서는 Studio 또는 Studio Classic에서 AWS Glue 대화형 세션을 실행하는 데 필요한 정책을 나열하고 설정하는 방법을 설명합니다. 특히 다음과 같은 방법을 자세히 설명합니다.
+ `AwsGlueSessionUserRestrictedServiceRole` 관리형 정책을 SageMaker AI 실행 역할에 연결합니다.
+ SageMaker AI 실행 역할에 대한 인라인 사용자 지정 정책을 생성하세요.
+ SageMaker AI 실행 역할에 대한 신뢰 관계를 수정합니다.

**`AwsGlueSessionUserRestrictedServiceRole` 관리형 정책을 실행 역할에 연결하려면**

1. [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽 패널에서 **역할**을 선택합니다.

1. 사용자 프로필에서 사용하는 Studio Classic 실행 역할을 찾습니다. 사용자 프로필을 보는 방법에 대한 자세한 내용은 [도메인의 사용자 프로필 보기](domain-user-profile-view.md) 섹션을 참조하세요.

1. 역할 요약 페이지에 액세스하려면 역할 이름을 선택합니다.

1. **권한** 탭의 **권한 추가** 드롭다운 메뉴에서 **정책 연결**을 선택합니다.

1. `AwsGlueSessionUserRestrictedServiceRole` 관리형 정책 옆의 확인란을 선택합니다.

1. **정책 연결**을 선택합니다.

   요약 페이지에는 새로 추가된 관리형 정책이 표시됩니다.

   

**실행 역할에 대한 인라인 사용자 지정 정책을 생성하려면**

1. **권한 추가** 드롭다운 메뉴에서 **인라인 정책 생성**을 선택합니다.

1. **JSON** 탭을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "uniqueStatementId",
   
               "Effect": "Allow",
               "Action": [
   	     "iam:GetRole",
                   "iam:PassRole",
                   "sts:GetCallerIdentity"
               ],
               "Resource": "arn:aws:iam::*:role/GlueServiceRole*"
           }
       ]
   }
   ```

------

1. **정책 검토**를 선택합니다.

1. **이름**을 입력한 다음 **정책 생성**을 선택합니다.

   요약 페이지에는 새로 추가된 사용자 지정 정책이 표시됩니다.

   

**실행 역할에 대한 신뢰 관계를 수정하려면**

1. **신뢰 관계** 탭을 선택합니다.

1. **신뢰 정책 편집**을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Principal": {
               "Service": [
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
               ]
           },
           "Action": "sts:AssumeRole"
       }
   ]
   }
   ```

------

1. **정책 업데이트**를 선택합니다.

다른 AWS 리소스에 액세스해야 하는 경우 역할과 정책을 추가할 수 있습니다. 포함할 수 있는 추가 역할 및 정책에 대한 설명은 AWS Glue 설명서의 [IAM을 사용한 대화형 세션을](https://docs.aws.amazon.com/glue/latest/dg/glue-is-security.html) 참조하세요.

## 태그 전파
<a name="glue-sm-tag-propagation"></a>

태그는 일반적으로 비용을 추적 및 할당하고, 세션에 대한 액세스를 제어하고, 리소스를 격리하는 등의 작업에 사용됩니다. 태그 지정을 사용하여 AWS 리소스에 메타데이터를 추가하는 방법에 대해 알아보거나 일반적인 사용 사례에 대한 자세한 내용은 [추가 정보](#more-information) 섹션을 참조하세요.

Studio 또는 Studio Classic UI 내에서 생성된 새 AWS Glue 대화형 세션에 AWS 태그를 자동으로 전파할 수 있습니다. Studio 또는 Studio Classic에서 대화형 세션을 생성하면 AWS Glue [사용자 프로필 또는 공유 스페이스에 연결된 모든 사용자 정의 태그](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html)가 새 AWS Glue 대화형 세션으로 전달됩니다. 또한 Studio 및 Studio Classic은 AWS UI에서 생성된 새 AWS Glue 대화형 세션에 두 개의 생성된 내부 태그((`sagemaker:user-profile-arn` 및 `sagemaker:domain-arn`) 또는 (`sagemaker:shared-space-arn` 및 `sagemaker:domain-arn`))를 자동으로 추가합니다. 이러한 태그를 사용하여 개별 도메인, 사용자 프로필 또는 공간의 비용을 집계할 수 있습니다.

### 태그 전파 활성화
<a name="enable-propagation"></a>

새 AWS Glue 대화형 세션에 태그를 자동으로 전파하려면 SageMaker AI 실행 역할 및 AWS Glue 세션과 연결된 IAM 역할에 대해 다음 권한을 설정합니다.

**참고**  
기본적으로 AWS Glue 대화형 세션과 연결된 역할은 SageMaker AI 실행 역할과 동일합니다. `%iam_role` 매직 명령을 사용하여 AWS Glue 대화형 세션에 대해 다른 실행 역할을 지정할 수 있습니다. AWS Glue 대화형 세션을 구성하는 데 사용할 수 있는 Jupyter 매직 명령에 대한 자세한 내용은 [Studio 또는 Studio Classic에서 AWS Glue 대화형 세션 구성](#glue-sm-magics) 섹션을 참조하세요.
+ *SageMaker AI 실행 역할에서*: 새 인라인 정책을 생성하고 다음 JSON 파일을 붙여넣습니다. 정책은 실행 역할에 사용자 프로필, 공유 스페이스 및 SageMaker AI 도메인에 설정된 태그를 설명(`DescribeUserProfile`, `DescribeSpace`, `DescribeDomain`)하고 나열(`ListTag`)할 수 있는 권한을 부여합니다.

  ```
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:ListTags"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:user-profile/*",
          "arn:aws:sagemaker:*:*:space/*"
      ]
  },
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeUserProfile"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:user-profile/*"
      ]
  },
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeSpace"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:space/*"
      ]
  }
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeDomain"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:domain/*"
      ]
  }
  ```
+ * AWS Glue 세션의 IAM 역할에서*: 새 인라인 정책을 생성하고 다음 JSON 파일을 붙여넣습니다. 정책은 세션에 태그(`TagResource`)를 첨부하거나 태그 목록(`GetTags`)을 검색할 수 있는 권한을 역할에 부여합니다.

  ```
  {
      "Effect": "Allow",
      "Action": [
          "glue:TagResource",
          "glue:GetTags"
      ],
      "Resource": [
          "arn:aws:glue:*:*:session/*"
      ]
  }
  ```

**참고**  
이러한 권한을 적용하는 동안 장애가 발생하더라도 AWS Glue 대화형 세션이 생성되지는 않습니다. Studio 또는 Studio Classic [CloudWatch](https://docs.aws.amazon.com//sagemaker/latest/dg/monitoring-cloudwatch.html) 로그에서 실패 원인에 대한 세부 정보를 찾을 수 있습니다.
태그 값의 업데이트를 전파하려면 AWS Glue 대화형 세션의 커널을 다시 시작해야 합니다.

다음 사항을 명심해야 합니다.
+ 일단 세션에 태그가 첨부되면 전파를 통해 제거할 수 없습니다.

  , AWS CLI AWS Glue API 또는 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 직접 AWS Glue 대화형 세션에서 태그를 제거할 수 있습니다. 예를 들어를 사용하면 다음과 같이 세션의 ARN과 제거하려는 태그 키를 제공하여 태그를 제거할 AWS CLI수 있습니다.

  ```
  aws glue untag-resource \
  --resource-arn arn:aws:glue:region:account-id:session:session-name \
  --tags-to-remove tag-key1,tag-key2
  ```
+ Studio 및 Studio Classic은 AWS UI에서 생성된 새 AWS Glue 대화형 세션에 두 개의 생성된 내부 태그((`sagemaker:user-profile-arn` 및 `sagemaker:domain-arn`) 또는 (`sagemaker:shared-space-arn` 및 `sagemaker:domain-arn`))를 추가합니다. 이러한 태그는 모든 AWS 리소스에 설정된 50개 태그 제한에 포함됩니다. `sagemaker:user-profile-arn` 및 `sagemaker:shared-space-arn` 둘 다 속해 있는 도메인 ID를 포함합니다.
+ `aws:`, `AWS:`또는 대문자와 소문자를 접두사로 조합하여 시작하는 태그 키는 전파되지 않으며 AWS 사용하도록 예약됩니다.

### 추가 정보
<a name="more-information"></a>

자세한 내용은 다음 리소스를 참조할 수도 있습니다.
+ 태그 지정을 사용하여 AWS 리소스에 메타데이터를 추가하는 방법에 대한 자세한 내용은 [리소스 태그 지정을 AWS](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)참조하세요.
+ 태그를 사용한 비용 추적에 대한 자세한 내용은 Studio 또는 Studio Classic 관리 모범 사례의 [Cost analysis](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/cost-attribution.html)를 참조하세요.
+ 태그 키를 AWS Glue 기반으로에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 [ABAC with AWS Glue](glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-tags)를 참조하세요.

## Studio 또는 Studio Classic에서 AWS Glue 대화형 세션 시작
<a name="glue-sm-launch"></a>

역할, 정책 및 SageMaker AI 도메인을 만든 후 Studio 또는 Studio Classic에서 AWS Glue 대화형 세션을 시작할 수 있습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔에 로그인합니다.

1. 왼쪽 탐색 창에서 **Studio**를 선택합니다.

1. Studio 랜딩 페이지에서 Studio를 시작할 도메인 및 사용자 프로필을 선택합니다.

1. **Studio 열기**를 선택하고 JupyterLab 또는 Studio Classic 애플리케이션을 시작합니다.

1. Jupyter 보기에서 **파일**, **새로 만들기**, **노트북**을 차례로 선택합니다.

1. Studio Classic 사용자의 경우 **이미지** 드롭다운 메뉴에서 **SparkAnalytics 1.0** 또는 **SparkAnalytics 2.0**을 선택합니다. **커널** 드롭다운 메뉴에서 **Glue Spark** 또는 **Glue Python [PySpark 및 Ray]**을 선택합니다. **선택**을 선택하세요.

   Studio 사용자의 경우 **Glue Spark** 또는 **Glue Python [PySpark and Ray]** 커널을 선택합니다.

1. (선택 사항) Jupyter 매직을 사용하여 환경을 사용자 지정합니다. Jupyter 매직에 대한 자세한 내용은 [Studio 또는 Studio Classic에서 AWS Glue 대화형 세션 구성](#glue-sm-magics) 섹션을 참조하세요.

1. Spark 데이터 처리 스크립트 작성을 시작하세요. 다음 [노트북](https://github.com/aws/amazon-sagemaker-examples/blob/main/use-cases/pyspark_etl_and_training/pyspark-etl-training.ipynb)은 AWS Glue 대화형 세션, 탐색 데이터 분석, 데이터 사전 처리, 마지막으로 SageMaker AI를 사용하여 처리된 데이터에 대한 모델 훈련을 사용하는 대규모 데이터 세트의 ETL에 대한 end-to-end 워크플로를 보여줍니다.

## Studio 또는 Studio Classic에서 AWS Glue 대화형 세션 구성
<a name="glue-sm-magics"></a>

**참고**  
모든 매직 구성은 AWS Glue 커널의 수명 동안 후속 세션으로 전달됩니다.

 AWS Glue 대화형 세션에서 Jupyter 매직을 사용하여 세션 및 구성 파라미터를 수정할 수 있습니다. Magic은 Jupyter 셀 시작 부분에 `%` 접두사가 붙은 짧은 명령으로, 환경을 제어하는 데 도움이 되는 빠르고 쉬운 방법을 제공합니다. AWS Glue 대화형 세션에서는 기본적으로 다음과 같은 매직이 설정됩니다.


| 매직 | 기본값  | 
| --- | --- | 
| %glue\$1version |  3.0  | 
| %iam\$1role |  *SageMaker AI 도메인에 연결된 실행 역할*  | 
| %region |  해당 리전  | 

매직을 사용하여 환경을 추가로 사용자 지정할 수 있습니다. 예를 들어 작업에 할당된 작업자 수를 기본 5명에서 10명으로 변경하려는 경우 `%number_of_workers 10`을 지정할 수 있습니다. 기본값인 2880 대신 10분 간의 유휴 시간이 지나면 세션이 중지되도록 구성하려면 `%idle_timeout 10`을 지정할 수 있습니다.

에서 현재 사용할 수 있는 모든 Jupyter 매직 AWS Glue 은 Studio 또는 Studio Classic에서도 사용할 수 있습니다. 사용 가능한 AWS Glue 매직의 전체 목록은 [Jupyter 및 AWS Glue Studio 노트북에 대한 대화형 세션 구성을 AWS Glue 참조하세요](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html).

# AWS Glue 대화형 세션 요금
<a name="glue-sm-pricing"></a>

Studio 또는 Studio Classic 노트북에서 AWS Glue 대화형 세션을 사용하는 경우 AWS Glue 및 Studio 노트북의 리소스 사용에 대해 별도로 요금이 부과됩니다.

AWS 는 세션이 활성화되는 기간과 사용된 데이터 처리 장치(DPU) 수에 따라 AWS Glue 대화형 세션에 대해 요금을 부과합니다. 워크로드를 실행하는 데 사용되는 DPU 수에 대해 시간당 요금이 부과되며, 1초 단위로 요금이 청구됩니다. AWS Glue 대화형 세션은 기본값인 5개의 DPU를 할당하며 최소 2개의 DPU가 필요합니다. 각 대화형 세션에는 최소 1분의 청구 기간도 있습니다. AWS Glue 요금 및 요금 예제를 보거나 AWS 요금 계산기를 사용하여 비용을 추정하려면 [AWS Glue 요금을 ](https://aws.amazon.com/glue/pricing)참조하세요.

Studio 또는 Studio Classic 노트북은 Amazon EC2 인스턴스에서 실행되며 사용 기간을 기준으로 선택한 인스턴스 유형에 따라 요금이 부과됩니다. `SparkAnalytics` 이미지와 관련 커널을 선택하면 Studio Classic에서 `ml-t3-medium`의 기본 EC2 인스턴스 유형을 할당합니다. 워크로드에 맞게 Studio Classic 노트북의 인스턴스 유형을 변경할 수 있습니다. Studio 및 Studio Classic 요금에 대한 자세한 내용은 [Amazon SageMaker Pricing](https://aws.amazon.com/sagemaker/pricing)을 참조하세요.

# Amazon SageMaker Data Wrangler로 ML 데이터 준비하기
<a name="data-wrangler"></a>

**중요**  
Amazon SageMaker Data Wrangler가 Amazon SageMaker Canvas에 통합되었습니다. SageMaker Canvas의 새로운 Data Wrangler 경험에서는 자연어 인터페이스를 사용하여 시각적 인터페이스 외에도 데이터를 탐색하고 변환할 수 있습니다. SageMaker Canvas의 Data Wrangler에 대한 자세한 내용은 [데이터 준비](canvas-data-prep.md) 섹션을 참조하세요.

Amazon SageMaker Data Wrangler(Data Wrangler)는 데이터 가져오기, 준비, 변환, 특성화, 분석에 대한 엔드투엔드 솔루션을 제공하는 Amazon SageMaker Studio Classic의 기능입니다. 사용자는 Data Wrangler 데이터 준비 플로우를 기계 학습(ML) 워크플로에 통합하여 코딩을 거의 또는 전혀 사용하지 않고도 데이터 사전 처리 및 특성 추출을 단순화하고 간소화할 수 있습니다. 나만의 Python 스크립트와 변환을 추가하여 워크플로를 사용자 지정할 수도 있습니다.

Data Wrangler는 기계 학습 애플리케이션에 사용할 데이터를 분석하고 준비하는 데 도움이 되는 다음과 같은 핵심 기능을 제공합니다.
+ **가져오기** - Amazon Simple Storage Service(Amazon S3), Amazon Athena (Athena), Amazon Redshift, Snowflake 및 Databricks에 연결하고 데이터를 가져옵니다.
+ **데이터 플로우** - 데이터 플로우를 생성하여 일련의 ML 데이터 준비 단계를 정의합니다. 사용자는 플로우를 사용하여 다양한 데이터 소스의 데이터세트를 결합하고, 데이터세트에 적용할 변환의 수와 유형을 식별하고, ML 파이프라인에 통합할 수 있는 데이터 준비 워크플로를 정의할 수 있습니다.
+ **변환** - 문자열, 벡터, 숫자 데이터 형식 지정 도구와 같은 표준 변환을 사용하여 데이터세트를 정리하고 변환합니다.** 텍스트, 날짜/시간 임베딩, 범주형 인코딩과 같은 변환을 사용하여 데이터를 특징화할 수 있습니다.
+ **데이터 인사이트 생성** - Data Wrangler Data Insights 및 Quality Report를 사용하여 데이터 품질을 자동으로 확인하고 데이터의 이상 항목을 감지합니다.
+ **분석** - 플로우의 어느 시점에서든 데이터세트의 특징을 분석할 수 있습니다. Data Wrangler에는 산점 및 히스토그램과 같은 기본 제공 데이터 시각화 도구뿐만 아니라 대상 누 분석 및 특징 상관 관계를 파악하기 위한 빠른 모델링과 같은 데이터 분석 도구가 포함되어 있습니다.
+ **내보내기** - 데이터 준비 워크플로를 다른 위치로 내보냅니다. 다음은 예제 위치입니다.
  + Amazon Simple Storage Service(S3) 버킷
  + Amazon SageMaker Pipelines - Pipelines을 사용하여 모델 배포를 자동화할 수 있습니다. 사용자는 변환한 데이터를 파이프라인으로 직접 내보낼 수 있습니다.
  + Amazon SageMaker Feature Store - 기능과 해당 데이터를 중앙 집중식 스토어에 저장합니다.
  + Python 스크립트 - 사용자 지정 워크플로를 위해 데이터와 해당 변환을 Python 스크립트에 저장합니다.

Data Wrangler 사용을 시작하려면 [Data Wrangler 시작하기](data-wrangler-getting-started.md)을 참고하세요.

**중요**  
Data Wrangler는 더 이상 Jupyter Lab 버전 1(JL1)을 지원하지 않습니다. 최신 기능 및 업데이트를 이용하려면 Jupyter Lab 버전 3으로 업데이트하세요. 업그레이드에 대한 자세한 내용은 [콘솔에서 JupyterLab 버전의 애플리케이션 보기 및 업데이트](studio-jl.md#studio-jl-view) 섹션을 참조하세요.

**중요**  
이 설명서의 정보 및 절차는 Amazon SageMaker Studio Classic의 최신 버전을 사용합니다. Studio Classic을 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 섹션을 참조하세요.

Studio Classic 버전은 1.3.0 이상을 사용해야 합니다. 다음 절차를 사용하여 Amazon SageMaker Studio Classic을 열고 실행 중인 버전을 확인하세요.

Studio Classic을 열고 버전을 확인하려면 다음 절차를 참조하세요.

1. [사전 조건](data-wrangler-getting-started.md#data-wrangler-getting-started-prerequisite)의 단계를 사용하여 Amazon SageMaker Studio Classic을 통해 Data Wrangler에 액세스할 수 있습니다.

1. Studio Classic 시작 시 사용하고자 하는 사용자 옆에서 **앱 시작**을 선택합니다.

1. **Studio**를 선택합니다.

1. Studio Classic이 로드되면 **파일**, **새로 만들기**, **터미널** 순서로 선택합니다.  
![\[4단계에 설명된 Studio Classic 컨텍스트 메뉴 옵션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/terminal.png)

1. Studio Classic을 시작한 후 **파일**, **새로 만들기**, **터미널** 순서로 선택합니다.

1. Studio Classic 인스턴스의 버전을 인쇄하려면 `cat /opt/conda/share/jupyter/lab/staging/yarn.lock | grep -A 1 "@amzn/sagemaker-ui-data-prep-plugin@"`을 입력합니다. Snowflake를 사용하려면 먼저 Studio Classic 버전 1.3.0이 있어야 합니다.  
![\[6단계의 명령을 복사하여 붙여넣어 Studio Classic에서 열린 터미널 창입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/cat-command.png)

사용자는 AWS Management Console에서 Amazon SageMaker Studio Classic을 업데이트할 수 있습니다. Studio Classic에 대한 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 섹션을 참조하세요.

**Topics**
+ [Data Wrangler 시작하기](data-wrangler-getting-started.md)
+ [가져오기](data-wrangler-import.md)
+ [Data Wrangler 흐름을 생성합니다.](data-wrangler-data-flow.md)
+ [데이터 및 데이터 품질에 대한 인사이트 확보](data-wrangler-data-insights.md)
+ [데이터 플로우에서 모델 자동 훈련하기](data-wrangler-autopilot.md)
+ [데이터 변환하기](data-wrangler-transform.md)
+ [분석 및 시각화](data-wrangler-analyses.md)
+ [다양한 데이터세트에 데이터 흐름 재사용](data-wrangler-parameterize.md)
+ [내보내기](data-wrangler-data-export.md)
+ [데이터 인사이트를 얻기 위해 Amazon SageMaker Studio Classic 노트북의 대화형 데이터 준비 위젯 사용](data-wrangler-interactively-prepare-data-notebook.md)
+ [보안 및 권한](data-wrangler-security.md)
+ [릴리스 정보](data-wrangler-release-notes.md)
+ [문제 해결](data-wrangler-trouble-shooting.md)
+ [Amazon EC2 인스턴스 제한 상향](data-wrangler-increase-instance-limit.md)
+ [Data Wrangler 업데이트](data-wrangler-update.md)
+ [Data Wrangler 종료](data-wrangler-shut-down.md)

# Data Wrangler 시작하기
<a name="data-wrangler-getting-started"></a>

Amazon SageMaker Data Wrangler는 Amazon SageMaker Studio Classic의 기능입니다. 이 섹션을 통해 Data Wrangler에 액세스하고 Data Wrangler를 시작하는 방법을 알아보세요. 해결 방법:

1. [사전 조건](#data-wrangler-getting-started-prerequisite)의 각 단계를 완료합니다.

1. [Data Wrangler 액세스](#data-wrangler-getting-started-access)에 있는 절차에 따라 Data Wrangler 사용을 시작하세요.

## 사전 조건
<a name="data-wrangler-getting-started-prerequisite"></a>

Data Wrangler를 사용하기 전에 다음과 같은 사전 조건을 완료해야 합니다.

1. Data Wrangler를 사용하기 위해서는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 액세스할 수 있어야 합니다. 사용할 수 있는 Amazon EC2 인스턴스에 대한 자세한 내용은 [인스턴스](data-wrangler-data-flow.md#data-wrangler-data-flow-instances) 섹션을 참조하세요. 할당량을 확인하고, 필요한 경우, 할당량 증가를 요청하는 방법을 알아보려면 [AWS 서비스 할당량](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)을 참조하세요.

1. [보안 및 권한](data-wrangler-security.md)에 설명된 필요한 권한을 구성합니다.

1. 조직에서 인터넷 트래픽을 차단하는 방화벽을 사용하는 경우 다음 URL에 액세스할 수 있어야 합니다.
   + `https://ui.prod-1.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-2.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-3.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-4.data-wrangler.sagemaker.aws/`

Data Wrangler를 사용하려면 활성 Studio Classic 인스턴스가 필요합니다. 새 인스턴스를 시작하는 방법을 알아보려면 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md)을 참조하세요. Studio Classic 인스턴스가 **준비 완료** 상태이면 [Data Wrangler 액세스](#data-wrangler-getting-started-access)의 지침을 사용하세요.

## Data Wrangler 액세스
<a name="data-wrangler-getting-started-access"></a>

다음 절차는 이미 [사전 조건](#data-wrangler-getting-started-prerequisite)을 완료한 것으로 가정합니다.

Studio Classic에서 Data Wrangler에 액세스하려면 다음을 수행하세요.

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. 또한 다음을 수행하여 Data Wrangler 흐름을 만들 수도 있습니다.

   1. 상단의 탐색 모음에서 **File**(파일)을 선택합니다.

   1. **New**(새 파일)를 선택합니다.

   1. **Data Wrangler Flow**를 선택합니다.  
![\[Studio Classic 콘솔의 홈 탭입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/new-flow-file-menu.png)

1. (선택 사항) 새 디렉터리와 .flow 파일의 이름을 변경합니다.

1. Studio Classic에서 새 .flow 파일을 만들면 Data Wrangler를 소개하는 캐러셀이 표시될 수 있습니다.

   **몇 분 정도 소요될 수 있습니다.**

   이 메시지는 **User Details**(사용자 세부 정보) 페이지의 **KernelGateway** 앱이 **보류 중인 한** 지속됩니다. 이 앱의 상태를 확인하려면 **Amazon SageMaker Studio Classic** 페이지의 SageMaker AI 콘솔에서 Studio Classic에 액세스하는 데 사용하는 사용자 이름을 선택합니다. **User Details**(사용자 세부 정보) 페이지에서 **Apps**(앱) 아래에 **KernelGateway** 앱이 있습니다. 이 앱 상태가 Data Wrangler 사용을 시작할 **Ready**(준비) 될 때까지 기다리세요. Data Wrangler를 처음 시작할 때는 5분 정도 걸릴 수 있습니다.  
![\[사용자 세부 정보 페이지에서 KernelGateway 앱 상태가 준비 완료임을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/gatewayKernel-ready.png)

1. 시작하려면 데이터 소스를 선택하고 이를 사용하여 데이터세트를 가져오세요. 자세한 내용은 [가져오기](data-wrangler-import.md) 섹션을 참조하세요.

   데이터세트를 가져오면 데이터 흐름에 나타납니다. 자세한 내용은 [Data Wrangler 흐름을 생성합니다.](data-wrangler-data-flow.md) 섹션을 참조하세요.

1. 데이터세트를 가져오면 Data Wrangler는 각 열의 데이터 유형을 자동으로 유추합니다. **Data types**(데이터 유형) 단계 옆의 **\$1**를 선택하고 **Edit data types**(데이터 유형 편집)을 선택합니다.
**중요**  
**Data types**(데이터 유형) 단계에 변환을 추가한 후에는 **Update types**(유형 업데이트)을 사용하여 열 유형을 일괄 업데이트할 수 없습니다.

1. 데이터 흐름을 사용하여 변환과 분석을 추가할 수 있습니다. 자세한 내용은 [데이터 변환하기](data-wrangler-transform.md) 및 [분석 및 시각화](data-wrangler-analyses.md) 섹션을 참조하세요.

1. 전체 데이터 흐름을 내보내려면 **Export**(내보내기)를 선택하고 내보내기 옵션을 선택합니다. 자세한 내용은 [내보내기](data-wrangler-data-export.md) 섹션을 참조하세요.

1. 마지막으로 **Components and registries**(구성 요소 및 레지스트리) 아이콘을 선택하고 드롭다운 목록에서 **Data Wrangler**를 선택하여 생성한 모든 .flow 파일을 확인합니다. 이 메뉴를 사용하여 데이터 흐름을 찾고 데이터 흐름 간에 이동할 수 있습니다.

Data Wrangler를 시작한 후에는 다음 섹션을 사용하여 Data Wrangler를 사용하여 ML 데이터 준비 흐름을 만드는 방법을 살펴볼 수 있습니다.

## Data Wrangler 업데이트
<a name="data-wrangler-update-studio-app"></a>

Data Wrangler Studio Classic 앱을 정기적으로 업데이트하여 최신 기능 및 업데이트에 액세스하는 것이 좋습니다. Data Wrangler 앱 이름은 **sagemaker-data-wrang**으로 시작합니다. Studio Classic 앱을 업데이트하는 방법을 알아보려면 [Amazon SageMaker Studio Classic 앱 종료 및 업데이트](studio-tasks-update-apps.md) 섹션을 참조하세요.

## 데모: Data Wrangler 타이타닉 데이터세트 둘러보기
<a name="data-wrangler-getting-started-demo"></a>

다음 섹션에서는 Data Wrangler 사용을 시작하는 데 도움이 되는 설명을 제공합니다. 이 연습에서는 사용자가 이미 [Data Wrangler 액세스](#data-wrangler-getting-started-access)에 있는 단계를 수행했고 데모에 사용할 새 데이터 흐름 파일이 열려 있다고 가정합니다. 이 .flow 파일의 이름을 `titanic-demo.flow`와 비슷한 이름으로 바꿀 수도 있습니다.

이 안내에서는 [Titanic 데이터세트](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)를 사용합니다. 이는 [Titanic 데이터세트](https://www.openml.org/d/40945)의 수정된 버전으로, Data Wrangler 플로우로 더 쉽게 가져올 수 있습니다. 이 데이터세트에는 1912년의 *RMS Titanic*(타이타닉호)의 첫 항해에 탑승한 승객의 생존 상태, 연령, 성별, 등급(경제적 지위를 나타내는 지표)이 포함되어 있습니다.

이 자습서에서는 다음 단계를 수행합니다.

1. 다음 중 하나를 수행하세요.
   + Data Wrangler 플로우를 열고 **Use Sample Dataset**(샘플 데이터세트 사용)을 선택합니다.
   + [Titanic Dataset](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)(타이타닉 데이터세트)를 Amazon Simple S3(Amazon S3)에 업로드한 이 데이터세트를 Data Wrangler로 가져옵니다.

1. Data Wrangler analyses(분석)을 사용하여 이 데이터세트를 분석하세요.

1. Data Wrangler data transforms(데이터 변환)을 사용하여 데이터 흐름을 정의합니다.

1. 흐름을 Jupyter Notebook으로 내보내 Data Wrangler 작업을 생성하는 데 사용할 수 있습니다.

1. 데이터를 처리하고 SageMaker 훈련 작업을 시작하여 XGBoost Binary Classifier(바이너리 분류기)를 훈련시키세요.

### 데이터세트를 S3에 업로드하고 가져오기
<a name="data-wrangler-getting-started-demo-import"></a>

시작하려면 다음 방법 중 하나를 사용하여 타이타닉 데이터세트를 Data Wrangler로 가져올 수 있습니다.
+ Data Wrangler 플로우에서 직접 데이터세트 가져오기
+ Amazon S3에 데이터세트를 업로드한 다음 Data Wrangler로 가져오기

데이터세트를 Data Wrangler로 직접 가져오려면 흐름을 열고 **Use Sample Dataset**(샘플 데이터세트 사용)을 선택합니다.

Amazon S3에 데이터세트를 업로드하고 Data Wrangler로 가져오는 것은 자체 데이터를 가져오는 것과 비슷합니다. 다음 정보는 데이터세트를 업로드하고 가져오는 방법을 알려줍니다.

Data Wrangler로 데이터를 가져오기 전에 [타이타닉 데이터세트](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)를 다운로드하고 이 데모를 완료하려는 AWS 지역의 Amazon S3 (Amazon S3) 버킷에 업로드하세요.

Amazon S3를 처음 사용하는 경우 Amazon S3 콘솔에서 드래그 앤 드롭을 사용하여 이 작업을 수행할 수 있습니다. 방법을 알아보려면 Simple Storage Service User Guide 사용 설명서의 [Uploading Files and Folders by Using Drag and Drop](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html#upload-objects-by-drag-and-drop)(드래그 앤 드롭을 사용한 파일 및 폴더 업로드)를 참조하세요.

**중요**  
이 데모를 완료하는 데 사용할 동일한 AWS 리전의 S3 버킷에 데이터 세트를 업로드합니다.

데이터세트가 Amazon S3에 성공적으로 업로드되면 Data Wrangler로 가져올 수 있습니다.

**타이타닉 데이터세트를 Data Wrangler로 가져오기**

1. **Data flow**(데이터 흐름) 탭에서 **Import data**(데이터 가져오기) 버튼을 선택하거나 **Import**(가져오기) 탭을 선택합니다.

1. **Amazon S3**를 선택합니다.

1. **Import a dataset from S3**(S3에서 데이터세트 가져오기) 테이블을 사용하여 타이타닉 데이터세트를 추가한 버킷을 찾을 수 있습니다. 타이타닉 데이터세트 CSV 파일을 선택하여 **Details**(세부 정보) 창을 엽니다.

1. **Derails**(세부 정보)에서 **File type**(파일 유형)은 CSV여야 합니다. **First row is header**(첫 번째 행 헤더)를 지정하여 데이터세트의 첫 번째 행이 헤더인지 확인합니다. **Titanic-train**와 같이 데이터세트에 좀 더 친숙한 이름을 지정할 수도 있습니다.

1. **Import**(가져오기) 버튼을 선택합니다.

데이터세트를 Data Wrangler로 가져오면 **Data Flow**(데이터 흐름) 탭에 나타납니다. 노드를 두 번 클릭하여 변환 또는 분석을 추가할 수 있는 노드 세부 정보 보기로 들어갈 수 있습니다. 더하기 아이콘을 사용하여 탐색에 빠르게 액세스할 수 있습니다. 다음 섹션에서는 이 데이터 흐름을 사용하여 분석 및 변환 단계를 추가합니다.

### 데이터 흐름
<a name="data-wrangler-getting-started-demo-data-flow"></a>

데이터 흐름 섹션에서 데이터 흐름의 유일한 단계는 최근에 가져온 데이터세트와 **Data type**(데이터 유형) 단계입니다. 변환을 적용한 후 이 탭으로 돌아와서 데이터 흐름이 어떻게 되는지 확인할 수 있습니다. 이제 **Prepare**(준비) 및 **Analyze**(분석) 탭 아래에서 몇 가지 기본 변환을 추가합니다.

#### 준비 및 시각화
<a name="data-wrangler-getting-started-demo-prep-visualize"></a>

Data Wrangler에는 데이터를 분석, 정리 및 변환하는 데 사용할 수 있는 변환 및 시각화 기능이 내장되어 있습니다.

노드 세부 정보 보기의 **Data**(데이터) 탭에는 오른쪽 패널에 모든 내장 변환이 나열되며, 이 패널에는 사용자 지정 변환을 추가할 수 있는 영역도 포함되어 있습니다. 다음 사용 사례는 이러한 변환을 사용하는 방법을 보여줍니다.

데이터 탐색과 기능 엔지니어링에 도움이 될 만한 정보를 얻으려면 데이터 품질 및 인사이트 보고서를 만드세요. 보고서의 정보는 데이터를 정리하고 처리하는 데 도움이 될 수 있습니다. 이는 누락된 값의 갯수, 이상치 수 등의 정보를 제공합니다. 대상 누출 또는 불균형과 같은 데이터 관련 문제가 있는 경우 인사이트 보고서를 통해 이러한 문제를 파악할 수 있습니다. 보고서 생성에 대한 자세한 내용은 [데이터 및 데이터 품질에 대한 인사이트 확보](data-wrangler-data-insights.md) 섹션을 참조하세요.

##### 데이터 탐색
<a name="data-wrangler-getting-started-demo-explore"></a>

먼저 분석을 사용하여 데이터 요약 표를 생성합니다. 해결 방법:

1. 데이터 흐름의 **Data types**(데이터 유형) 옆에 있는 **\$1**를 선택하고 **Add analysis**(분석 추가)를 선택합니다.

1. **Analysis**(분석) 영역의 드롭다운 목록에서 **Table summary**(표 요약)을 선택합니다.

1. 표 요약에 **Naame**(이름)을 지정합니다.

1. 생성될 테이블을 미리 보려면 **Preview**(미리보기)를 선택합니다.

1. **Save**(저장)을 선택하여 데이터 흐름에 저장합니다. 표 요약이 **All Analyses**(모든 분석)에 표시됩니다.

표시되는 통계를 사용하여 이 데이터세트에 대해 다음과 유사한 관찰을 할 수 있습니다.
+ 평균 운임(평균)은 약 33달러이고, 최고 요금은 500달러를 넘습니다. 이 열에는 특이치가 있을 수 있습니다.
+ 이 데이터세트는 *?*를 사용하여 누락된 값을 표시합니다. *cabin*(객실), *embarked*(승선 여부), *home.dest*(집.목적지) 등 여러 열에 누락된 값이 있습니다
+ age(연령) 카테고리에 250개 이상의 값이 누락되었습니다.

다음으로, 이러한 통계에서 얻은 인사이트를 사용하여 데이터를 정리합니다.

##### 미사용 열 삭제
<a name="data-wrangler-getting-started-demo-drop-unused"></a>

이전 섹션의 분석을 바탕으로 데이터세트를 정리하여 훈련에 사용할 준비를 합니다. 데이터 흐름에 새 변환을 추가하려면 데이터 흐름에서 **Data type**(데이터 유형) 단계 옆에 있는 **\$1**를 선택하고 **Add transform**(변환 추가)를 선택합니다.

먼저 훈련에 사용하지 않을 열을 삭제합니다. [pandas](https://pandas.pydata.org/) 데이터 분석 라이브러리를 사용하여 이 작업을 수행하거나 내장된 변환 중 하나를 사용할 수 있습니다.

다음 절차에 따라 미사용 열을 삭제합니다.

사용하지 않는 열을 삭제하려면.

1. Data Wrangler 흐름을 엽니다.

1. Data Wrangler 흐름에는 두 개의 노드가 있습니다. **Data types**(데이터 유형) 노드 오른쪽에 있는 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **All steps**(모든 단계) 열에서 **Add step**(단계 추가)를 선택합니다.

1. **Stanard**(표준) 변환 목록에서 **Manage Columns**(열 관리)를 선택합니다. 표준 변환은 미리 만들어진 기본 제공 변환입니다. **Drop column**(열 삭제)가 선택되어 있는지 확인하세요.

1. **Columns to drop**(삭제할 열)에서 다음 열 이름을 확인합니다.
   + cabin(객실)
   + ticket(티켓)
   + name(이름)
   + sibsp
   + parch(파치)
   + home.dest(집.목적지)
   + boat(보트)
   + body(시신)

1. **Preview**(미리 보기)를 선택합니다.

1. 열이 삭제되었는지 확인한 다음 **Add**(추가)를 선택합니다.

pandas를 이용하여 이를 실행하려면 다음 단계를 따릅니다.

1. **All steps**(모든 단계) 열에서 **Add step**(단계 추가)를 선택합니다.

1. **Custom transform**(사용자 지정) 변환 목록에서 **Custom transform**(사용자 지정 변환)을 선택합니다.

1. 변환의 이름을 입력하고 드롭다운 목록에서 **Python (Pandas)**을 선택합니다.

1. 코드 상자에 다음 Python 스크립트를 입력합니다.

   ```
   cols = ['name', 'ticket', 'cabin', 'sibsp', 'parch', 'home.dest','boat', 'body']
   df = df.drop(cols, axis=1)
   ```

1. **Preview**(미리 보기)를 선택하여 변경 내용을 미리 본 다음 **Add**(추가)를 선택하여 변환을 추가합니다.

##### 누락된 값 정리
<a name="data-wrangler-getting-started-demo-missing-vals"></a>

이제 누락된 값을 정리합니다. **Handling missing values**(누락된 값 처리) 변환 그룹을 사용하여 이 작업을 수행할 수 있습니다.

여러 열에 누락된 값이 있습니다. 나머지 열 중 *age*(연령) 및 *fare*(운임)에 누락된 값이 있습니다. **Custom Transform**(사용자 지정 변환)을 사용하여 이를 검사합니다.

**Python(Pandas)** 옵션을 사용 시 다음을 사용하여 각 열의 항목 수를 빠르게 검토할 수 있습니다.

```
df.info()
```

![\[각 열의 항목 수 미리 보기 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/inspect-missing-pandas.png)


*age*(연령) 카테고리에서 누락된 값이 있는 행을 삭제하려면 다음과 같이 하세요.

1. **누락 처리(Handle missing)**를 선택합니다.

1. **트랜스포머**에서 **누락 시 삭제**를 선택합니다.

1. *age*(연령)을 **input column**(입력 열)로 선택합니다.

1. **Preview**(미리 보기)를 선택하여 새 데이터 프레임을 확인한 다음 **Add**(추가)를 선택하여 흐름에 변환을 추가합니다.

1. *fare*(운임)에 동일한 프로세스를 반복합니다.

**Custom transform**(사용자 지정 변환) 섹션의 `df.info()`을/를 사용하여 행에 모두 1,045개의 값이 있는지 확인할 수 있습니다.

##### 사용자 지정 Pandas: 인코딩
<a name="data-wrangler-getting-started-demo-encode"></a>

Pandas를 사용하여 플랫 인코딩을 시도해 보세요. 카테고리 데이터 인코딩은 범주를 수치로 표현하는 과정입니다. 예를 들어, 범주가 `Dog`과 `Cat`인 경우, 이 정보를 `Dog`를 대표하는 `[1,0]`으로 그리고 `Cat`을 대표하는 `[0,1]`의 두 벡터로 인코딩할 수 있습니다.

1. **Custom Transform**(사용자 지정 변환) 섹션의 드롭다운 목록에서 **Python (Pandas)**를 선택합니다.

1. 코드 상자에 다음을 입력합니다.

   ```
   import pandas as pd
   
   dummies = []
   cols = ['pclass','sex','embarked']
   for col in cols:
       dummies.append(pd.get_dummies(df[col]))
       
   encoded = pd.concat(dummies, axis=1)
   
   df = pd.concat((df, encoded),axis=1)
   ```

1. 변경 내용을 미리 보려면 **Preview**(미리 보기)를 선택합니다. 각 열의 인코딩된 버전이 데이터세트에 추가됩니다.

1. **Add**(추가)를 선택하여 변환을 추가합니다.

#### 사용자 지정 SQL: 열 선택
<a name="data-wrangler-getting-started-demo-sql"></a>

이제 SQL을 계속 사용하려는 열을 선택합니다. 이 데모에서는 다음의 `SELECT` 설명문에 나열된 열을 선택하세요. *survived*(생존)은 훈련 대상 열이므로 이 열을 먼저 넣으세요.

1. **Custom Transform**(사용자 지정 변환) 섹션의 드롭다운 목록에서 **SQL (PySpark SQL)**을 선택합니다.

1. 코드 상자에 다음을 입력합니다.

   ```
   SELECT survived, age, fare, 1, 2, 3, female, male, C, Q, S FROM df;
   ```

1. 변경 내용을 미리 보려면 **Preview**(미리 보기)를 선택합니다. `SELECT` 설명문에 나열된 열만 남아 있습니다.

1. **Add**(추가)를 선택하여 변환을 추가합니다.

### Data Wrangler 노트북으로 내보내기
<a name="data-wrangler-getting-started-export"></a>

데이터 흐름 생성을 완료하면 다양한 내보내기 옵션을 사용할 수 있습니다. 다음 섹션에서는 Data Wrangler 작업 노트북으로 내보내는 방법을 설명합니다. Data Wrangler 작업은 데이터 흐름에 정의된 단계를 사용하여 데이터를 처리하는 데 사용됩니다. 모든 내보내기 옵션에 대한 자세한 내용은 [내보내기](data-wrangler-data-export.md) 섹션을 참조하세요.

#### Data Wrangler 작업 노트북으로 내보내기
<a name="data-wrangler-getting-started-export-notebook"></a>

**Data Wrangler job**(Data Wrangler 작업)을 사용하여 데이터 흐름을 내보내면 프로세스에서 자동으로 Jupyter notebook을 만듭니다. 이 노트북은 Studio Classic 인스턴스에서 자동으로 열리고 SageMaker Processing 작업을 실행하여 Data Wrangler 데이터 흐름을 실행하도록 구성되어 있으며, 이를 Data Wrangler 작업이라고 합니다.

1. 데이터 흐름을 저장합니다. **File**(파일)을 선택한 다음 **Save Data Wrangler Flow**(Data Wrangler 플로우 저장)을 선택합니다.

1. **Data Flow**(데이터 흐름) 탭으로 돌아가서 데이터 흐름(SQL)의 마지막 단계를 선택한 다음 **\$1**를 선택하여 탐색을 엽니다.

1. **Export**(내보내기)를 선택하고 **Amazon S3 (via Jupyter Notebook)**(Jupyter notebook 사용)을 선택합니다. Jupyter notebook이 열립니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 탭에서 탐색을 여는 방법을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/export-select-step.png)

1. **Kernel**(커널)에 사용할 **Python 3 (Data Science)**(데이터 과학) 커널을 선택합니다.

1. 커널이 시작되면 **Kick off SageMaker Training Job**(SageMaker 훈련 작업 시작)(선택 사항)까지 노트북 북의 셀을 실행합니다.

1. 선택적으로, XGBoost 분류자를 훈련하기 위한 SageMaker AI 훈련 작업을 생성하려는 경우 **SageMaker 훈련 작업 시작**(선택 사항)의 셀을 실행할 수 있습니다. [Amazon SageMaker Pricing](https://aws.amazon.com/sagemaker/pricing/)(요금)에서 SageMaker 훈련 작업을 실행하는 데 드는 비용을 확인할 수 있습니다.

   또는 노트북에 있는 [XGBoost 분류자 훈련시키기](#data-wrangler-getting-started-train-xgboost)의 코드 블록을 추가하고 이를 실행하여 [XGBoost](https://xgboost.readthedocs.io/en/latest/) 오픈 소스 라이브러리를 사용하여 XGBoost 분류자를 훈련할 수 있습니다.

1. **Cleanup**(클린업) 셀의 주석 처리를 제거하고 실행합니다. 이를 실행하여 SageMaker Python SDK를 원래 버전으로 되돌립니다.

SageMaker 콘솔의 **처리 중** 탭에서 Data Wrangler 작업 상태를 모니터링할 수 있습니다. 또한 Amazon CloudWatch를 사용하여 Data Wrangler 작업을 모니터링할 수 있습니다. 자세한 내용은 [CloudWatch 로그 및 지표를 사용하여 Amazon SageMaker 처리 중 작업 모니터링](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html#processing-job-cloudwatch)을 참조하세요.

훈련 작업을 시작한 경우 SageMaker 콘솔에서 **훈련 섹션**의 **훈련 작업** 아래에서 작업 상태를 모니터링할 수 있습니다.

#### XGBoost 분류자 훈련시키기
<a name="data-wrangler-getting-started-train-xgboost"></a>

Jupyter notebook 또는 Amazon SageMaker Autopilot을 사용하여 XGBoost 바이너리 분류자를 훈련시킬 수 있습니다. Autopilot을 사용하면 Data Wrangler 흐름에서 직접 변환한 데이터를 기반으로 모델을 자동으로 훈련시키고 조정할 수 있습니다. Autopilot에 대한 자세한 내용은 [데이터 플로우에서 모델 자동 훈련하기](data-wrangler-autopilot.md) 섹션을 참조하세요.

Data Wrangler 작업을 시작한 동일한 노트북에서 최소한의 데이터 준비로 준비된 데이터를 이용해 XGBoost 바이너리 분류자를 훈련시킬 수 있습니다.

1. 먼저 필요한 모듈을 `pip`를 이용해 업그레이드하고 \$1SUCCESS 파일을 제거합니다 (이 마지막 파일은 `awswrangler`의 사용 시 문제가 됩니다).

   ```
   ! pip install --upgrade awscli awswrangler boto sklearn
   ! aws s3 rm {output_path} --recursive  --exclude "*" --include "*_SUCCESS*"
   ```

1. Amazon S3에서 데이터 읽기. `awswrangler`를 사용하여 S3 접두사를 가진 모든 CSV 파일을 반복적으로 읽을 수 있습니다. 그런 다음 데이터가 기능과 레이블로 분할됩니다. 레이블은 데이터프레임의 첫 번째 열입니다.

   ```
   import awswrangler as wr
   
   df = wr.s3.read_csv(path=output_path, dataset=True)
   X, y = df.iloc[:,:-1],df.iloc[:,-1]
   ```
   + 마지막으로 DMatrices(데이터에 대한 XGBoost 기본 구조)를 만들고 XGBoost 바이너리 분류자를 사용하여 교차 검증을 수행합니다.

     ```
     import xgboost as xgb
     
     dmatrix = xgb.DMatrix(data=X, label=y)
     
     params = {"objective":"binary:logistic",'learning_rate': 0.1, 'max_depth': 5, 'alpha': 10}
     
     xgb.cv(
         dtrain=dmatrix, 
         params=params, 
         nfold=3,
         num_boost_round=50,
         early_stopping_rounds=10,
         metrics="rmse", 
         as_pandas=True, 
         seed=123)
     ```

#### Data Wrangler 종료
<a name="data-wrangler-getting-started-shut-down"></a>

Data Wrangler 사용을 마치면 추가 요금이 발생하지 않도록 Data Wrangler가 실행되는 인스턴스를 종료하는 것이 좋습니다. Data Wrangler 앱 및 관련 인스턴스를 종료하는 방법을 알아보려면 [Data Wrangler 종료](data-wrangler-shut-down.md) 섹션을 참조하세요.

# 가져오기
<a name="data-wrangler-import"></a>

Amazon SageMaker Data Wrangler로 데이터를 가져올 수 있는 데이터 소스는 Amazon Simple Storage Service(S3), Amazon Athena, Amazon Redshift, Snowflake입니다.** 가져오는 데이터세트는 최대 1000개의 열을 포함할 수 있습니다.

**Topics**
+ [Amazon S3에서 데이터 가져오기](#data-wrangler-import-s3)
+ [Athena에서 데이터 가져오기](#data-wrangler-import-athena)
+ [Amazon Redshift에서 데이터 가져오기](#data-wrangler-import-redshift)
+ [Amazon EMR에서 데이터 가져오기](#data-wrangler-emr)
+ [Data Bricks에서 데이터 가져오기(JDBC)](#data-wrangler-databricks)
+ [Salesforce 데이터 클라우드에서 데이터를 가져옵니다.](#data-wrangler-import-salesforce-data-cloud)
+ [Snowflake에서 데이터 가져오기](#data-wrangler-snowflake)
+ [서비스형 소프트웨어(SaaS) 플랫폼에서 데이터 가져오기](#data-wrangler-import-saas)
+ [가져온 데이터 스토리지](#data-wrangler-import-storage)

일부 데이터 소스에서는 여러 데이터 연결을 추가할 수 있습니다.**
+ 여러 Amazon Redshift 클러스터에 연결할 수 있습니다. 각 클러스터는 데이터 소스가 됩니다.
+ 사용자 계정의 Athena 데이터베이스를 쿼리하여 해당 데이터베이스에서 데이터를 가져올 수 있습니다.



데이터 소스에서 가져온 데이터세트는 데이터 흐름에 나타납니다. Data Wrangler는 데이터세트에 있는 각 열의 데이터 유형을 자동으로 유추합니다. 데이터 유형을 수정하려면, **데이터 유형(Data types)** 단계를 선택하고 **데이터 유형 편집(Edit data types)**을 선택합니다.

Athena 또는 Amazon Redshift에서 데이터를 가져오면 가져온 데이터가 Studio Classic을 사용하는 AWS 리전의 기본 SageMaker AI S3 버킷에 자동으로 저장됩니다. 또한 Athena는 Data Wrangler에서 미리 보는 데이터를 이 버킷에 저장합니다. 자세한 내용은 [가져온 데이터 스토리지](#data-wrangler-import-storage) 단원을 참조하세요.

**중요**  
기본 Amazon S3 버킷에는 버킷 정책, 서버측 암호화(SSE)와 같은 최소 허용 보안 설정이 없을 수 있습니다. [Data Wrangler로 가져온 데이터세트에 대한 액세스를 제한하는 버킷 정책을 추가](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-security.html#data-wrangler-security-bucket-policy)할 것을 적극 권장합니다.

**중요**  
또한 SageMaker AI용 관리형 정책을 사용하는 경우, 사용 사례를 수행할 수 있는 가장 제한적인 정책으로 범위를 좁힐 것을 적극 권장합니다. 자세한 내용은 [Data Wrangler를 사용할 수 있는 IAM 역할 권한 부여](data-wrangler-security.md#data-wrangler-security-iam-policy) 단원을 참조하십시오.

Amazon Simple Storage Service(S3)를 제외한 모든 데이터 소스에서는 데이터를 가져오기 위해 SQL 쿼리를 지정해야 합니다. 개별 쿼리에 대해 다음을 지정해야 합니다.
+ **데이터 카탈로그**
+ **데이터베이스**
+ **표**

드롭다운 메뉴나 쿼리 내에서 데이터베이스 또는 데이터 카탈로그 이름을 지정할 수 있습니다. 다음은 쿼리 예제입니다.
+ `select * from example-data-catalog-name.example-database-name.example-table-name` - 이 쿼리는 사용자 인터페이스(UI)의 드롭다운 메뉴에 지정된 항목을 사용하여 실행하지 않습니다. `example-table-name`을(를) `example-database-name` 내(`example-data-catalog-name` 내)에서 쿼리합니다.
+ `select * from example-database-name.example-table-name` - 이 쿼리는 **데이터 카탈로그** 드롭다운 메뉴에서 실행하도록 지정한 데이터 카탈로그를 사용합니다. 지정한 데이터 카탈로그 내에서 `example-table-name`을(를) `example-database-name` 내에서 쿼리합니다.
+ `select * from example-table-name` - 이 쿼리를 실행하려면 **데이터 카탈로그**와 **데이터베이스 이름** 드롭다운 메뉴 모두에 대한 필드를 선택해야 합니다. `example-table-name`을 데이터베이스 내 데이터 카탈로그와 지정한 데이터 카탈로그 내에서 쿼리합니다.

Data Wrangler와 데이터 소스 간 링크는 연결입니다.** 연결을 사용하여 데이터 소스에서 데이터를 가져올 수 있습니다.

연결 유형은 다음과 같습니다.
+ 직접
+ 카탈로그화

Data Wrangler는 항상 직접 연결을 통해 최신 데이터에 액세스할 수 있습니다. 데이터 소스의 데이터가 업데이트된 경우, 연결을 사용하여 데이터를 가져올 수 있습니다. 예를 들어, Amazon S3 버킷 중 하나에 파일을 추가한 경우 파일을 가져올 수 있습니다.

카탈로그화 연결은 데이터 전송의 결과입니다. 카탈로그화 연결의 데이터가 반드시 최신 데이터를 포함할 필요는 없습니다. 예를 들어, Salesforce와 Amazon S3 간에 데이터 전송을 설정할 수 있습니다. Salesforce 데이터가 업데이트된 경우 데이터를 다시 전송해야 합니다. 데이터 전송 프로세스를 자동화할 수 있습니다. 데이터 전송에 대한 자세한 내용은 [서비스형 소프트웨어(SaaS) 플랫폼에서 데이터 가져오기](#data-wrangler-import-saas) 섹션을 참조하세요.

## Amazon S3에서 데이터 가져오기
<a name="data-wrangler-import-s3"></a>

Amazon Simple Storage Service(S3)를 사용하면 인터넷을 통해 언제 어디서든 원하는 양의 데이터를 저장하고 검색할 수 있습니다. 간단하고 직관적인 웹 인터페이스 AWS Management Console인 및 Amazon S3 API를 사용하여 이러한 작업을 수행할 수 있습니다. 데이터세트를 로컬에 저장한 경우, Data Wrangler로 가져오기 위해 S3 버킷에 추가할 것을 권장합니다. 추가 방법은 Amazon Simple Storage Service 사용 설명서에 있는 [버킷에 객체 업로드하기](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html)에서 확인하세요.

Data Wrangler에서 [S3 Select](https://aws.amazon.com/s3/features/#s3-select)를 사용하면 Data Wrangler에 있는 Amazon S3 파일을 미리 볼 수 있습니다. 미리보기한 파일 별로 표준 요금이 부과됩니다. 요금에 대한 자세한 내용은 **요청 및 데이터 검색** 탭([Amazon S3 요금](https://aws.amazon.com/s3/pricing/))에서 확인하세요.

**중요**  
데이터 흐름을 내보내고 Data Wrangler 작업을 시작하거나, SageMaker AI 특성 저장소로 데이터를 수집하거나, SageMaker AI 파이프라인을 생성하려는 경우 이러한 통합을 수행하려면 Amazon S3 입력 데이터가 동일한 AWS 리전에 있어야 합니다.

**중요**  
CSV 파일을 가져오는 경우 다음 요구 사항을 충족하는지 확인하세요.  
데이터세트에 있는 레코드는 한 줄을 초과할 수 없습니다.
백슬래시(`\`)가 유일한 유효 이스케이프 문자입니다.
데이터세트는 다음 구분자 중 하나를 사용해야 합니다.  
쉼표 - `,`
콜론 - `:`
세미콜론 - `;`
파이프 - `|`
탭 - `[TAB]`
공간을 절약하기 위해 압축된 CSV 파일을 가져올 수 있습니다.

Data Wrangler로 전체 데이터 세트를 가져오거나 일부만 샘플링할 수 있습니다. Amazon S3의 샘플링 옵션은 다음과 같습니다.
+ 없음(None) - 전체 데이터 세트 가져오기.
+ 첫 K(First K) - 데이터세트의 첫 K개 행 샘플링. K는 사용자가 지정한 정수.
+ 무작위(Randomized) - 지정된 크기의 무작위 샘플 추출.
+ 계층화(Stratified) - 계층화된 무작위 샘플 추출. 계층화된 샘플은 열의 값 비율을 유지합니다.

데이터를 가져온 후 샘플링 변환기로 전체 데이터세트에서 하나 이상의 데이터를 취할 수 있습니다. 샘플링 변환기에 대한 자세한 내용은 [샘플링](data-wrangler-transform.md#data-wrangler-transform-sampling) 섹션을 참조하세요.

다음 리소스 식별자 중 하나로 데이터를 가져올 수 있습니다.
+ Amazon S3 버킷이나 Amazon S3 액세스 포인트를 사용하는 Amazon S3 URI
+ Amazon S3 액세스 포인트 별칭
+ Amazon S3 액세스 포인트나 Amazon S3 버킷을 사용하는 Amazon 리소스 이름(ARN)

Amazon S3 액세스 포인트는 버킷에 연결된 명명된 네트워크 엔드포인트입니다. 각 액세스 포인트에는 사용자 구성 가능한 고유한 권한 및 네트워크 제어가 있습니다. 액세스 포인트에 대한 자세한 정보는 [Amazon S3 액세스 포인트로 데이터 액세스 관리하기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html)에서 확인하세요.

**중요**  
Amazon 리소스 이름(ARN)을 사용하여 데이터를 가져오는 경우 Amazon SageMaker Studio Classic에 액세스하는 데 사용하는 AWS 리전 것과 동일한에 있는 리소스에 대한 것이어야 합니다.

단일 파일 또는 다중 파일을 데이터세트로 가져올 수 있습니다. 데이터세트가 별도 파일로 파티셔닝된 경우 다중 파일 가져오기가 가능합니다. Amazon S3 디렉터리에 있는 모든 파일을 단일 데이터세트로 가져옵니다. 가져올 수 있는 파일 유형과 파일을 가져오는 방법에 대한 정보는 다음에서 확인하세요.

------
#### [ Single File Import ]

단일 파일은 다음 형식으로 가져올 수 있습니다.
+ 쉼표로 구분된 값(CSV)
+ PARQUET
+ JavaScript Object Notation(JSON)
+ Optimized Row Columnar(ORC)
+ 이미지 - Data Wrangler는 OpenCV를 사용하여 이미지를 가져옵니다. 지원되는 이미지 형식에 대한 자세한 정보는 [이미지 파일 읽기 및 쓰기](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)에서 확인하세요.

JSON으로 포맷된 파일의 경우 Data Wrangler는 JSON 라인(.jsonl)과 JSON 문서(.json)를 모두 지원합니다. 데이터를 미리 보면 자동으로 JSON이 표 형식으로 표시됩니다. 5MB를 초과하는 중첩된 JSON 문서의 경우 Data Wrangler는 구조 스키마와 배열을 데이터세트 값으로 표시합니다. **구조화 평탄화(Flatten structured)** 및 **배열 분해(Explode array)** 연산자로 중첩된 값을 표 형식으로 표시할 수 있습니다. 자세한 내용은 [JSON 데이터 중첩 해제](data-wrangler-transform.md#data-wrangler-transform-flatten-column) 및 [배열 분해](data-wrangler-transform.md#data-wrangler-transform-explode-array) 섹션을 참조하세요.

데이터세트를 선택하여 이름을 바꾸고, 파일 유형을 지정하고, 첫 번째 행을 헤더로 식별할 수 있습니다.

Amazon S3 버킷에서 여러 파일로 파티셔닝한 데이터세트를 한 번의 가져오기 단계로 가져올 수 있습니다.

**Amazon S3에 저장한 단일 파일에서 데이터세트를 Data Wrangler로 가져오려면**

1. 현재 위치가 **가져오기(Import)** 탭이 아닌 경우, **가져오기**를 선택합니다.

1. **사용 가능(Available)** 아래에서 **Amazon S3**를 선택합니다.

1. **S3에서 표, 이미지, 시계열 데이터 가져오기(Import tabular, image, or time-series data from S3)**에서 다음 중 한 가지를 실행합니다.
   + 표 형식 보기에서 Amazon S3 버킷을 선택하고 가져오려는 파일로 이동합니다.
   + **S3 원본(S3 source)**에서 Amazon S3 버킷 또는 Amazon S3 URI를 지정하고 **이동(Go)**을 선택합니다. Amazon S3 URI의 형식은 다음 중 하나일 수 있습니다.
     + `s3://amzn-s3-demo-bucket/example-prefix/example-file`
     + *example-access-point*-*aqfqprnstn7aefdfbarligizwgyfouse1a*-s3alias/datasets/*example-file*
     + `s3://arn:aws:s3:AWS-Region:111122223333:accesspoint/example-prefix/example-file`

1. 데이터세트를 선택하여 **가져오기 설정(Import settings)** 창을 엽니다.

1. CSV 파일에 헤더가 있는 경우, **표에 헤더 추가(Add header to table)** 옆 확인란을 선택합니다.

1. **미리보기(Preview)** 표로 데이터세트를 미리 볼 수 있습니다. 이 테이블에는 최대 100개의 행이 표시됩니다.

1. **세부정보(Details)** 창에서 데이터 세트 **이름(Name)** 및 **파일 유형(File Type)**을 확인하거나 변경합니다. 공백이 포함된 **이름** 추가 시, 데이터세트를 가져올 때 공백이 밑줄로 바뀝니다.

1. 사용하려는 샘플링 구성을 지정합니다.

1. **가져오기**를 선택합니다.

------
#### [ Multifile Import ]

다음은 다중 파일 가져오기에 대한 요구 사항입니다.
+ 파일은 Amazon S3 버킷과 동일한 폴더에 있어야 합니다.
+ 파일은 동일한 헤더를 공유하거나 헤더가 없어야 합니다.

개별 파일은 다음 중 한 가지 형식이어야 합니다.
+ CSV
+ PARQUET
+ Optimized Row Columnar(ORC)
+ 이미지 - Data Wrangler는 OpenCV를 사용하여 이미지를 가져옵니다. 지원되는 이미지 형식에 대한 자세한 정보는 [이미지 파일 읽기 및 쓰기](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)에서 확인하세요.

다음 절차에 따라 다중 파일을 가져옵니다.

**Amazon S3 디렉터리에 저장한 다중 파일에서 데이터세트를 Data Wrangler로 가져오려면**

1. 현재 위치가 **가져오기(Import)** 탭이 아닌 경우, **가져오기**를 선택합니다.

1. **사용 가능(Available)** 아래에서 **Amazon S3**를 선택합니다.

1. **S3에서 표, 이미지, 시계열 데이터 가져오기(Import tabular, image, or time-series data from S3)**에서 다음 중 한 가지를 실행합니다.
   + 표 형식 보기에서 Amazon S3 버킷을 선택하고 가져오려는 파일을 포함한 폴더로 이동합니다.
   + **S3 원본(S3 source)**에서 파일이 있는 Amazon S3 버킷 또는 Amazon S3 URI를 지정하고 **이동(Go)**을 선택합니다. 유효한 URI는 다음과 같습니다.
     + `s3://amzn-s3-demo-bucket/example-prefix/example-prefix`
     + `example-access-point-aqfqprnstn7aefdfbarligizwgyfouse1a-s3alias/example-prefix/`
     + `s3://arn:aws:s3:AWS-Region:111122223333:accesspoint/example-prefix`

1. 가져오고자 하는 파일이 포함된 폴더를 선택합니다. 개별 파일은 다음 중 한 가지 지원 형식이어야 합니다. 파일은 동일한 데이터 형식이어야 합니다.

1. 폴더에 헤더가 있는 CSV 파일이 있는 경우, **첫 번째 행이 헤더(First row is header)** 옆 확인란을 선택합니다.

1. 파일이 다른 폴더에 중첩되어 있는 경우, **중첩된 디렉터리 포함(Include nested directories)** 옆 확인란을 선택합니다.

1. (선택 사항) **파일명 열 추가(Add filename column)**를 선택하여 데이터세트에 개별 관측치의 파일명을 표시하는 열을 추가합니다.

1. (선택 사항) 기본적으로 Data Wrangler는 폴더 미리보기를 표시하지 않습니다. 파란색 **미리보기 끄기(Preview off)** 버튼을 선택하여 미리보기를 활성화할 수 있습니다. 미리보기에는 폴더에 있는 첫 10개 파일의 첫 10개 행이 표시됩니다.

1. **세부정보(Details)** 창에서 데이터세트 **이름(Name)** 및 **파일 유형(File Type)**을 확인하거나 변경합니다. 공백이 포함된 **이름** 추가 시, 데이터세트를 가져올 때 공백이 밑줄로 바뀝니다.

1. 사용하려는 샘플링 구성을 지정합니다.

1. **Import dataset(데이터세트 가져오기)**을 선택합니다.

------

파라미터로 패턴과 일치하는 파일의 하위 집합을 가져올 수도 있습니다. 파라미터는 가져올 파일을 보다 선별적으로 고르는데 도움이 됩니다. 파라미터 적용을 시작하려면, 데이터 소스를 편집하고 데이터를 가져올 때 사용하는 경로에 파라미터를 적용합니다. 자세한 내용은 [다양한 데이터세트에 데이터 흐름 재사용](data-wrangler-parameterize.md) 단원을 참조하십시오.

## Athena에서 데이터 가져오기
<a name="data-wrangler-import-athena"></a>

Amazon Athena로 Amazon Simple Storage Service(Amazon S3 에서 Data Wrangler로 데이터를 가져올 수 있습니다. Athena에서는 표준 SQL 쿼리를 작성하여 Amazon S3에서 가져오는 데이터를 선택합니다. 자세한 정보는 [Amazon Athena란 무엇입니까?](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)에서 확인하세요.

를 사용하여 Amazon Athena AWS Management Console 를 설정할 수 있습니다. 쿼리 실행을 시작하기 전에 Athena에 데이터베이스를 하나 이상 생성해야 합니다. Athena 시작 방법에 대한 자세한 정보는 [시작하기](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)에서 확인하세요.

Athena는 Data Wrangler와 직접 통합됩니다. Data Wrangler UI를 종료하지 않고도 Athena 쿼리를 작성할 수 있습니다.

Data Wrangler에서 간단한 Athena 쿼리를 작성하는 것 외에 다음을 사용할 수 있습니다.
+ 쿼리 결과 관리용 Athena 작업 그룹 작업 그룹에 대한 자세한 내용은 [쿼리 결과 관리](#data-wrangler-import-manage-results) 섹션을 참조하세요.
+ 데이터 보존 기간 설정을 위한 수명 주기 구성. 보존 기간에 대한 자세한 내용은 [데이터 보존 기간 설정](#data-wrangler-import-athena-retention) 섹션을 참조하세요.

### Data Wrangler에서 Athena 쿼리하기
<a name="data-wrangler-import-athena-query"></a>

**참고**  
Data Wrangler는 연합 쿼리를 지원하지 않습니다.

Athena AWS Lake Formation 와 함께를 사용하는 경우 Lake Formation IAM 권한이 데이터베이스에 대한 IAM 권한을 재정의하지 않는지 확인합니다`sagemaker_data_wrangler`.

Data Wrangler로 전체 데이터세트를 가져오거나 일부만 샘플링할 수 있습니다. Athena의 샘플링 옵션은 다음과 같습니다.
+ 없음(None) - 전체 데이터 세트 가져오기.
+ 첫 K(First K) - 데이터세트의 첫 K개 행 샘플링. K는 사용자가 지정한 정수.
+ 무작위(Randomized) - 지정된 크기의 무작위 샘플 추출.
+ 계층화(Stratified) - 계층화된 무작위 샘플 추출. 계층화된 샘플은 열의 값 비율을 유지합니다.

다음 절차에서는 Athena에서 Data Wrangler로 데이터세트를 가져오는 방법을 볼 수 있습니다.

**Athena에서 Data Wrangler로 데이터세트를 가져오려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Amazon Athena**를 선택합니다.

1. **데이터 카탈로그(Data Catalog)**에서 데이터 카탈로그를 선택합니다.

1. **데이터베이스(Database)** 드롭다운 목록에서 쿼리하려는 데이터베이스를 선택합니다. 데이터베이스를 선택하면 **표(Tables)**(**세부정보(Details)** 아래)에서 전체 표를 미리보기할 수 있습니다.

1. (선택 사항) **고급 구성(Advanced configuration)**을 선택합니다.

   1. **작업 그룹(Workgroup)**을 선택합니다.

   1. 작업 그룹이 Amazon S3 출력 위치를 적용하지 않았거나 작업 그룹을 사용하지 않는 경우, **쿼리 결과의 Amazon S3 위치(Amazon S3 location of query results)** 값을 지정합니다.

   1. (선택 사항) **데이터 보존 기간(Data retention period)**에서 확인란을 선택하여 데이터 보존 기간을 설정하고 삭제 전까지 저장할 일수를 지정합니다.

   1. (선택 사항) 기본적으로 Data Wrangler는 연결을 저장합니다. 확인란 선택을 해제하여 연결을 저장하지 않을 수 있습니다.

1. **샘플링(Sampling)**에서 샘플링 메서드를 선택합니다. 샘플링을 비활성화하려면 **없음(None)**을 선택합니다.

1. 쿼리 편집기에 쿼리를 입력하고 **실행(Run)** 버튼을 사용하여 쿼리를 실행합니다. 쿼리가 성공하면 편집기에서 결과를 미리 볼 수 있습니다.
**참고**  
Salesforce 데이터는 `timestamptz` 유형을 사용합니다. Salesforce에서 Athena로 가져온 타임스탬프 열을 쿼리하는 경우 열의 데이터를 `timestamp` 유형으로 캐스팅합니다. 다음 쿼리는 타임스탬프 열을 올바른 유형으로 캐스팅합니다.  

   ```
   # cast column timestamptz_col as timestamp type, and name it as timestamp_col
   select cast(timestamptz_col as timestamp) as timestamp_col from table
   ```

1. 쿼리 결과를 가져오려면 **가져오기(Import)**를 선택합니다.

위 절차를 완료하면 쿼리하여 가져온 데이터세트가 Data Wrangler 흐름에 나타납니다.

기본적으로 Data Wrangler는 연결 설정을 새 연결로 저장합니다. 데이터를 가져오면 이미 지정한 쿼리가 새 연결로 나타납니다. 저장된 연결에는 사용 중인 Athena 작업 그룹 및 Amazon S3 버킷에 대한 정보가 저장됩니다. 데이터 소스에 다시 연결할 때 저장된 연결을 선택할 수 있습니다.

### 쿼리 결과 관리
<a name="data-wrangler-import-manage-results"></a>

Data Wrangler는 Athena 작업 그룹으로 AWS 계정에서 쿼리 결과를 관리할 수 있도록 지원합니다. 개별 작업 그룹의 Amazon S3 출력 위치를 지정할 수 있습니다. 또한 쿼리 출력을 다른 Amazon S3 위치로 보낼 수 있는지 여부도 지정할 수 있습니다. 자세한 정보는 [작업 그룹으로 쿼리 액세스 및 비용 제어하기](https://docs.aws.amazon.com/athena/latest/ug/manage-queries-control-costs-with-workgroups.html)에서 확인하세요.

Amazon S3 쿼리 출력 위치를 적용하도록 작업 그룹을 구성할 수 있습니다. 해당 작업 그룹에 대한 쿼리 결과의 출력 위치는 변경할 수 없습니다.

작업 그룹을 사용하지 않거나 쿼리의 출력 위치를 지정하지 않으면 Data Wrangler는 Studio Classic 인스턴스가 위치한 리전과 동일한 AWS 리전에 있는 기본 Amazon S3 버킷을 사용하여 Athena 쿼리 결과를 저장합니다. 이 데이터베이스에 임시 테이블을 생성하여 쿼리 출력을 이 Amazon S3 버킷으로 이동합니다. 데이터를 가져온 후에는 테이블이 삭제되지만 `sagemaker_data_wrangler` 데이터베이스는 계속 유지됩니다. 자세한 내용은 [가져온 데이터 스토리지](#data-wrangler-import-storage) 단원을 참조하세요.

Athena 작업 그룹을 사용하려면 작업 그룹 액세스 권한을 부여하는 IAM 정책을 설정합니다. `SageMaker AI-Execution-Role` 사용 시, 역할에 정책을 추가할 것을 권장합니다. 작업 그룹용 IAM 정책에 대한 자세한 정보는 [작업 그룹 액세스용 IAM 정책](https://docs.aws.amazon.com/athena/latest/ug/workgroups-iam-policy.html)에서 확인하세요. 작업 그룹 정책 예제는 [작업 그룹 예제 정책](https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html)에서 확인하세요.

### 데이터 보존 기간 설정
<a name="data-wrangler-import-athena-retention"></a>

Data Wrangler는 쿼리 결과의 데이터 보존 기간을 자동으로 설정합니다. 보관 기간이 지나면 결과는 삭제됩니다. 예를 들어, 기본 보존 기간은 5일입니다. 쿼리 결과는 5일 후에 삭제됩니다. 이 구성은 더 이상 사용하지 않는 데이터를 정리하는 데 도움이 되도록 설계되었습니다. 데이터를 정리하면 권한이 없는 사용자의 액세스를 방지할 수 있습니다. 또한 Amazon S3에 데이터를 저장하는 데 드는 비용을 관리하는 데도 도움이 됩니다.

보존 기간을 설정하지 않으면 Amazon S3 수명 주기 구성에 따라 객체 저장 기간이 결정됩니다. 수명 주기 구성에 대해 지정한 데이터 보존 정책은 지정한 수명 주기 구성보다 오래된 쿼리 결과를 모두 제거합니다. 자세한 내용은 [버킷에 대한 수명 주기 구성 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)을 참조하세요.

Data Wrangler는 Amazon S3 수명 주기 구성으로 데이터 보존 및 만료를 관리합니다. Amazon SageMaker Studio Classic IAM 실행 역할 권한을 부여하여 버킷 수명 주기 구성을 관리해야 합니다. 다음 절차에 따라 권한을 부여합니다.

수명 주기 구성 관리 권한을 부여하는 방법은 다음과 같습니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. **역할**을 선택합니다.

1. 검색 창에서 Amazon SageMaker Studio Classic이 사용하는 Amazon SageMaker AI 실행 역할을 지정합니다.

1.  역할을 선택합니다.

1. **권한 추가**를 선택합니다.

1. **인라인 정책 생성(Create inline policy)**을 선택합니다.

1. **서비스(Service)**에서 **S3**를 지정하고 선택합니다.

1. **읽기(Read)** 섹션 아래에서 **GetLifecycleConfiguration**을 선택합니다.

1. **쓰기(Write)** 섹션 아래에서 **PutLifecycleConfiguration**을 선택합니다.

1. **리소스**에서 **특정 항목**을 선택합니다.

1. **작업(Actions)**에서 **권한 관리(Permissions management)** 옆 화살표 아이콘을 선택합니다.

1. **PutResourcePolicy**를 선택합니다.

1. **리소스**에서 **특정 항목**을 선택합니다.

1. **이 계정에서 모두(Any in this account)** 옆 확인란을 선택합니다.

1. **정책 검토**를 선택합니다.

1. **이름(Name)**에서 이름을 지정합니다.

1. **정책 생성(Create policy)**을 선택합니다.

## Amazon Redshift에서 데이터 가져오기
<a name="data-wrangler-import-redshift"></a>

Amazon Redshift는 클라우드에서 완전히 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다. 데이터 웨어하우스를 생성할 때는 먼저 Amazon Redshift 클러스터라는 노드 집합을 시작하는 것이 첫 번째 단계입니다. 클러스터 프로비저닝을 마치면 데이터세트를 업로드하여 데이터 분석 쿼리를 실행할 수 있습니다.

Data Wrangler에서 하나 이상의 Amazon Redshift 클러스터에 연결하여 쿼리할 수 있습니다. 이 가져오기 옵션을 사용하려면 Amazon Redshift에서 하나 이상의 클러스터를 생성해야 합니다. 생성 방법은 [Amazon Redshift 시작하기](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)에서 확인하세요.

다음 중 하나의 위치에서 Amazon Redshift 쿼리 결과를 출력할 수 있습니다.
+ 기본 Amazon S3 버킷
+ 사용자가 지정하는 Amazon S3 출력 위치

전체 데이터 세트를 가져오거나 데이터 세트의 일부를 샘플링할 수 있습니다. Amazon Redshift의 샘플링 옵션은 다음과 같습니다.
+ 없음(None) - 전체 데이터 세트 가져오기.
+ 첫 K(First K) - 데이터세트의 첫 K개 행 샘플링. K는 사용자가 지정한 정수.
+ 무작위(Randomized) - 지정된 크기의 무작위 샘플 추출.
+ 계층화(Stratified) - 계층화된 무작위 샘플 추출. 계층화된 샘플은 열의 값 비율을 유지합니다.

기본 Amazon S3 버킷은 Amazon Redshift 쿼리 결과를 저장하기 위해 Studio Classic 인스턴스가 위치한 리전과 동일한 AWS 리전에 있습니다. 자세한 내용은 [가져온 데이터 스토리지](#data-wrangler-import-storage) 단원을 참조하십시오.

기본 Amazon S3 버킷 또는 지정한 버킷에 대해 다음과 같은 암호화 옵션을 사용할 수 있습니다.
+ Amazon S3 관리형 키를 사용한 기본 AWS 서비스 측 암호화(SSE-S3)
+  지정한 AWS Key Management Service (AWS KMS) 키

 AWS KMS 키는 사용자가 생성하고 관리하는 암호화 키입니다. KMS 키에 대한 자세한 정보는 [AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)에서 확인하세요.

계정의 AWS KMS 키 ARN 또는 ARN을 사용하여 키를 지정할 수 있습니다 AWS .

IAM 관리형 정책 `AmazonSageMakerFullAccess`로 Studio Classic 내 역할에 Data Wrangler 사용 권한을 부여하려면 **데이터베이스 사용자** 이름에 접두사 `sagemaker_access`가 있어야 합니다.

다음 절차에 따라 새 클러스터를 추가하는 방법을 알아봅니다.

**참고**  
Data Wrangler는 임시 자격 증명이 있는 Amazon Redshift Data API를 사용합니다. 이 API에 대한 자세한 내용은 Amazon Redshift 관리 안내서에 있는 [Amazon Redshift 데이터 API 사용하기](https://docs.aws.amazon.com//redshift/latest/mgmt/data-api.html)에서 확인하세요.

**Amazon Redshift 클러스터에 연결하려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Amazon Athena**를 선택합니다.

1. **Amazon Redshift**를 선택합니다.

1. **임시 자격 증명(IAM)(Temporary credentials (IAM))**을 **유형(Type)**으로 선택합니다.

1. **연결 이름(Connection Name)**을 입력합니다. 이 이름은 Data Wrangler가 연결을 식별할 때 사용됩니다.

1. **클러스터 식별자(Cluster Identifier)**를 입력하여 연결하려는 클러스터를 지정합니다. 참고: Amazon Redshift 클러스터의 전체 엔드포인트는 제외하고 클러스터 식별자만 입력합니다.

1. 연결할 데이터베이스의 **데이터베이스 이름(Database Name)**을 입력합니다.

1. **데이터베이스 사용자(Database User)**를 입력하여 데이터베이스 연결 시 사용할 사용자를 식별합니다.

1. **UNLOAD IAM Role**에 Amazon Redshift 클러스터가 Amazon S3로 데이터를 이동 및 쓰기 위해 맡아야 역할의 IAM 역할 ARN을 입력합니다. 이 역할에 대한 자세한 내용은 [Amazon Redshift 관리 안내서의 Amazon Redshift가 사용자를 대신하여 다른 AWS 서비스에 액세스하도록 권한 부여](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)를 참조하세요.

1. **연결**을 선택합니다.

1. (선택 사항) **Amazon S3 출력 위치(Amazon S3 output location)**에서 쿼리 결과를 저장할 S3 URI를 지정합니다.

1. (선택 사항) **KMS 키 ID(KMS key ID)**에서 AWS KMS 키 또는 별칭의 ARN을 지정합니다. 다음 이미지에서 AWS Management Console에서 두 키 중 하나를 찾을 수 있는 위치를 볼 수 있습니다.  
![\[AWS KMS 콘솔에서 AWS KMS 별칭 ARN, 별칭 이름 및 키 ARN의 위치입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/kms-alias-redacted.png)

다음 이미지에서 이전 절차의 모든 필드를 볼 수 있습니다.

![\[Amazon Redshift 연결 추가 패널입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/redshift-connection.png)


연결이 성공적으로 설정되면 **데이터 가져오기(Data Import)** 아래에 데이터 소스로 표시됩니다. 이 데이터 소스를 선택하여 데이터베이스를 쿼리하고 데이터를 가져옵니다.

**Amazon Redshift에서 데이터 쿼리 및 가져오기**

1. **데이터 소스(Data Source)**에서 쿼리할 연결을 선택합니다.

1. **스키마(Schema)**를 선택합니다. Amazon Redshift 스키마에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발 안내서에 있는 [스키마](https://docs.aws.amazon.com/redshift/latest/dg/r_Schemas_and_tables.html)에서 확인하세요.

1. (선택 사항) **고급 구성(Advanced configuration)** 아래에서 사용하려는 **샘플링(Sampling)** 메서드를 지정합니다.

1. 쿼리 편집기에서 쿼리를 입력한 다음 **실행(Run)**을 선택하여 쿼리를 실행합니다. 쿼리가 성공하면 편집기에서 결과를 미리 볼 수 있습니다.

1. **데이터세트 가져오기(Import dataset)**를 선택하여 쿼리된 데이터세트를 가져옵니다.

1. **데이터세트 이름(Dataset name)**을 입력합니다. 공백이 포함된 **데이터세트 이름** 추가 시, 데이터세트를 가져올 때 공백이 밑줄로 바뀝니다.

1. **추가**를 선택합니다.

데이터세트를 편집하는 방법은 다음과 같습니다.

1. Data Wrangler 흐름으로 이동합니다.

1. **원본 - 샘플 추출(Source - Sampled)** 옆 \$1를 선택합니다.

1. 가져오려는 데이터를 변경합니다.

1. **적용**을 선택합니다

## Amazon EMR에서 데이터 가져오기
<a name="data-wrangler-emr"></a>

Amazon EMR을 Amazon SageMaker Data Wrangler 흐름의 데이터 소스로 사용할 수 있습니다. Amazon EMR은 대량 데이터를 사용, 처리, 분석할 수 있는 관리형 클러스터 플랫폼입니다. Amazon EMR에 대한 자세한 정보는 [Amazon EMR이란 무엇인가요?](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)에서 확인하세요. EMR에서 데이터세트를 가져오려면 연결하고 쿼리해야 합니다.

**중요**  
Amazon EMR 클러스터에 연결하려면 다음 필수 조건을 충족해야 합니다.  
Amazon SageMaker Studio Classic 및 Amazon EMR 시작 시 사용하는 Amazon VPC가 리전에 있어야 합니다.
Amazon EMR과 Amazon SageMaker Studio Classic은 모두 프라이빗 서브넷에서 시작되어야 합니다. 둘 다 같은 서브넷에 있거나 다른 서브넷에 있을 수 있습니다.
Amazon SageMaker Studio Classic이 VPC 전용 모드여야 합니다.  
VPC 생성에 대한 자세한 정보는 [VPC 생성하기](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)에서 확인하세요.  
VPC 만들기에 대한 자세한 정보는 [Connect SageMaker Studio Classic Notebooks in a VPC to External Resources](https://docs.aws.amazon.com/vpc/latest/userguide/studio-notebooks-and-internet-access.html)에서 확인하세요.
실행 중인 Amazon EMR 클러스터는 동일한 Amazon VPC에 있어야 합니다.
Amazon EMR 클러스터와 Amazon VPC는 동일한 AWS 계정에 있어야 합니다.
Amazon EMR 클러스터는 Hive 또는 Presto를 실행합니다.  
Hive 클러스터는 포트 10000을 통해 Studio Classic 보안 그룹의 인바운드 트래픽을 허용해야 합니다.
Presto 클러스터는 포트 8889을 통해 Studio Classic 보안 그룹의 인바운드 트래픽을 허용해야 합니다.  
IAM 역할을 사용하는 Amazon EMR 클러스터의 포트 번호는 다릅니다. 자세한 내용은 필수 조건 끝부분에서 확인하세요.
Amazon SageMaker Studio Classic은 Jupyter Lab 버전 3을 실행해야 합니다. Jupyter Lab 버전 업데이트에 대한 정보는 [콘솔에서 JupyterLab 버전의 애플리케이션 보기 및 업데이트](studio-jl.md#studio-jl-view)에서 확인하세요.
Amazon SageMaker Studio Classic에는 사용자 액세스를 제어하는 IAM 역할이 있습니다. Amazon SageMaker Studio Classic 실행 시 사용하는 기본 IAM 역할에는 Amazon EMR 클러스터 액세스를 허용하는 정책이 없습니다. IAM 역할에 권한을 부여하는 정책을 연결해야 합니다. 자세한 내용은 [Amazon EMR 클러스터 나열 구성](studio-notebooks-configure-discoverability-emr-cluster.md) 단원을 참조하십시오.
또한 IAM 역할에는 다음과 같은 `secretsmanager:PutResourcePolicy` 정책도 연결되어야 합니다.
이미 만든 Studio Classic 도메인을 사용하는 경우, `AppNetworkAccessType`이 VPC 전용 모드인지 확인하세요. VPC 전용 모드로 도메인을 업데이트하는 방법에 대한 정보는 [Amazon SageMaker Studio Classic 종료 및 업데이트](studio-tasks-update-studio.md)에서 확인하세요.
클러스터에 Hive 또는 Presto가 설치되어 있어야 합니다.
Amazon EMR 릴리스가 버전 5.5.0 이상이어야 합니다.  
Amazon EMR은 자동 종료를 지원합니다. 자동 종료는 유휴 클러스터의 실행을 중지하고 비용 발생을 방지합니다. 자동 종료를 지원하는 릴리스는 다음과 같습니다.  
6.x 릴리스 버전 6.1.0 이상.
5.x 릴리스 버전 5.30.0 이상.
다음 페이지에서 Amazon EMR 클러스터의 IAM 런타임 역할을 설정합니다. 런타임 역할을 사용하는 경우 전송 중 암호화를 활성화해야 합니다.  
[런타임 역할로 Amazon EMR 클러스터를 시작하기 위한 필수 조건](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html#emr-steps-runtime-roles-configure)
[역할 기반 액세스 제어로 Amazon EMR 클러스터 시작하기](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html#emr-steps-runtime-roles-launch)
Lake Formation을 데이터베이스 내 데이터에 대한 거버넌스 도구로 사용해야 합니다. 또한 액세스 제어를 위해 외부 데이터 필터링을 적용해야 합니다.  
Lake Formation에 대한 자세한 내용은 [란 무엇입니까 AWS Lake Formation?](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)를 참조하세요.
Lake Formation을 Amazon EMR에 통합하는 방법에 대한 자세한 정보는 [타사 서비스와 Lake Formation 통합하기](https://docs.aws.amazon.com/lake-formation/latest/dg/Integrating-with-LakeFormation.html)에서 확인하세요.
클러스터의 버전이 6.9.0 이상이어야 합니다.
에 대한 액세스 AWS Secrets Manager. Secrets Manager에 대한 자세한 정보는 [AWS Secrets Manager(이)란 무엇입니까?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)에서 확인하세요.
Hive 클러스터는 포트 10000을 통해 Studio Classic 보안 그룹의 인바운드 트래픽을 허용해야 합니다.

Amazon VPC는 AWS 클라우드의 다른 네트워크와 논리적으로 격리된 가상 네트워크입니다. Amazon SageMaker Studio Classic과 Amazon EMRR 클러스터는 Amazon VPC 내에서만 존재합니다.

다음 절차에 따라 Amazon VPC에서 Amazon SageMaker Studio Classic을 실행합니다.

VPC에서 Studio Classic을 실행하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. **SageMaker Studio Classic 시작**을 선택합니다.

1. **표준 설정**을 선택합니다.

1. **기본 실행 역할**에서 Studio Classic 설정 시 필요한 IAM 역할을 선택합니다.

1. Amazon EMR 클러스터를 시작한 VPC를 선택합니다.

1. **Subnet(서브넷)**에서 프라이빗 서브넷을 선택합니다.

1. **보안 그룹(Security group(s))**에서 VPC 간 제어 시 사용하는 보안 그룹을 지정합니다.

1. **VPC 전용(VPC Only)**을 선택합니다.

1. (선택 사항)기본 암호화 키를 AWS 사용합니다. AWS Key Management Service 키를 지정하여 데이터를 암호화할 수도 있습니다.

1. **다음**을 선택합니다.

1. **Studio 설정(Studio settings)**에서 본인에게 가장 적합한 구성을 선택합니다.

1. **다음**을 선택하여 SageMaker Canvas 설정을 건너뜁니다.

1. **다음**을 선택하여 RStudio 설정을 건너뜁니다.

Amazon EMR 클러스터가 준비되지 않은 경우, 다음 절차에 따라 생성할 수 있습니다. Amazon EMR에 대한 자세한 정보는 [Amazon EMR이란 무엇입니까?](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)에서 확인하세요.

클러스터를 생성하는 방법은 다음과 같습니다.

1.  AWS Management Console로 이동합니다.

1. 검색창에서 **Amazon EMR**을 지정합니다.

1. **클러스터 생성**을 선택합니다.

1. **클러스터 이름(Cluster name)**에 클러스터의 이름을 입력합니다.

1. **릴리스(Release)**에서 클러스터의 릴리스 버전을 선택합니다.
**참고**  
Amazon EMR은 다음 릴리스에 대해 자동 종료를 지원합니다.  
6.x 릴리스 버전 6.1.0 이상.
5.x 릴리스 버전 5.30.0 이상.
자동 종료는 유휴 클러스터의 실행을 중지하고 비용 발생을 방지합니다.

1. (선택 사항) **애플리케이션(Applications)**에서 **Presto**를 선택합니다.

1. 클러스터에서 실행 중인 애플리케이션을 선택합니다.

1. **네트워킹(Networking)** 아래 **하드웨어 구성(Hardware configuration)**에서 하드웨어 구성 설정을 지정합니다.
**중요**  
**네트워킹**에서 Amazon SageMaker Studio Classic을 실행하는 VPC를 선택하고 프라이빗 서브넷을 선택합니다.

1. **보안 및 액세스(Security and access)**에서 보안 설정을 지정합니다.

1. **생성(Create)**을 선택합니다.

Amazon EMR 클러스터 생성 방법은 [Amazon EMR 시작하기](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)에서 확인하세요. 클러스터 구성 모범 사례에 대한 정보는 [고려 사항 및 모범 사례](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha-considerations.html)에서 확인하세요.

**참고**  
보안상 Data Wrangler는 프라이빗 서브넷에 있는 VPC에만 연결할 수 있습니다. Amazon EMR 인스턴스에를 사용하지 않는 한 마스터 노드 AWS Systems Manager 에 연결할 수 없습니다. 자세한 정보는 [AWS Systems Manager으(로) EMR 클러스터 액세스 보안 확립하기](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)에서 확인하세요.

현재 다음 방법을 사용하여 Amazon EMR 클러스터에 액세스할 수 있습니다.
+ 미 인증
+ LDAP(Lightweight Directory Access Protocol)
+ IAM(런타임 역할)

인증을 사용하지 않거나 LDAP를 사용하려면 여러 클러스터와 Amazon EC2 인스턴스 프로필을 생성해야 할 수 있습니다. 관리자인 경우, 사용자 그룹에 데이터에 대한 다양한 수준의 액세스 권한을 제공해야 할 수 있습니다. 이러한 메서드를 사용하면 관리 오버헤드가 발생하여 사용자 관리가 더 어려워질 수 있습니다.

여러 사용자에게 동일한 Amazon EMR 클러스터 연결 권한을 제공하는 IAM 런타임 역할을 적용할 것을 권장합니다. 런타임 역할은 Amazon EMR 클러스터에 연결하는 사용자에게 할당할 수 있는 IAM 역할입니다. 각 사용자 그룹이 특정한 권한을 갖도록 런타임 IAM 역할을 구성할 수 있습니다.

다음 섹션에 따라 LDAP가 활성화된 Presto 또는 Hive 클러스터를 생성합니다.

------
#### [ Presto ]

**중요**  
를 Presto 테이블의 메타스토어 AWS Glue 로 사용하려면 **Presto 테이블 메타데이터**에 **사용을** 선택하여 EMR 클러스터를 시작할 때 Amazon EMR 쿼리의 결과를 AWS Glue 데이터 카탈로그에 저장합니다. 쿼리 결과를 AWS Glue 데이터 카탈로그에 저장하면 요금이 발생하지 않을 수 있습니다.  
Amazon EMR 클러스터에서 대규모 데이터세트를 쿼리하려면 Amazon EMR 클러스터의 Presto 구성 파일에 다음 속성을 추가해야 합니다.  

```
[{"classification":"presto-config","properties":{
"http-server.max-request-header-size":"5MB",
"http-server.max-response-header-size":"5MB"}}]
```
Amazon EMR 클러스터를 시작할 때 구성 설정을 수정할 수도 있습니다.  
Amazon EMR 클러스터의 구성 파일은 `/etc/presto/conf/config.properties` 경로 아래에 있습니다.

다음 절차에 따라 LDAP가 활성화된 Presto 클러스터를 생성합니다.

클러스터를 생성하는 방법은 다음과 같습니다.

1.  AWS Management Console로 이동합니다.

1. 검색창에서 **Amazon EMR**을 지정합니다.

1. **클러스터 생성**을 선택합니다.

1. **클러스터 이름(Cluster name)**에 클러스터의 이름을 입력합니다.

1. **릴리스(Release)**에서 클러스터의 릴리스 버전을 선택합니다.
**참고**  
Amazon EMR은 다음 릴리스에 대해 자동 종료를 지원합니다.  
6.x 릴리스 버전 6.1.0 이상.
5.x 릴리스 버전 5.30.0 이상.
자동 종료는 유휴 클러스터의 실행을 중지하고 비용 발생을 방지합니다.

1. 클러스터에서 실행 중인 애플리케이션을 선택합니다.

1. **네트워킹(Networking)** 아래 **하드웨어 구성(Hardware configuration)**에서 하드웨어 구성 설정을 지정합니다.
**중요**  
**네트워킹**에서 Amazon SageMaker Studio Classic을 실행하는 VPC를 선택하고 프라이빗 서브넷을 선택합니다.

1. **보안 및 액세스(Security and access)**에서 보안 설정을 지정합니다.

1. **생성(Create)**을 선택합니다.

------
#### [ Hive ]

**중요**  
를 Hive 테이블의 메타스토어 AWS Glue 로 사용하려면 EMR 클러스터를 시작할 때 **Hive 테이블 메타데이터**에 **사용을** 선택하여 Amazon EMR 쿼리의 결과를 AWS Glue 데이터 카탈로그에 저장합니다. 쿼리 결과를 AWS Glue 데이터 카탈로그에 저장하면 요금이 발생하지 않을 수 있습니다.  
Amazon EMR 클러스터에서 대규모 데이터세트를 쿼리하려면 Amazon EMR 클러스터의 Hive 구성 파일에 다음 속성을 추가해야 합니다.  

```
[{"classification":"hive-site", "properties"
:{"hive.resultset.use.unique.column.names":"false"}}]
```
Amazon EMR 클러스터를 시작할 때 구성 설정을 수정할 수도 있습니다.  
Amazon EMR 클러스터의 구성 파일은 `/etc/hive/conf/hive-site.xml` 경로 아래에 있습니다. 다음 속성을 지정하고 클러스터를 다시 시작할 수 있습니다.  

```
<property>
    <name>hive.resultset.use.unique.column.names</name>
    <value>false</value>
</property>
```

다음 절차에 따라 LDAP가 활성화된 Hive 클러스터를 생성합니다.

LDAP가 활성화된 Hive 클러스터를 생성하는 방법은 다음과 같습니다.

1.  AWS Management Console로 이동합니다.

1. 검색창에서 **Amazon EMR**을 지정합니다.

1. **클러스터 생성**을 선택합니다.

1. **Go to advanced options(고급 옵션으로 이동)**를 선택합니다.

1. **릴리스(Release)**에서 Amazon EMR 릴리스 버전을 선택합니다.

1. **Hive** 구성 옵션은 기본적으로 선택됩니다. **Hive** 옵션 옆 확인란이 있는지 확인합니다.

1. (선택 사항) **Presto**를 구성 옵션으로 선택하여 클러스터에서 Hive와 Presto를 모두 활성화할 수도 있습니다.

1. (선택 사항) **Hive 테이블 메타데이터에 사용을** 선택하여 Amazon EMR 쿼리의 결과를 AWS Glue 데이터 카탈로그에 저장합니다. 쿼리 결과를 AWS Glue 카탈로그에 저장하면 요금이 발생하지 않을 수 있습니다. 자세한 내용은 [AWS Glue 데이터 카탈로그를 Hive의 메타스토어로 사용을 참조하세요](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html).
**참고**  
쿼리 결과를 데이터 카탈로그에 저장하려면 Amazon EMR 버전 5.8.0 이상이 필요합니다.

1. **구성 입력(Enter configuration)** 아래에서 다음 JSON을 지정합니다.

   ```
   [
     {
       "classification": "hive-site",
       "properties": {
         "hive.server2.authentication.ldap.baseDN": "dc=example,dc=org",
         "hive.server2.authentication": "LDAP",
         "hive.server2.authentication.ldap.url": "ldap://ldap-server-dns-name:389"
       }
     }
   ]
   ```
**참고**  
보안상 이전 hive-site JSON에 몇 가지 속성을 추가하여 HiveServer용 SSL을 활성화할 것을 권장합니다. 자세한 정보는 [HiveServer2에서 SSL 활성화하기](https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/configuring-wire-encryption/content/enable_ssl_on_hiveserver2.html)에서 확인하세요.

1. 나머지 클러스터 설정을 지정하고 클러스터를 생성합니다.

------

다음 섹션에 따라 이미 생성한 Amazon EMR 클러스터에 LDAP 인증을 적용합니다.

------
#### [ LDAP for Presto ]

Presto를 실행하는 클러스터에서 LDAP를 사용하려면 HTTPS를 통해 Presto 코디네이터에 액세스해야 합니다. 액세스 권한을 부여하는 방법은 다음과 같습니다.
+ 포트 636에서 액세스를 활성화
+ Presto 코디네이터용 SSL 활성화

다음 템플릿에 따라 Presto를 구성합니다.

```
- Classification: presto-config
     ConfigurationProperties:
        http-server.authentication.type: 'PASSWORD'
        http-server.https.enabled: 'true'
        http-server.https.port: '8889'
        http-server.http.port: '8899'
        node-scheduler.include-coordinator: 'true'
        http-server.https.keystore.path: '/path/to/keystore/path/for/presto'
        http-server.https.keystore.key: 'keystore-key-password'
        discovery.uri: 'http://master-node-dns-name:8899'
- Classification: presto-password-authenticator
     ConfigurationProperties:
        password-authenticator.name: 'ldap'
        ldap.url: !Sub 'ldaps://ldap-server-dns-name:636'
        ldap.user-bind-pattern: "uid=${USER},dc=example,dc=org"
        internal-communication.authentication.ldap.user: "ldap-user-name"
        internal-communication.authentication.ldap.password: "ldap-password"
```

Presto에서 LDAP를 설정하는 방법은 다음 리소스에서 확인하세요.
+ [LDAP 인증](https://prestodb.io/docs/current/security/ldap.html)
+ [Amazon EMR에서 LDAP 인증을 Presto에 적용하기](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-ldap.html)

**참고**  
보안상 Presto용 SSL 활성화를 권장합니다. 자세한 정보는 [보안 내부 통신](https://prestodb.io/docs/current/security/internal-communication.html)에서 확인하세요.

------
#### [ LDAP for Hive ]

생성한 클러스터에 대해 Hive용 LDAP를 사용하려면, 다음 절차에 따라 [콘솔 내 인스턴스 그룹을 재구성합니다.](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html#emr-configure-apps-running-cluster-considerations)

연결 중인 클러스터의 이름을 지정하고 있습니다.

```
[
  {
    "classification": "hive-site",
    "properties": {
      "hive.server2.authentication.ldap.baseDN": "dc=example,dc=org",
      "hive.server2.authentication": "LDAP",
      "hive.server2.authentication.ldap.url": "ldap://ldap-server-dns-name:389"
    }
  }
]
```

------

다음 절차에 따라 클러스터에서 데이터를 가져옵니다.

클러스터에서 데이터를 가져오는 방법은 다음과 같습니다.

1. Data Wrangler 흐름을 엽니다.

1. **연결 생성**을 선택합니다.

1. **Amazon EMR**을 선택합니다.

1. 다음 중 하나를 수행하세요.
   + (선택 사항) **보안 암호 ARN(Secrets ARN)**에서 클러스터 내 데이터베이스의 Amazon 리소스 번호(ARN)를 지정합니다. 보안 암호는 보안을 강화합니다. 보안 암호에 대한 자세한 내용은 [란 무엇입니까 AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 참조하십시오. 클러스터용 보안 암호 생성에 대한 자세한 정보는 [클러스터의 AWS Secrets Manager 보안 암호 생성](#data-wrangler-emr-secrets-manager)에서 확인하세요.
**중요**  
인증 시 IAM 런타임 역할을 사용하는 경우 보안 암호를 지정해야 합니다.
   + 드롭다운 테이블에서 클러스터를 선택합니다.

1. **다음**을 선택합니다.

1. ***example-cluster-name* 클러스터 엔드포인트 선택**에서 쿼리 엔진을 선택합니다.

1. (선택 사항) **연결 저장(Save connection)**을 선택합니다.

1. **다음, 로그인** 선택 후 다음 중 하나를 선택합니다.
   + 미 인증
   + LDAP
   + IAM

1. ***example-cluster-name* 클러스터 로그인**에서 클러스터 **사용자명**과 **비밀번호**를 지정합니다.

1. **연결**을 선택합니다.

1. 쿼리 편집기에서 SQL 쿼리를 지정합니다.

1. **실행**을 선택합니다.

1. **가져오기**를 선택합니다.

### 클러스터의 AWS Secrets Manager 보안 암호 생성
<a name="data-wrangler-emr-secrets-manager"></a>

IAM 런타임 역할로 Amazon EMR 클러스터에 액세스하는 경우, Amazon EMR 액세스 시 사용하는 자격 증명을 Secrets Manager 보안 암호로 저장해야 합니다. 클러스터 액세스 시 사용하는 모든 자격 증명을 보안 암호에 저장합니다.

보안 암호에는 다음 정보를 저장해야 합니다.
+ JDBC 엔드포인트 - `jdbc:hive2://`
+ DNS 이름 - Amazon EMR 클러스터의 DNS 이름. 기본 노드의 엔드포인트 또는 호스트 이름.
+ 포트 - `8446`

보안 암호에 다음과 같은 추가 정보를 저장할 수도 있습니다.
+ IAM 역할 - 클러스터 액세스 시 사용하는 IAM 역할. Data Wrangler는 기본적으로 SageMaker AI 실행 역할을 사용합니다.
+ 신뢰 저장소 경로 - 기본적으로 Data Wrangler는 신뢰 저장소 경로를 생성합니다. 자체 신뢰 저장소 경로를 사용할 수도 있습니다. 신뢰 저장소 경로에 대한 자세한 정보는 [HiveServer2 내 전송 중 암호화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/hs2-encryption-intransit.html)에서 확인하세요.
+ 신뢰 저장소 비밀번호 - 기본적으로 Data Wrangler는 신뢰 저장소 비밀번호를 생성합니다. 자체 신뢰 저장소 경로를 사용할 수도 있습니다. 신뢰 저장소 경로에 대한 자세한 정보는 [HiveServer2 내 전송 중 암호화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/hs2-encryption-intransit.html)에서 확인하세요.

다음 절차에 따라 Secrets Manager 보안 암호에 자격 증명을 저장합니다.

자격 증명을 보안 암호로 저장하는 방법은 다음과 같습니다.

1.  AWS Management Console로 이동합니다.

1. 검색 창에 Secrets Manager를 지정합니다.

1. **AWS Secrets Manager**을 선택합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **보안 암호 유형**에서 **다른 유형의 보안 암호**를 선택합니다.

1. **키/값(Key/value)** 쌍 아래에서 **일반 텍스트(Plaintext)**를 선택합니다.

1. Hive 실행 클러스터의 경우, IAM 인증에 다음 템플릿을 사용할 수 있습니다.

   ```
   {"jdbcURL": ""
    "iam_auth": {"endpoint": "jdbc:hive2://", #required
                   "dns": "ip-xx-x-xxx-xxx.ec2.internal", #required 
                   "port": "10000", #required
                 "cluster_id": "j-xxxxxxxxx", #required
                 "iam_role": "arn:aws:iam::xxxxxxxx:role/xxxxxxxxxxxx", #optional
                 "truststore_path": "/etc/alternatives/jre/lib/security/cacerts", #optional
                 "truststore_password": "changeit" #optional
                 
                 }}
   ```
**참고**  
데이터를 가져온 후 해당 데이터에 변환을 적용합니다. 그런 다음 변환한 데이터를 특정 위치로 내보냅니다. Jupyter notebook으로 변환된 데이터를 Amazon S3로 내보내는 경우, 이전 예제에서 지정된 신뢰 저장소 경로를 사용해야 합니다.

Secrets Manager 보안 암호는 Amazon EMR 클러스터의 JDBC URL을 보안 암호로 저장합니다. 보안 암호를 사용하는 것이 자격 증명을 직접 입력하는 것보다 안전합니다.

다음 절차에 따라 JDBC URL을 보안 암호로 저장합니다.

JDBC URL을 보안 암호로 저장하는 방법은 다음과 같습니다.

1.  AWS Management Console로 이동합니다.

1. 검색 창에 Secrets Manager를 지정합니다.

1. **AWS Secrets Manager**을 선택합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **보안 암호 유형**에서 **다른 유형의 보안 암호**를 선택합니다.

1. **키/값 쌍(Key/value pairs)**에서 `jdbcURL`을(를) 키로, 유효한 JDBC URL을 값으로 지정합니다.

   유효한 JDBC URL의 형식은 인증 사용 여부 및 쿼리 엔진으로 Hive 또는 Presto 사용 여부에 따라 달라집니다. 다음 목록에는 가능한 여러 구성에 사용할 수 있는 유효한 JBDC URL 형식이 있습니다.
   + Hive, 미 인증 – `jdbc:hive2://emr-cluster-master-public-dns:10000/;`
   + Hive, LDAP 인증 - `jdbc:hive2://emr-cluster-master-public-dns-name:10000/;AuthMech=3;UID=david;PWD=welcome123;`
   + SSL이 활성화된 Hive의 경우 JDBC URL 형식은 TLS 구성에 Java Keystore File 사용 여부에 따라 달라집니다. Java Keystore File은 Amazon EMR 클러스터의 마스터 노드 ID를 확인하는 데 도움이 됩니다. Java Keystore File을 사용하려면 EMR 클러스터에서 파일을 생성하고 Data Wrangler에 업로드합니다. 파일을 생성하려면 Amazon EMR 클러스터 `keytool -genkey -alias hive -keyalg RSA -keysize 1024 -keystore hive.jks`에서 다음 명령을 사용합니다. Amazon EMR 클러스터에서 명령을 실행하는 방법은 [AWS Systems Manager(으)로 EMR 클러스터 액세스 보안 확립하기](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)에서 확인하세요. 파일을 업로드하려면 Data Wrangler UI 왼쪽 탐색창에서 위쪽 화살표를 선택합니다.

     SSL이 활성화된 Hive에 사용할 수 있는 유효한 JDBC URL 형식은 다음과 같습니다.
     + Java Keystore File이 없는 경우 - `jdbc:hive2://emr-cluster-master-public-dns:10000/;AuthMech=3;UID=user-name;PWD=password;SSL=1;AllowSelfSignedCerts=1;`
     + Java Keystore File이 있는 경우 - `jdbc:hive2://emr-cluster-master-public-dns:10000/;AuthMech=3;UID=user-name;PWD=password;SSL=1;SSLKeyStore=/home/sagemaker-user/data/Java-keystore-file-name;SSLKeyStorePwd=Java-keystore-file-passsword;`
   + Presto, 미 인증 – jdbc:presto://*emr-cluster-master-public-dns*:8889/;
   + LDAP 인증 및 SSL 활성화 Presto의 경우 JDBC URL 형식은 TLS 구성에 Java Keystore File 사용 여부에 따라 달라집니다. Java Keystore File은 Amazon EMR 클러스터의 마스터 노드 ID를 확인하는 데 도움이 됩니다. Java Keystore File을 사용하려면 EMR 클러스터에서 파일을 생성하고 Data Wrangler에 업로드합니다. 파일을 업로드하려면 Data Wrangler UI 왼쪽 탐색창에서 위쪽 화살표를 선택합니다. Presto용 Java Keystore File 생성 방법은 [TLS용 Java Keystore File](https://prestodb.io/docs/current/security/tls.html#server-java-keystore)에서 확인하세요. Amazon EMR 클러스터에서 명령을 실행하는 방법은 [AWS Systems Manager(으)로 EMR 클러스터 액세스 보안 확립하기](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)에서 확인하세요.
     + Java Keystore File이 없는 경우 - `jdbc:presto://emr-cluster-master-public-dns:8889/;SSL=1;AuthenticationType=LDAP Authentication;UID=user-name;PWD=password;AllowSelfSignedServerCert=1;AllowHostNameCNMismatch=1;`
     + Java Keystore File이 있는 경우 - `jdbc:presto://emr-cluster-master-public-dns:8889/;SSL=1;AuthenticationType=LDAP Authentication;SSLTrustStorePath=/home/sagemaker-user/data/Java-keystore-file-name;SSLTrustStorePwd=Java-keystore-file-passsword;UID=user-name;PWD=password;`

Amazon EMR 클러스터에서 데이터를 가져오는 과정에서 문제가 발생할 수 있습니다. 문제 해결 방법은 [Amazon EMR 관련 문제 해결](data-wrangler-trouble-shooting.md#data-wrangler-trouble-shooting-emr)에서 확인하세요.

## Data Bricks에서 데이터 가져오기(JDBC)
<a name="data-wrangler-databricks"></a>

Databricks를 Amazon SageMaker Data Wrangler 흐름의 데이터 소스로 사용할 수 있습니다. Databricks에서 데이터세트를 가져오려면 JDBC(Java Database Connectivity) 가져오기 기능으로 Databricks 데이터베이스에 액세스합니다. 데이터베이스에 액세스한 후 데이터를 확보하고 가져오기 위한 SQL 쿼리를 지정합니다.

Databricks 클러스터를 실행 중이고 해당 클러스터에 JDBC 드라이버를 구성했다고 가정합니다. 자세한 정보는 다음 Databricks 설명서에서 확인하세요.
+ [JDBC 드라이버](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-driver)
+ [JDBC 구성 및 연결 파라미터](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-configuration-and-connection-parameters)
+ [인증 파라미터](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#authentication-parameters)

Data Wrangler는 JDBC URL을에 저장합니다 AWS Secrets Manager. Amazon SageMaker Studio Classic IAM 실행 역할 권한을 부여해야 Secrets Manager를 사용할 수 있습니다. 다음 절차에 따라 권한을 부여합니다.

Secrets Manager에게 권한을 부여하는 방법은 다음과 같습니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. **역할**을 선택합니다.

1. 검색 창에서 Amazon SageMaker Studio Classic이 사용하는 Amazon SageMaker AI 실행 역할을 지정합니다.

1.  역할을 선택합니다.

1. **권한 추가**를 선택합니다.

1. **인라인 정책 생성(Create inline policy)**을 선택합니다.

1. **서비스(Service)**에서 **Secrets Manager**를 지정하고 선택합니다.

1. **작업(Actions)**에서 **권한 관리(Permissions management)** 옆 화살표 아이콘을 선택합니다.

1. **PutResourcePolicy**를 선택합니다.

1. **리소스**에서 **특정 항목**을 선택합니다.

1. **이 계정에서 모두(Any in this account)** 옆 확인란을 선택합니다.

1. **정책 검토**를 선택합니다.

1. **이름(Name)**에서 이름을 지정합니다.

1. **정책 생성(Create policy)**을 선택합니다.

파티션으로 데이터를 더 빠르게 가져올 수 있습니다. Data Wrangler는 파티션으로 데이터를 병렬 처리할 수 있습니다. 기본적으로 Data Wrangler는 2개의 파티션을 사용합니다. 대부분의 사용 사례에서 2개의 파티션은 거의 최적의 데이터 처리 속도를 제공합니다.

파티션을 2개 이상 지정하기로 선택한 경우 데이터를 파티셔닝할 열을 지정할 수도 있습니다. 열의 값 유형은 숫자 또는 날짜여야 합니다.

데이터 구조와 처리 방식을 이해하는 경우에만 파티션을 적용할 것을 권장합니다.

전체 데이터세트를 가져오거나 데이터세트의 일부를 샘플링할 수 있습니다. Databricks 데이터베이스의 샘플링 옵션은 다음과 같습니다.
+ 없음(None) - 전체 데이터세트 가져오기.
+ 첫 K(First K) - 데이터세트의 첫 K개 행 샘플링. K는 사용자가 지정한 정수.
+ 무작위(Randomized) - 지정된 크기의 무작위 샘플 추출.
+ 계층화(Stratified) - 계층화된 무작위 샘플 추출. 계층화된 샘플은 열의 값 비율을 유지합니다.

다음 절차에 따라 Databricks 데이터베이스에서 데이터를 가져옵니다.

Databricks에서 데이터를 가져오는 방법은 다음과 같습니다.

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio**를 선택합니다.

1. Data Wrangler 흐름의 **데이터 가져오기(Import data)** 탭에서 **Databricks**를 선택합니다.

1. 다음 필드를 지정합니다.
   + **데이터세트 이름(Dataset name)** - Data Wrangler 흐름에 있는 데이터세트에 사용할 이름.
   + **드라이버(Driver)** – **com.simba.spark.jdbc.Driver**.
   + **JDBC URL** – Databricks 데이터베이스의 URL. URL 형식은 Databricks 인스턴스마다 다를 수 있습니다. URL을 찾고 그 내부에서 파라미터를 지정하는 방법은 [JDBC 구성 및 연결 파라미터](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-configuration-and-connection-parameters)에서 확인하세요. 다음은 URL 형식을 지정하는 방법에 대한 예제입니다. jdbc:spark://aws-sagemaker-datawrangler.cloud.databricks.com:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/3122619508517275/0909-200301-cut318;AuthMech=3;UID=*token*;PWD=*personal-access-token*.
**참고**  
JDBC URL 자체를 지정하는 대신 JDBC URL이 포함된 보안 ARN을 지정할 수 있습니다. 보안 암호에는 `jdbcURL:JDBC-URL` 형식의 키-값 쌍이 포함되어야 합니다. 자세한 정보는 [Secrets Manager란 무엇입니까?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)에서 확인하세요.

1. SQL SELECT 문을 지정합니다.
**참고**  
Data Wrangler는 쿼리 내의 공통 테이블 표현식(CTE) 또는 임시 테이블을 지원하지 않습니다.

1. **샘플링(Sampling)**에서 샘플링 메서드를 선택합니다.

1. **실행**을 선택합니다.

1. (선택 사항) **미리보기(PREVIEW)**에서 기어 모양 아이콘을 선택하여 **파티션 설정(Partition settings)**을 엽니다.

   1. 파티션 수를 지정합니다. 파티션 수를 지정하면 열별로 파티션을 나눌 수 있습니다.
     + **파티션 수 입력(Enter number of partitions)** - 2보다 큰 값을 지정합니다.
     + (선택 사항) **열별 파티셔닝(Partition by column)** - 다음 필드를 지정합니다. **파티션 수 입력** 값을 지정한 경우에만 열별 파티셔닝이 가능합니다.
       + **열 선택(Select column)** - 데이터 파티션에 사용할 열을 선택합니다. 열의 데이터 유형은 숫자 또는 날짜여야 합니다.
       + **상한(Upper bound)** - 지정한 열 값 중에서 상한은 파티션에서 사용하는 값입니다. 지정하는 값은 가져오는 데이터를 변경하지 않습니다. 가져오기 속도에만 영향을 줍니다. 최상의 성능을 위해 열의 최대값에 가깝게 상한을 지정합니다.
       + **하한(Lower bound)** - 지정한 열 값 중에서 하한은 파티션에서 사용하는 값입니다. 지정하는 값은 가져오는 데이터를 변경하지 않습니다. 가져오기 속도에만 영향을 줍니다. 최상의 성능을 위해 열의 최소값에 가깝게 하한을 지정합니다.

1. **가져오기**를 선택합니다.

## Salesforce 데이터 클라우드에서 데이터를 가져옵니다.
<a name="data-wrangler-import-salesforce-data-cloud"></a>

Salesforce 데이터 클라우드를 Amazon SageMaker Data Wrangler의 데이터 소스로 사용하여 기계 학습용 Salesforce 데이터 클라우드 데이터를 준비할 수 있습니다.

Salesforce 데이터 클라우드를 Data Wrangler 데이터 소스로 사용하면 코드를 한 줄도 작성하지 않고도 Salesforce 데이터에 빠르게 연결할 수 있습니다. Salesforce 데이터를 Data Wrangler에 있는 다른 데이터 소스 데이터와 조인할 수 있습니다.

데이터 클라우드 연결 후 다음을 수행할 수 있습니다.
+ 내장된 시각화로 데이터 시각화
+ 데이터 파악 및 잠재적 오류와 극값 식별
+ 300개 이상의 내장 변환으로 데이터 변환
+ 변환한 데이터 내보내기

**Topics**
+ [관리자 설정](#data-wrangler-import-salesforce-data-cloud-administrator)
+ [데이터 사이언티스트 안내서](#data-wrangler-salesforce-data-cloud-ds)

### 관리자 설정
<a name="data-wrangler-import-salesforce-data-cloud-administrator"></a>

**중요**  
시작하기 전에 사용자가 Amazon SageMaker Studio Classic 버전 1.3.0 이상을 사용하고 있는지 확인하세요. Studio Classic 버전을 확인하고 업데이트하는 방법은 [Amazon SageMaker Data Wrangler로 ML 데이터 준비하기](data-wrangler.md)에서 확인하세요.

Salesforce Data Cloud 액세스 설정 시 다음 작업을 완료해야 합니다.
+ Salesforce 도메인 URL 가져오기. Salesforce는 도메인 URL을 조직 URL로 참조.
+ Salesforce에서 OAuth 자격 증명 가져오기.
+ Salesforce 도메인의 인증 URL 및 토큰 URL 가져오기.
+ OAuth 구성을 사용하여 AWS Secrets Manager 보안 암호를 생성합니다.
+ Data Wrangler가 보안 암호에서 자격 증명을 읽을 때 사용하는 수명 주기 구성 생성.
+ Data Wrangler에 보안 암호 읽기 권한 부여.

이전 작업 수행 후 사용자는 OAuth를 사용하여 Salesforce 데이터 클라우드에 로그인할 수 있습니다.

**참고**  
전체 설정이 완료된 후에도 사용자에게 문제가 발생할 수 있습니다. 문제 해결 방법은 [Salesforce 관련 문제 해결](data-wrangler-trouble-shooting.md#data-wrangler-troubleshooting-salesforce-data-cloud)에서 확인하세요.

다음 절차에 따라 도메인 URL을 가져옵니다.

1. [Salesforce](login.salesforce.com) 로그인 페이지로 이동합니다.

1. **빠른 찾기(Quick find)**에서 **내 도메인(My Domain)**을 지정합니다.

1. **현재 내 도메인 URL(Current My Domain URL)** 값을 텍스트 파일에 복사합니다.

1. `https://`를 URL 시작 부분에 추가합니다.

Salesforce 도메인 URL을 가져온 후 다음 절차에 따라 Salesforce 로그인 자격 증명을 가져와서 Data Wrangler의 Salesforce 데이터 액세스를 허용할 수 있습니다.

Salesforce에서 로그인 자격 증명을 가져와 Data Wrangler에 액세스 권한을 부여하는 방법은 다음과 같습니다.

1. Salesforce 도메인 URL로 이동하여 사용자 계정에 로그인합니다.

1. 기어 모양 아이콘을 선택합니다.

1. 표시되는 검색 창에서 **앱 관리자(App Manager)**를 지정합니다.

1. **새로 연결된 앱(New Connected App)**을 선택합니다.

1. 다음 필드를 지정합니다.
   + 연결된 앱 이름(Connected App Name) - 이름은 마음대로 지정할 수 있으나, Data Wrangler가 포함된 이름을 선택할 것을 권장합니다. 예를 들어, **Salesforce 데이터 클라우드 Data Wrangler 통합**으로 지정할 수 있습니다.
   + API 이름(API name) - 기본값을 사용합니다.
   + 연락 이메일 주소(Contact Email) - 이메일 주소를 지정합니다.
   + **API 헤딩(OAuth 설정 활성화)(API heading(Enable OAuth Settings))** 아래 확인란을 선택하여 OAuth 설정을 활성화합니다.
   + **콜백 URL**에서 Amazon SageMaker Studio Classic URL을 지정합니다. Studio Classic의 URL을 가져오려면에서 URL에 액세스 AWS Management Console 하고 URL을 복사합니다.

1. **선택한 OAuth 범위(Selected OAuth Scopes)** 아래에서 다음을 **사용 가능한 OAuth 범위(Available OAuth Scopes)**에서 **선택한 OAuth 범위**로 옮깁니다.
   + API로 사용자 데이터 관리(`api`)
   + 언제든지 요청 수행(`refresh_token`, `offline_access`)
   + Salesforce 데이터 클라우드 데이터에 대해 ANSI SQL 쿼리 수행(`cdp_query_api`)
   + Salesforce 고객 데이터 플랫폼 프로필 데이터 관리(`cdp_profile_api`)

1. **저장**을 선택합니다. 변경 내용을 저장하면 Salesforce에서 새 페이지가 열립니다.

1. **Continue**를 선택합니다

1. **소비자 키 및 보안 암호(Consumer Key and Secret)**로 이동합니다.

1. **소비자 세부 정보 관리(Manage Consumer Details)**를 선택합니다. Salesforce에서 2단계 인증을 통과해야 할 수도 있는 새 페이지로 리디렉션합니다.

1. 
**중요**  
소비자 키와 고객 보안키를 텍스트 편집기에 복사합니다. 데이터 클라우드를 Data Wrangler에 연결하려면 이 정보가 필요합니다.

1. **연결된 앱 관리(Manage Connected Apps)**로 돌아옵니다.

1. **연결된 앱 이름**과 애플리케이션 이름으로 이동합니다.

1. **관리**를 선택합니다.

   1. **정책 편집(Edit Policies)**을 선택합니다.

   1. **IP 완화(IP Relaxation)**를 **IP 제한 완화(Relax IP restrictions)**로 변경합니다.

   1. **저장**을 선택합니다.

Salesforce 데이터 클라우드에 액세스 권한을 부여한 후에는 사용자에게 권한을 부여해야 합니다. 다음 절차에 따라 권한을 부여합니다.

사용자에게 권한을 부여하는 방법은 다음과 같습니다.

1. 설정 홈페이지로 이동합니다.

1. 왼쪽 탐색창에서 **사용자(Users)**로 검색하고 **사용자** 메뉴 항목을 선택합니다.

1. 사용자 이름이 포함된 하이퍼링크를 선택합니다.

1. **권한 세트 할당(Permission Set Assignments)**으로 이동합니다.

1. **할당 편집(Edit Assignments)**을 선택합니다.

1. 다음 권한을 추가합니다.
   + **고객 데이터 플랫폼 관리자(Customer Data Platform Admin)**
   + **고객 데이터 플랫폼 데이터 인지 전문가(Customer Data Platform Data Aware Specialist)**

1. **저장**을 선택합니다.

Salesforce 도메인에 대한 정보를 가져온 후에는 생성 중인 AWS Secrets Manager 보안 암호의 권한 부여 URL과 토큰 URL을 가져와야 합니다.

다음 절차에 따라 권한 부여 URL과 토큰 URL을 가져옵니다.

**인증 URL 및 토큰 URL을 가져오려면**

1. Salesforce 도메인 URL로 이동합니다.

1. 다음 중 한 가지 방법으로 URL을 가져옵니다. `curl`과 `jq`이(가) 설치된 Linux 배포판에 있는 경우, Linux에서만 작동하는 메서드를 사용할 것을 권장합니다.
   + (Linux 전용) 터미널에서 다음 명령을 지정합니다.

     ```
     curl salesforce-domain-URL/.well-known/openid-configuration | \
     jq '. | { authorization_url: .authorization_endpoint, token_url: .token_endpoint }' | \
     jq '.  += { identity_provider: "SALESFORCE", client_id: "example-client-id", client_secret: "example-client-secret" }'
     ```
   + 

     1. 브라우저에서 **example-org-URL*/.well-known/openid-configuration*으로 이동합니다.

     1. `authorization_endpoint`과 `token_endpoint`을(를) 텍스트 편집기에 복사합니다.

     1. 다음 JSON 객체를 생성합니다.

        ```
        {
          "identity_provider": "SALESFORCE",
          "authorization_url": "example-authorization-endpoint", 
          "token_url": "example-token-endpoint",
          "client_id": "example-consumer-key",
          "client_secret": "example-consumer-secret"
        }
        ```

OAuth 구성 객체를 생성한 후 이를 저장하는 AWS Secrets Manager 보안 암호를 생성할 수 있습니다. 다음 절차에 따라 보안 암호를 생성합니다.

보안 암호를 생성하는 방법은 다음과 같습니다.

1. [AWS Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/)로 이동합니다.

1. **새 보안 암호 저장(Store a new secret)**을 선택합니다.

1. **다른 유형의 보안 암호(Other type of secrets)**를 선택합니다.

1. **키/값(Key/value)** 쌍 아래에서 **일반 텍스트(Plaintext)**를 선택합니다.

1. 빈 JSON을 다음 구성 설정으로 바꿉니다.

   ```
   {
     "identity_provider": "SALESFORCE",
     "authorization_url": "example-authorization-endpoint", 
     "token_url": "example-token-endpoint",
     "client_id": "example-consumer-key",
     "client_secret": "example-consumer-secret"
   }
   ```

1. **다음**을 선택합니다.

1. **보안 암호 이름(Secret Name)**에서 보안 암호 이름을 지정합니다.

1. **태그(Tags)** 아래에서 **추가(Add)**를 선택합니다.

   1. **키(Key)**에서 **sagemaker:partner**를 지정합니다. **값(Value)**은 사용 사례에서 유용할 수 있는 값을 지정할 것을 권장합니다. 어떤 값이든 지정 가능합니다.
**중요**  
키를 생성해야 합니다. 키를 생성하지 않으면 Salesforce에서 데이터를 가져올 수 없습니다.

1. **다음**을 선택합니다.

1. **저장(Store)**을 선택합니다.

1. 생성한 보안 암호를 선택합니다.

1. 다음 필드를 기록해 둡니다.
   + 보안 암호의 Amazon 리소스 이름(ARN)
   + 보안 암호 이름

보안 암호 생성 후, Data Wrangler가 보안 암호를 읽을 수 있는 권한을 추가해야 합니다. 다음 절차에 따라 권한을 추가합니다.

Data Wrangler에 읽기 권한을 추가하는 방법은 다음과 같습니다.

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker/)로 이동합니다.

1. **도메인**을 선택합니다.

1. Data Wrangler 액세스 시 사용하는 도메인을 선택합니다.

1. 본인의 **사용자 프로필(User Profile)**을 선택합니다.

1. **세부 정보(Details)** 아래에서 **실행 역할(Execution role)**을 찾습니다. ARN 형식은 `arn:aws:iam::111122223333:role/example-role`입니다. SageMaker AI 실행 역할을 기록해 두세요. ARN 내에서는 모든 것이 `role/` 뒤에 옵니다.

1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

1. **IAM 검색** 검색 창에서 SageMaker AI 실행 역할 이름을 지정합니다.

1.  역할을 선택합니다.

1. **권한 추가**를 선택합니다.

1. **인라인 정책 생성(Create inline policy)**을 선택합니다.

1. JSON 탭을 선택합니다.

1. 편집기에서 다음 정책을 지정합니다.

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

****  

   ```
   {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "aws:ResourceTag/sagemaker:partner": "*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:UpdateSecret"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:AmazonSageMaker-*"
        }
    ]
   }
   ```

------

1. **정책 검토**를 선택합니다.

1. **이름(Name)**에서 이름을 지정합니다.

1. **정책 생성**을 선택합니다.

Data Wrangler에 보안 암호 읽기 권한을 부여한 후에는 Amazon SageMaker Studio Classic 사용자 프로필에 Secrets Manager 보안 암호를 사용하는 수명 주기 구성을 추가해야 합니다.

다음 절차에 따라 수명 주기 구성을 만들고 Studio Classic 프로필에 추가합니다.

수명 주기 구성을 만들고 Studio Classic 프로필에 추가하는 방법은 다음과 같습니다.

1. [Amazon SageMaker AI 콘솔](console.aws.amazon.com/sagemaker)로 이동합니다.

1. **도메인**을 선택합니다.

1. Data Wrangler 액세스 시 사용하는 도메인을 선택합니다.

1. 본인의 **사용자 프로필(User Profile)**을 선택합니다.

1. 다음과 같은 애플리케이션이 보이면 삭제합니다.
   + KernelGateway
   + JupyterKernel
**참고**  
애플리케이션을 삭제하면 Studio Classic이 업데이트됩니다. 업데이트 완료 시까지 시간이 걸릴 수 있습니다.

1. 업데이트 대기중에 **수명 주기 구성(Lifecycle configurations)**을 선택합니다.

1. 현재 페이지에 **Studio Classic 수명 주기 구성**이 명시되어 있는지 확인합니다.

1. **구성 생성**을 선택합니다.

1. **Jupyter 서버 앱(Jupyter server app)** 선택 여부를 확인합니다.

1. **다음**을 선택합니다.

1. **이름(Name)**에서 구성 이름을 지정합니다.

1. **스크립트(Scripts)**에서 다음 스크립트를 지정합니다.

   ```
   #!/bin/bash
   set -eux
   
   cat > ~/.sfgenie_identity_provider_oauth_config <<EOL
   {
       "secret_arn": "secrets-arn-containing-salesforce-credentials"
   }
   EOL
   ```

1. **제출**을 선택합니다.

1. 왼쪽 탐색창에서 **도메인**을 선택합니다.

1. 도메인을 선택합니다.

1. **환경**을 선택합니다.

1. **개인용 Studio Classic 앱의 수명 주기 구성**에서 **연결**을 선택합니다.

1. **기존 구성(Existing configuration)**을 선택합니다.

1. **Studio Classic 수명 주기 구성** 아래에서 만든 수명 주기 구성을 선택합니다.

1. **도메인에 연결(Attach to domain)**을 선택합니다.

1. 연결한 수명 주기 구성 옆 확인란을 선택합니다.

1. **기본값으로 설정(Set as default)**을 선택합니다.

수명 주기 구성 설정 시 문제가 발생할 수 있습니다. 디버깅 방법은 [Amazon SageMaker Studio Classic의 수명 주기 구성 디버깅](studio-lcc-debug.md)에서 확인하세요.

### 데이터 사이언티스트 안내서
<a name="data-wrangler-salesforce-data-cloud-ds"></a>

Salesforce 데이터 클라우드를 연결하고 Data Wrangler에 있는 데이터에 액세스하는 방법은 다음과 같습니다.

**중요**  
관리자는 이전 섹션의 정보를 사용하여 Salesforce 데이터 클라우드를 설정해야 합니다. 문제 발생 시 관리자에게 문의하여 문제 해결 지원을 받으세요.

Studio Classic을 열고 버전을 확인하려면 다음 절차를 참조하세요.

1. [사전 조건](data-wrangler-getting-started.md#data-wrangler-getting-started-prerequisite)의 단계를 사용하여 Amazon SageMaker Studio Classic을 통해 Data Wrangler에 액세스할 수 있습니다.

1. Studio Classic 시작 시 사용하고자 하는 사용자 옆에서 **앱 시작**을 선택합니다.

1. **Studio**를 선택합니다.

**Salesforce 데이터 클라우드의 데이터로 Data Wrangler에서 데이터세트를 생성하려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Salesforce 데이터 클라우드(Salesforce Data Cloud)**를 선택합니다.

1. **연결 이름(Connection name)**에서 Salesforce 데이터 클라우드 연결 이름을 지정합니다.

1. **조직 URL(Org URL)**에서 Salesforce 계정의 조직 URL을 지정합니다. URL은 관리자로부터 받을 수 있습니다.

1. **연결**을 선택합니다.

1. Salesforce 로그인 자격 증명을 지정합니다.

연결 후 Salesforce 데이터 클라우드의 데이터로 데이터세트를 생성할 수 있습니다.

테이블을 선택한 후 쿼리를 작성하고 실행할 수 있습니다. 쿼리 출력은 **쿼리 결과(Query results)** 아래에 표시됩니다.

쿼리 출력 결정 후 쿼리 결과를 Data Wrangler 흐름으로 가져와 데이터 변환을 수행할 수 있습니다.

데이터세트 생성 후 **데이터 흐름(Data flow)** 화면으로 이동하여 데이터 변환을 시작합니다.

## Snowflake에서 데이터 가져오기
<a name="data-wrangler-snowflake"></a>

SageMaker Data Wrangler에서 Snowflake를 데이터 소스로 사용하여 Snowflake에서 기계 학습용 데이터를 준비할 수 있습니다.

Data Wrangler에서 Snowflake를 데이터 소스로 사용하면 단 한 줄의 코드도 작성하지 않고도 Snowflake에 빠르게 연결할 수 있습니다. Snowflake 데이터를 Data Wrangler에 있는 다른 데이터 소스 데이터와 조인할 수 있습니다.

연결 후, Snowflake에 저장된 데이터를 대화식으로 쿼리하고, 300개 이상의 미리 구성된 데이터 변환으로 데이터를 변환하고, 미리 구성된 강력한 시각화 템플릿 세트로 데이터를 파악하고 잠재적 오류와 극값을 식별하고, 데이터 준비 워크플로의 불일치를 신속하게 식별하고, 모델을 프로덕션에 배포하기 전에 문제를 진단할 수 있습니다. 마지막으로, 데이터 준비 워크플로를 Amazon S3로 내보내 Amazon SageMaker Autopilot, Amazon SageMaker Feature Store, Amazon SageMaker Pipelines 등 다른 SageMaker AI 기능과 함께 사용할 수 있습니다.

생성한 AWS Key Management Service 키를 사용하여 쿼리의 출력을 암호화할 수 있습니다. 에 대한 자세한 내용은 단원을 AWS KMS참조하십시오[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html).

**Topics**
+ [관리자 안내서](#data-wrangler-snowflake-admin)
+ [데이터 사이언티스트 안내서](#data-wrangler-snowflake-ds)

### 관리자 안내서
<a name="data-wrangler-snowflake-admin"></a>

**중요**  
세분화된 액세스 제어 및 모범 사례에 대한 자세한 내용은 [보안 액세스 제어](https://docs.snowflake.com/en/user-guide/security-access-control.html)에서 확인하세요.

이 섹션은 SageMaker Data Wrangler에서 Snowflake 액세스 설정을 담당하는 Snowflake 관리자를 대상으로 합니다.

**중요**  
관리자는 Snowflake 내 액세스 제어의 관리 및 모니터링을 담당합니다. Data Wrangler는 Snowflake와 관련된 액세스 제어 계층을 추가하지 않습니다.  
액세스 제어에는 다음이 포함됩니다.  
사용자 액세스 데이터
(선택 사항) Snowflake에 Amazon S3 버킷에 쿼리 결과를 쓸 수 있는 기능을 제공하는 스토리지 통합
사용자가 실행할 수 있는 쿼리

#### (선택 사항) Snowflake 데이터 가져오기 권한 구성
<a name="data-wrangler-snowflake-admin-config"></a>

기본적으로 Data Wrangler는 Amazon S3 위치에 데이터 사본을 생성하지 않고 Snowflake 데이터를 쿼리합니다. Snowflake와 스토리지 통합을 구성하는 경우 다음 정보를 사용합니다. 사용자는 스토리지 통합을 통해 쿼리 결과를 Amazon S3 위치에 저장할 수 있습니다.

사용자마다 민감한 데이터 액세스 수준이 다를 수 있습니다. 데이터 보안 최적화를 위해 개별 사용자에게 자체 스토리지 통합을 제공합니다. 개별 스토리지 통합에는 자체 데이터 거버넌스 정책이 있어야 합니다.

현재 이 기능은 옵트인 리전에서는 사용할 수 없습니다.

Snowflake는 S3 버킷 및 디렉터리에 대해 다음과 같은 권한이 있어야 디렉터리 내 파일에 액세스할 수 있습니다.
+ `s3:GetObject`
+ `s3:GetObjectVersion`
+ `s3:ListBucket`
+ `s3:ListObjects`
+ `s3:GetBucketLocation`

**IAM 정책 생성**

Snowflake가 Amazon S3 버킷에서 데이터를 로드 및 언로드하는 액세스 권한을 구성하려면 IAM 정책을 생성해야 합니다.

다음은 정책 생성 시 사용하는 JSON 정책 문서입니다.

```
# Example policy for S3 write access
# This needs to be updated
{
"Version": "2012-10-17",		 	 	 
"Statement": [
  {
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::bucket/prefix/*"
  },
  {
    "Effect": "Allow",
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::bucket/",
    "Condition": {
        "StringLike": {
            "s3:prefix": ["prefix/*"]
        }
    }
  }
 ]
}
```

정책 문서로 정책을 생성하는 방법과 절차는 [IAM 정책 생성하기](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)에서 확인하세요.

Snowflake에서 IAM 권한을 사용하는 방법에 대한 개요가 있는 설명서는 다음 리소스에서 확인하세요.
+ [IAM이란 무엇입니까?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [에서 IAM 역할 생성 AWS](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-2-create-the-iam-role-in-aws)
+ [Snowflake에서 클라우드 스토리지 통합 생성하기](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-3-create-a-cloud-storage-integration-in-snowflake)
+ [Snowflake 계정의 AWS IAM 사용자 검색](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-4-retrieve-the-aws-iam-user-for-your-snowflake-account)
+ [IAM 사용자에게 버킷 액세스 권한 부여하기](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-5-grant-the-iam-user-permissions-to-access-bucket-objects)

데이터 사이언티스트의 Snowflake 역할 사용 권한을 스토리지 통합에 부여하려면 `GRANT USAGE ON INTEGRATION integration_name TO snowflake_role;`을 실행해야 합니다.
+ `integration_name`은 스토리지 통합의 이름입니다.
+ `snowflake_role`은 데이터 사이언티스트 사용자에게 부여되는 기본 [Snowflake 역할](https://docs.snowflake.com/en/user-guide/security-access-control-overview.html#roles)의 이름입니다.

#### Snowflake OAuth 액세스 설정하기
<a name="data-wrangler-snowflake-oauth-setup"></a>

사용자가 Data Wrangler에 자격 증명을 직접 입력하도록 하는 대신, ID 제공업체를 통해 Snowflake에 액세스하도록 할 수 있습니다. 다음은 Data Wrangler가 지원하는 ID 제공업체에 대한 Snowflake 설명서로 연결되는 링크입니다.
+ [Azure AD](https://docs.snowflake.com/en/user-guide/oauth-azure.html)
+ [Okta](https://docs.snowflake.com/en/user-guide/oauth-okta.html)
+ [Ping Federate](https://docs.snowflake.com/en/user-guide/oauth-pingfed.html)

이전 링크의 설명서를 사용하여ID 제공업체 액세스를 설정합니다. 이 섹션의 정보와 절차는 설명서를 사용하여 Data Wrangler에서 Snowflake에 액세스하는 방법을 이해하는 데 도움이 됩니다.

ID 제공업체는 Data Wrangler를 애플리케이션으로 인식해야 합니다. 다음 절차에 따라 Data Wrangler를 ID 제공업체 내 애플리케이션으로 등록합니다.

1. Data Wrangler를 애플리케이션으로 등록하는 프로세스를 시작하는 구성을 선택합니다.

1. ID 제공업체 사용자에게 Data Wrangler 액세스 권한을 부여합니다.

1. 클라이언트 자격 증명을 AWS Secrets Manager 보안 암호로 저장하여 OAuth 클라이언트 인증을 켭니다.

1. https://*domain-ID*.studio.*AWS 리전*.sagemaker.aws/jupyter/default/lab 형식으로 리디렉션 URL을 지정합니다.
**중요**  
Amazon SageMaker AI 도메인 ID를 지정하고 Data Wrangler를 실행하는 데 AWS 리전 사용하는를 지정합니다.
**중요**  
각 Amazon SageMaker AI 도메인과 Data Wrangler를 실행하는 AWS 리전 위치에 대한 URL을 등록해야 합니다. 도메인에서 리디렉션 URLs이 설정되지 AWS 리전 않은 사용자는 자격 증명 공급자를 통해 인증하여 Snowflake 연결에 액세스할 수 없습니다.

1. 권한 부여 코드 및 토큰 권한 새로 고침 유형이 Data Wrangler 애플리케이션에서 허용되는지 확인하세요.

ID 제공업체 내에서 사용자 수준에서 OAuth 토큰을 Data Wrangler에 전송하는 서버를 설정해야 합니다. 서버는 Snowflake를 대상으로 토큰을 전송합니다.

Snowflake는 IAM 역할이 사용하는 고유한 역할의 개념을 사용합니다 AWS. Snowflake 계정과 연결된 기본 역할을 사용하려면 어떤 역할이든 사용할 수 있도록 ID 제공업체를 구성해야 합니다. 예를 들어, 사용자의 Snowflake 프로필 내 기본 역할이 `systems administrator`인 경우, Data Wrangler에서 Snowflake로의 연결 역할은 `systems administrator`이(가) 됩니다.

다음 절차에 따라 서버를 설정합니다.

서버 설정 방법은 다음과 같습니다. 마지막 단계를 제외한 모든 단계는 Snowflake 내에서 실행됩니다.

1. 서버 또는 API 설정을 시작합니다.

1. 권한 부여 코드 및 토큰 권한 새로 고침 유형을 사용하도록 권한 부여 서버를 구성합니다.

1. 액세스 토큰 전체 기간을 지정합니다.

1. 새로 고침 토큰 유휴 제한 시간을 설정합니다. 유휴 제한 시간은 새로 고침 토큰을 사용하지 않을 경우 만료되는 시간입니다.
**참고**  
Data Wrangler에서 작업을 예약하는 경우, 유휴 제한 시간을 처리 작업 빈도보다 길게 설정할 것을 권장합니다. 그렇지 않으면 새로 고침 토큰이 실행되기 전에 만료되어 일부 처리 작업이 실패할 수 있습니다. 새로 고침 토큰이 만료되면 사용자는 Data Wrangler를 통해 Snowflake 연결에 액세스하여 다시 인증해야 합니다.

1. `session:role-any`을(를) 새 범위로 지정합니다.
**참고**  
Azure AD에서 범위의 고유 식별자를 복사합니다. Data Wrangler에 해당 식별자를 입력해야 합니다.

1. 
**중요**  
Snowflake용 외부 OAuth 보안 통합에서 `external_oauth_any_role_mode`을(를) 활성화합니다.

**중요**  
Data Wrangler는 교대식 새로 고침 토큰을 지원하지 않습니다. 교대식 새로 고침 토큰을 사용하면 액세스가 실패하거나 사용자가 자주 로그인해야 할 수 있습니다.

**중요**  
새로 고침 토큰이 만료되면 사용자는 Data Wrangler를 통해 Snowflake 연결에 액세스하여 다시 인증해야 합니다.

OAuth 공급자 설정 후, 공급자 연결 시 필요한 정보를 Data Wrangler에 입력합니다. ID 제공업체의 설명서를 사용하여 다음 필드의 값을 가져올 수 있습니다.
+ 토큰 URL(Token URL) - ID 제공업체가 Data Wrangler에 보내는 토큰의 URL.
+ 권한 부여 URL(Authorization URL) - ID 제공업체의 권한 부여 서버 URL.
+ 클라이언트 ID(Client ID) - ID 제공업체의 ID.
+ 클라이언트 보안 암호(Client secret) - 권한 부여 서버 또는 API만 인식하는 보안 암호.
+ (Azure AD 전용) 복사한 OAuth 범위 자격 증명다.

필드와 값을 AWS Secrets Manager 보안 암호에 저장하고 Data Wrangler에 사용하는 Amazon SageMaker Studio Classic 수명 주기 구성에 추가합니다. 수명 주기 구성은 쉘 스크립트입니다. 이것으로 Data Wrangler가 보안 암호의 Amazon 리소스 이름(ARN)에 액세스할 수 있게 합니다. 보안 암호 생성에 대한 자세한 내용은 [하드코딩된 보안 암호를 다음으로 이동을 참조하세요 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html). Studio Classic에서 수명 주기 구성을 적용하는 방법은 [수명 주기 구성을 사용하여 Amazon SageMaker Studio Classic 사용자 지정](studio-lcc.md)에서 확인하세요.

**중요**  
Secrets Manager 보안 암호를 만들기 전에 Amazon SageMaker Studio Classic에서 사용하는 SageMaker AI 실행 역할에 Secrets Manager에서 보안 암호를 만들고 업데이트할 수 있는 권한이 있는지 확인하세요. 권한 추가에 대한 자세한 정보는 [예: 보안 암호 생성 권한](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html#auth-and-access_examples_create)에서 확인하세요.

Okta 및 Ping Federate의 보안 암호 형식은 다음과 같습니다.

```
{
    "token_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/token",
    "client_id":"example-client-id",
    "client_secret":"example-client-secret",
    "identity_provider":"OKTA"|"PING_FEDERATE",
    "authorization_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/authorize"
}
```

Azure AD의 보안 암호 형식은 다음과 같습니다.

```
{
    "token_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/token",
    "client_id":"example-client-id",
    "client_secret":"example-client-secret",
    "identity_provider":"AZURE_AD",
    "authorization_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/authorize",
    "datasource_oauth_scope":"api://appuri/session:role-any)"
}
```

생성한 Secrets Manager 보안 암호를 사용하는 수명 주기 구성이 있어야 합니다. 수명 주기 구성을 생성하거나 이미 생성된 구성을 수정할 수 있습니다. 구성에는 다음 스크립트를 사용해야 합니다.

```
#!/bin/bash

set -eux

## Script Body

cat > ~/.snowflake_identity_provider_oauth_config <<EOL
{
    "secret_arn": "example-secret-arn"
}
EOL
```

수명 주기 구성 설정 방법은 [수명 주기 구성 생성 및 Amazon SageMaker Studio Classic과 연결](studio-lcc-create.md)에서 확인하세요. 설정 프로세스를 진행하는 방법은 다음과 같습니다.
+ 구성의 애플리케이션 유형을 `Jupyter Server`(으)로 설정합니다.
+ 사용자가 있는 Amazon SageMaker AI 도메인에 구성을 연결합니다.
+ 구성이 기본적으로 실행하도록 합니다. 사용자가 Studio Classic에 로그인할 때마다 실행되어야 합니다. 그렇지 않으면 사용자가 Data Wrangler를 사용할 때 구성에 저장된 자격 증명을 사용할 수 없습니다.
+ 수명 주기 구성은 사용자의 홈 폴더에서 `snowflake_identity_provider_oauth_config`(이)라는 이름의 파일을 생성합니다. 이 파일에는 Secrets Manager 보안 암호가 있습니다. Jupyter 서버 인스턴스가 초기화될 때마다 해당 파일이 사용자의 홈 폴더에 있는지 확인하세요.

#### 를 통한 Data Wrangler와 Snowflake 간의 프라이빗 연결 AWS PrivateLink
<a name="data-wrangler-security-snowflake-vpc"></a>

이 섹션에서는를 AWS PrivateLink 사용하여 Data Wrangler와 Snowflake 간에 프라이빗 연결을 설정하는 방법을 설명합니다. 다음 섹션에 단계별 설명이 있습니다.

##### VPC 생성
<a name="data-wrangler-snowflake-snowflake-vpc-setup"></a>

VPC를 설정하지 않은 경우, [새 VPC 생성](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/gsg_create_vpc.html#create_vpc) 지침에 따라 생성합니다.

프라이빗 연결 설정 시 사용할 VPC를 선택한 후, Snowflake 관리자에게 다음 자격 증명을 제공하여 AWS PrivateLink을(를) 활성화합니다.
+ VPC ID
+ AWS 계정 ID
+ Snowflake 액세스 시 사용하는 관련 계정 URL

**중요**  
Snowflake 설명서의 설명대로 Snowflake 계정 활성화는 최대 2영업일이 소요될 수 있습니다.

##### Snowflake AWS PrivateLink 통합 설정
<a name="data-wrangler-snowflake-snowflake-vpc-privatelink-setup"></a>

 AWS PrivateLink 가 활성화되면 Snowflake 워크시트에서 다음 명령을 실행하여 리전의 AWS PrivateLink 구성을 검색합니다. Snowflake 콘솔에 로그인하고 **워크시트(Worksheets)** 아래에 `select SYSTEM$GET_PRIVATELINK_CONFIG();`을(를) 입력합니다.

1. 결과 JSON 객체에서 `privatelink-account-name`, `privatelink_ocsp-url`, `privatelink-account-url`, `privatelink_ocsp-url` 값을 검색합니다. 개별 값의 예는 다음 코드 조각에 있습니다. 이 값을 저장했다가 나중에 사용합니다.

   ```
   privatelink-account-name: xxxxxxxx.region.privatelink
   privatelink-vpce-id: com.amazonaws.vpce.region.vpce-svc-xxxxxxxxxxxxxxxxx
   privatelink-account-url: xxxxxxxx.region.privatelink.snowflakecomputing.com
   privatelink_ocsp-url: ocsp.xxxxxxxx.region.privatelink.snowflakecomputing.com
   ```

1.  AWS 콘솔로 전환하고 VPC 메뉴로 이동합니다.

1. 왼쪽 창에서 **엔드포인트(Endpoints)** 링크를 선택하여 **VPC 엔드포인트(VPC Endpoints)** 설정으로 이동합니다.

   그 곳에서 **엔드포인트 생성(Create Endpoint)**을 선택합니다.

1. 다음 스크린샷과 같이 **이름별 서비스 찾기(Find service by name)** 라디오 버튼을 선택합니다.  
![\[콘솔의 엔드포인트 만들기 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-radio.png)

1. **서비스 이름(Service Name)** 필드에 이전 단계에서 검색한 `privatelink-vpce-id` 값을 붙여넣고 **검증(Verify)**을 선택합니다.

   정상적으로 연결되면 다음 스크린샷과 같이 **서비스 이름 찾음(Service name found)**이라는 녹색 알림 메시지가 화면에 나타나고 **VPC** 및 **서브넷(Subnet)** 옵션이 자동으로 확장됩니다. 대상 리전에 따라 결과 화면에 다른 AWS 리전 이름이 표시될 수 있습니다.  
![\[연결에 성공했음을 보여주는 콘솔의 엔드포인트 만들기 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-service-name-found.png)

1. **VPC** 드롭다운 목록에서 Snowflake로 전송한 것과 동일한 VPC ID를 선택합니다.

1. 서브넷을 아직 생성하지 않은 경우, 다음 지침에 따라 서브넷을 생성합니다.

1. **서브넷**을 **VPC** 드롭다운 목록에서 선택합니다. 그 다음에 **서브넷 생성(Create subnet)**을 선택하고 프롬프트에 따라 VPC에 서브셋을 생성합니다. Snowflake를 전송한 VPC ID를 선택해야 합니다.

1. **보안 그룹 구성(Security Group Configuration)** 아래에서 **새 보안 그룹 생성(Create New Security Group)**을 선택하여 새 탭에서 기본 **보안 그룹(Security Group)** 화면을 엽니다. 이 새 탭에서 **보안 그룹 생성(Create Security Group)**을 선택합니다.

1. 보안 그룹 이름(예: `datawrangler-doc-snowflake-privatelink-connection`)과 설명을 입력합니다. 이전 단계에서 사용한 VPC ID를 선택해야 합니다.

1. VPC 내에서 이 VPC 엔드포인트로 들어오는 트래픽을 허용하는 두 가지 규칙을 추가합니다.

   별도 탭에서 **VPC(Your VPCs)** 아래에 있는 VPC로 이동하여 VPC의 CIDR 블록을 검색합니다. 그 다음에 **규칙 추가(Add Rule)**를 **인바운드 규칙(Inbound Rules)** 섹션에서 선택합니다. `HTTPS` 유형을 선택하고, 양식에서 **소스**를 **사용자 지정**으로 둔 다음, 이전 `describe-vpcs` 호출에서 검색된 값(예: `10.0.0.0/16`)을 붙여넣습니다.

1. **보안 그룹 생성**을 선택합니다. **보안 그룹 ID(Security Group ID)**를 새로 생성된 보안 그룹(예: `sg-xxxxxxxxxxxxxxxxx`)에서 검색합니다.

1. **VPC 엔드포인트** 구성 화면에서 기본 보안 그룹을 제거합니다. 검색 필드에 보안 그룹 ID를 붙여넣고 확인란을 선택합니다.  
![\[콘솔의 보안 그룹 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-security-group.png)

1. **엔드포인트 생성**을 선택합니다.

1. 엔드포인트가 정상적으로 생성되면 VPC ID로 지정된 VPC 엔드포인트 구성으로 연결되는 링크가 있는 페이지가 표시됩니다. 링크를 선택하여 전체 구성을 봅니다.  
![\[엔드포인트 세부 정보 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-success-endpoint.png)

   DNS 이름 목록에서 맨 위에 있는 레코드를 검색합니다. 지역 이름(예: `us-west-2`)만 포함하고 가용 영역 문자 표기(예: `us-west-2a`)가 없기 때문에 기타 DNS 이름과 구별할 수 있습니다. 이 정보를 저장했다가 나중에 사용합니다.

##### VPC에서 Snowflake 엔드포인트 DNS 구성하기
<a name="data-wrangler-snowflake-vpc-privatelink-dns"></a>

이 섹션에는 VPC에서 Snowflake 엔드포인트 DNS를 구성하는 방법에 대한 설명이 있습니다. 이를 통해 VPC가 Snowflake AWS PrivateLink 엔드포인트에 대한 요청을 해결할 수 있습니다.

1.  AWS 콘솔에서 [Route 53 메뉴](https://console.aws.amazon.com/route53)로 이동합니다.

1. **호스팅 영역(Hosted Zones)** 옵션을 선택합니다(필요 시, 왼쪽 메뉴를 확장하면 이 옵션을 찾을 수 있음).

1. **Create Hosted Zone(호스팅 영역 생성)**을 선택합니다.

   1. **도메인 이름(Domain name)** 필드에서 이전 단계에서 저장한 `privatelink-account-url` 값을 참조합니다. 이 필드에서는 Snowflake 계정 ID가 DNS 이름에서 제거되고 리전 식별자로 시작하는 값만 사용합니다. **리소스 레코드 세트(Resource Record Set)**도 `region.privatelink.snowflakecomputing.com` 같은 하위 도메인용으로 나중에 생성됩니다.

   1. **프라이빗 호스팅 영역(Private Hosted Zone)** 라디오 버튼을 **유형(Type)** 섹션에서 선택합니다. 리전 코드는 `us-west-2`이(가) 아닐 수 있습니다. Snowflake가 반환한 DNS 이름을 참조합니다.  
![\[콘솔의 호스팅 영역 만들기 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-create-hosted-zone.png)

   1. **호스팅 영역과 연결할 VPC(VPCs to associate with the hosted zone)** 섹션에서 VPC가 위치한 리전과 이전 단계에서 사용한 VPC ID를 선택합니다.  
![\[콘솔의 호스팅 영역 섹션과 연결할 VPC 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-vpc-hosted-zone.png)

   1. **호스팅 영역 생성(Create hosted zone)**을 선택합니다.

1. 다음으로, `privatelink-account-url`과 `privatelink_ocsp-url`에 대한 레코드를 각각 하나씩 생성합니다.
   + **호스팅 영역** 메뉴에서 **레코드 세트 생성(Create Record Set)**을 선택합니다.

     1. **레코드 이름(Record name)** 아래에 Snowflake 계정 ID만 입력합니다(`privatelink-account-url`의 첫 8자).

     1. **레코드 유형(Record type)**에서 **CNAME**을 선택합니다.

     1. **값(Value)** 아래에 Snowflake AWS PrivateLink 통합 설정 섹션의 마지막 단계에서 검색한 리전 VPC 엔드포인트의 DNS 이름을 입력합니다.**  
![\[콘솔의 레코드 빠르게 만들기 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-quick-create-record.png)

     1. **레코드 생성**을 선택합니다.

     1. `privatelink-ocsp-url`(으)로 표시한 OCSP 레코드에 대해 `ocsp`부터 레코드 이름의 8자 Snowflake ID(예: `ocsp.xxxxxxxx`)까지 이전 단계를 반복합니다.  
![\[콘솔의 레코드 빠르게 만들기 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-quick-create-ocsp.png)

##### VPC에 Route 53 해석기 인바운드 엔드포인트 구성하기
<a name="data-wrangler-snowflake-vpc-privatelink-route53"></a>

이 섹션에는 VPC에서 Route 53 해석기 인바운드 엔드포인트를 구성하는 방법에 대한 설명이 있습니다.

1.  AWS 콘솔에서 [Route 53 메뉴](https://console.aws.amazon.com/route53)로 이동합니다.
   + 왼쪽 창에 있는 **보안(Security)** 섹션에서 **보안 그룹(Security Groups)** 옵션을 선택합니다.

1. **보안 그룹 생성**을 선택합니다.
   + 보안 그룹 이름(예: `datawranger-doc-route53-resolver-sg`)과 설명을 입력합니다.
   + 이전 단계에서 사용한 VPC ID를 선택합니다.
   + VPC CIDR 블록 내에서 UDP 및 TCP를 통한 DNS를 허용하는 규칙을 생성합니다.  
![\[콘솔의 인바운드 규칙 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-inbound-rules.png)
   + **보안 그룹 생성**을 선택합니다. **보안 그룹 ID(Security Group ID)**에 유의하여 VPC 엔드포인트 보안 그룹에 트래픽을 허용하는 규칙을 추가합니다.

1.  AWS 콘솔에서 [Route 53 메뉴](https://console.aws.amazon.com/route53)로 이동합니다.
   + **해석기(Resolver)** 섹션에서 **인바운드 엔드포인트(Inbound Endpoint)** 옵션을 선택합니다.

1. **인바운드 엔드포인트 생성(Create Inbound Endpoint)**을 선택합니다.
   + 엔드포인트 이름을 입력합니다.
   + **리전의 VPC(VPC in the Region)** 드롭다운 목록에서 이전 단계에서 사용한 VPC ID를 선택합니다.
   + **이 엔드포인트의 보안 그룹(Security group for this endpoint)** 드롭다운 목록에서 이 섹션의 2단계에 있는 보안 그룹 ID를 선택합니다.  
![\[콘솔의 인바운드 엔드포인트에 대한 일반 설정 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-inbound-endpoint.png)
   + **IP 주소(IP Address)** 섹션에서 가용 영역을 선택하고 서브넷을 선택한 다음 각 IP 주소마다 **자동으로 선택된 IP 주소 사용(Use an IP address that is selected automatically)** 라디오 선택기를 선택된 상태로 둡니다.  
![\[콘솔의 IP 주소 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-ip-address-1.png)
   + **제출**을 선택합니다.

1. **인바운드 엔드포인트** 생성 후 선택합니다.

1. 인바운드 엔드포인트 생성 후 해석기의 두 IP 주소를 기록해 둡니다.  
![\[콘솔의 IP 주소 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/snowflake-ip-addresses-2.png)

##### SageMaker AI VPC 엔드포인트
<a name="data-wrangler-snowflake-sagemaker-vpc-endpoints"></a>

 이 섹션에는 Amazon SageMaker Studio Classic, SageMaker 노트북, SageMaker API, SageMaker 런타임, Amazon SageMaker Feature Store 런타임의 VPC 엔드포인트를 만드는 방법에 대한 설명이 있습니다.

**모든 엔드포인트에 적용되는 보안 그룹을 생성합니다.**

1.  AWS 콘솔에서 [EC2 메뉴](https://console.aws.amazon.com/ec2)로 이동합니다.

1. **네트워킹 및 보안(Network & Security)** 섹션에서 **보안 그룹** 옵션을 선택합니다.

1. **보안 그룹 생성**을 선택합니다.

1. 보안 그룹 이름 및 설명(예: `datawrangler-doc-sagemaker-vpce-sg`)을 입력합니다. SageMaker AI에서 이 그룹으로 들어오는 HTTPS를 통한 트래픽을 허용하는 규칙이 나중에 추가됩니다.

**엔드포인트 생성**

1.  AWS 콘솔에서 [VPC 메뉴](https://console.aws.amazon.com/vpc)로 이동합니다.

1. **엔드포인트** 옵션을 선택합니다.

1. **엔드포인트 생성**을 선택합니다.

1. **검색(Search)** 필드에서 이름으로 서비스를 검색합니다.

1. **VPC** 드롭다운 목록에서 Snowflake AWS PrivateLink 연결이 있는 VPC를 선택합니다.

1. **서브넷(Subnets)** 섹션에서 Snowflake PrivateLink 연결에 액세스할 수 있는 서브넷을 선택합니다.

1. **DNS 이름 활성화(Enable DNS Name)** 확인란을 선택 상태로 둡니다.

1. **보안 그룹** 섹션에서 이전 섹션에서 생성한 보안 그룹을 선택합니다.

1. **엔드포인트 생성**을 선택합니다.

**Studio Classic 및 Data Wrangler 구성**

이 섹션에는 Studio Classic과 Data Wrangler를 구성하는 방법에 대한 설명이 있습니다.

1. 보안 그룹을 구성합니다.

   1.  AWS 콘솔에서 Amazon EC2 메뉴로 이동합니다.

   1. **보안 그룹** 옵션을 **네트워크 및 보안** 섹션에서 선택합니다.

   1. **보안 그룹 생성**을 선택합니다.

   1. 보안 그룹의 이름 및 설명(예: `datawrangler-doc-sagemaker-studio`)을 입력합니다.

   1. 다음 인바운드 규칙을 생성합니다.
      + Snowflake PrivateLink 통합 설정 단계에서 생성한 Snowflake PrivateLink 연결을 위해 프로비저닝한 보안 그룹에 대한 HTTPS 연결.**
      + Snowflake PrivateLink 통합 단계에서 생성한 Snowflake PrivateLink 연결을 위해 프로비저닝한 보안 그룹에 대한 HTTP 연결.**
      + VPC에 Route 53 해석기 인바운드 엔드포인트 구성하기 2단계에서 생성한 Route 53 인바운드 엔드포인트 보안 그룹에 대한 DNS용 UDP 및 TCP(포트 53).**

   1. 오른쪽 하단에서 **보안 그룹 생성** 버튼을 선택합니다.

1. Studio Classic을 구성합니다.
   +  AWS 콘솔에서 SageMaker AI 메뉴로 이동합니다.
   + 왼쪽 콘솔에서 **SageMaker AI Studio Classic** 옵션을 선택합니다.
   + 도메인을 구성하지 않은 경우, **시작하기(Get Started)** 메뉴가 나타납니다.
   + **표준 설정(Standard Setup)** 옵션을 **시작하기** 메뉴에서 선택합니다.
   + **인증 방법**에서 **AWS 자격 증명 및 액세스 관리(IAM)**를 선택합니다.
   + 사용 사례에 따라 **권한(Permissions)** 메뉴에서 새 역할을 생성하거나 기존 역할을 사용할 수 있습니다.
     + **새 역할 생성(Create a new role)**을 선택하면 S3 버킷 이름과 정책을 입력하는 옵션이 자동으로 생성됩니다.
     + 액세스가 필요한 S3 버킷에 대한 권한이 있는 역할을 이미 생성한 경우, 드롭다운 목록에서 역할을 선택합니다. 이 역할에는 `AmazonSageMakerFullAccess` 정책이 연결되어야 합니다.
   + **네트워크 및 스토리지** 드롭다운 목록을 선택하여 SageMaker AI가 사용하는 VPC, 보안, 서브넷을 구성합니다.
     + **VPC** 아래에서 Snowflake PrivateLink 연결이 있는 VPC를 선택합니다.
     + **서브넷(Subnets)** 아래에서 Snowflake PrivateLink 연결에 액세스할 수 있는 서브넷을 선택합니다.
     + **Studio Classic용 네트워크 액세스** 아래에서 **VPC 전용**을 선택합니다.
     + **보안 그룹** 아래에서 1단계에서 생성한 보안 그룹을 선택합니다.
   + **제출**을 선택합니다.

1. SageMaker AI 보안 그룹을 편집합니다.
   + 다음 인바운드 규칙을 생성합니다.
     + SageMaker AI가 2단계에서 자동으로 만든 인바운드 및 아웃바운드 NFS 보안 그룹에 연결되는 포트 2049(보안 그룹 이름에 Studio Classic 도메인 ID 포함).
     + 모든 TCP 포트에 자체 액세스(VPC 전용 SageMaker AI의 경우 필수).

1. VPC 엔드포인트 및 보안 그룹을 편집합니다.
   +  AWS 콘솔에서 Amazon EC2 메뉴로 이동합니다.
   + 이전 단계에서 생성한 보안 그룹을 찾습니다.
   + 1단계에서 생성한 보안 그룹으로부터의 HTTPS 트래픽을 허용하는 인바운드 규칙을 추가합니다.

1. 사용자 프로필을 생성합니다.
   + **SageMaker Studio Classic 컨트롤 패널**에서 **사용자 추가**를 선택합니다.
   + 사용자 이름을 제공합니다.
   + **실행 역할**을 생성하거나 기존 역할을 사용합니다.
     + **새 역할 생성(Create a new role)**을 선택하면 Amazon S3 버킷 이름과 정책을 입력하는 옵션이 자동으로 생성됩니다.
     + 액세스가 필요한 Amazon S3 버킷에 대한 권한이 있는 역할을 이미 생성한 경우, 드롭다운 목록에서 역할을 선택합니다. 이 역할에는 `AmazonSageMakerFullAccess` 정책이 연결되어야 합니다.
   + **제출**을 선택합니다.

1. 데이터 흐름을 생성합니다(이전 섹션에 있는 데이터 사이언티스트 안내서 참조).
   + Snowflake 연결 추가 시, 일반 Snowflake 계정 이름 대신 `privatelink-account-name` 값(Snowflake PrivateLink 통합 설정 단계)을 **Snowflake account name (alphanumeric)(Snowflake 계정 이름(영숫자))** 필드에 입력합니다.** 그 밖의 모든 항목은 변경되지 않습니다.

#### 데이터 사이언티스트에게 정보 제공하기
<a name="data-wrangler-snowflake-admin-ds-info"></a>

데이터 과학자에게 Amazon SageMaker AI Data Wrangler에서 Snowflake에 액세스할 때 필요한 정보를 제공합니다.

**중요**  
사용자는 Amazon SageMaker Studio Classic 버전 1.3.0 이상을 실행해야 합니다. Studio Classic 버전을 확인하고 업데이트하는 방법은 [Amazon SageMaker Data Wrangler로 ML 데이터 준비하기](data-wrangler.md)에서 확인하세요.

1. 데이터 사이언티스트가 SageMaker Data Wrangler에서 Snowflake에 액세스하려면 다음 중 하나를 입력해야 합니다.
   + 기본 인증 시 Snowflake 계정 이름, 사용자 이름 및 암호.
   + OAuth 시 ID 제공업체의 사용자 이름 및 암호.
   + ARN 시 Secrets Manager 보안 암호 Amazon 리소스 이름(ARN)
   + [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)와 보안 암호 ARN으로 생성한 보안 암호. 다음 절차에 따라 옵션 선택 시 Snowflake용 보안 암호를 생성합니다.
**중요**  
데이터 사이언티스트가 **Snowflake 자격 증명(사용자 이름 및 암호)** 옵션으로 Snowflake에 연결하는 경우 [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)로 자격 증명을 보안 암호에 저장할 수 있습니다. Secrets Manager는 모범 사례 보안 계획의 일부로 보안 암호를 교체합니다. Secrets Manager에서 만든 보안 암호는 Studio Classic 사용자 프로필 설정 시 구성한 Studio Classic 역할이 있어야 액세스할 수 있습니다. 그러려면 Studio Classic 역할에 연결된 정책에 `secretsmanager:PutResourcePolicy` 권한을 추가해야 합니다.  
Studio Classic 사용자 그룹별로 다른 역할을 적용하도록 역할 정책 범위를 지정할 것을 적극 권장합니다. Secrets Manager 보안 암호에 대한 추가 리소스 기반 권한을 추가할 수 있습니다. 사용할 수 있는 조건 키는 [암호 관리 정책](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_secret-policy.html)에서 확인하세요.  
암호 생성 방법은 [보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)에서 확인하세요. 보안 암호 생성 시 요금이 부과됩니다.

1. (선택 사항) [Snowflake에서 클라우드 스토리지 통합 생성하기](                                      https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-3-create-a-cloud-storage-integration-in-snowflake) 절차에 따라 생성한 스토리지 통합 이름을 데이터 사이언티스트에게 제공합니다. 이는 새 통합의 이름으로서 `integration_name`(으)로 명명되며, 다음 코드 조각에 표시된 실행한 `CREATE INTEGRATION` SQL 명령에 있습니다.

   ```
     CREATE STORAGE INTEGRATION integration_name
     TYPE = EXTERNAL_STAGE
     STORAGE_PROVIDER = S3
     ENABLED = TRUE
     STORAGE_AWS_ROLE_ARN = 'iam_role'
     [ STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' ]
     STORAGE_ALLOWED_LOCATIONS = ('s3://bucket/path/', 's3://bucket/path/')
     [ STORAGE_BLOCKED_LOCATIONS = ('s3://bucket/path/', 's3://bucket/path/') ]
   ```

### 데이터 사이언티스트 안내서
<a name="data-wrangler-snowflake-ds"></a>

Snowflake를 연결하고 Data Wrangler에 있는 데이터에 액세스하는 방법은 다음과 같습니다.

**중요**  
관리자는 이전 섹션의 정보를 사용하여 Snowflake를 설정해야 합니다. 문제 발생 시 관리자에게 문의하여 문제 해결 지원을 받으세요.

다음 중 한 가지 방법으로 Snowflake에 연결할 수 있습니다.
+ Data Wrangler에서 Snowflake 자격 증명(계정 이름, 사용자 이름 및 암호) 지정.
+ 자격 증명이 포함된 보안 암호의 Amazon 리소스 이름(ARN) 입력.
+ Snowflake에 연결하는 액세스 위임 개방형 표준(OAuth) 제공업체 이용. 관리자는 다음 OAuth 제공업체 중 하나에 대한 액세스 권한을 부여할 수 있습니다.
  + [Azure AD](https://docs.snowflake.com/en/user-guide/oauth-azure.html)
  + [Okta](https://docs.snowflake.com/en/user-guide/oauth-okta.html)
  + [Ping Federate](https://docs.snowflake.com/en/user-guide/oauth-pingfed.html)

Snowflake 연결 시 사용해야 하는 메서드는 관리자에게 문의하세요.

다음 섹션에는 이전 메서드로 Snowflake에 연결하는 방법에 대한 정보가 있습니다.

------
#### [ Specifying your Snowflake Credentials ]

**자격 증명으로 Snowflake에서 Data Wrangler로 데이터세트를 가져오려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Snowflake**를 선택합니다.

1. **연결 이름(Connection name)**에서 연결 고유 식별자를 지정합니다.

1. **인증 방법(Authentication method)**에서 **기본 사용자 이름-암호(Basic Username-Password)**를 선택합니다.

1. **Snowflake 계정 이름(영숫자)(Snowflake account name (alphanumeric))**에서 Snowflake 계정의 전체 이름을 지정합니다.

1. **사용자 이름(Username)**에서 Snowflake 계정 액세스 시 사용하는 사용자 이름을 지정합니다.

1. **암호(Password)**에서 사용자 이름과 연결된 암호를 지정합니다.

1. (선택 사항) **고급 설정(Advanced settings)**에서 다음을 지정합니다.
   + **역할(Role)** - Snowflake 내 역할. 일부 역할은 여러 데이터세트에 액세스할 수 있습니다. 역할을 지정하지 않으면 Data Wrangler는 Snowflake 계정에서 기본 역할을 사용합니다.
   + **스토리지 통합(Storage integration)** - 쿼리를 지정하고 실행하면 Data Wrangler는 쿼리 결과의 임시 사본을 메모리에 생성합니다. 쿼리 결과의 영구 사본을 저장하려면, 스토리지 통합용 Amazon S3 위치를 지정합니다. S3 URI은 관리자가 제공합니다.
   + **KMS 키 ID(KMS key ID)** - 사용자가 생성한 KMS 키. ARN을 지정하여 Snowflake 쿼리의 출력을 암호화할 수 있습니다. 그렇지 않으면 Data Wrangler는 기본 암호화를 사용합니다.

1. **연결**을 선택합니다.

------
#### [ Providing an Amazon Resource Name (ARN) ]

**ARN으로 Snowflake에서 Data Wrangler로 데이터세트를 가져오려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Snowflake**를 선택합니다.

1. **연결 이름(Connection name)**에서 연결 고유 식별자를 지정합니다.

1. **인증 방법(Authentication method)**에서 **ARN**을 선택합니다.

1. **Secrets Manager ARN** - Snowflake에 연결하는 데 사용되는 자격 증명을 저장하는 데 사용되는 AWS Secrets Manager 보안 암호의 ARN입니다.

1. (선택 사항) **고급 설정(Advanced settings)**에서 다음을 지정합니다.
   + **역할(Role)** - Snowflake 내 역할. 일부 역할은 여러 데이터세트에 액세스할 수 있습니다. 역할을 지정하지 않으면 Data Wrangler는 Snowflake 계정에서 기본 역할을 사용합니다.
   + **스토리지 통합(Storage integration)** - 쿼리를 지정하고 실행하면 Data Wrangler는 쿼리 결과의 임시 사본을 메모리에 생성합니다. 쿼리 결과의 영구 사본을 저장하려면, 스토리지 통합용 Amazon S3 위치를 지정합니다. S3 URI은 관리자가 제공합니다.
   + **KMS 키 ID(KMS key ID)** - 사용자가 생성한 KMS 키. ARN을 지정하여 Snowflake 쿼리의 출력을 암호화할 수 있습니다. 그렇지 않으면 Data Wrangler는 기본 암호화를 사용합니다.

1. **연결**을 선택합니다.

------
#### [ Using an OAuth Connection ]

**중요**  
관리자는 OAuth 연결 시 사용하는 기능을 제공하도록 Studio Classic 환경을 사용자 지정합니다. 기능을 사용하려면 Jupyter 서버 애플리케이션을 다시 시작해야 할 수 있습니다.  
다음 절차에 따라 Jupyter 서버 애플리케이션을 업데이트합니다.  
Studio Classic에서 **파일**을 선택합니다.
**종료(Shut down)**를 선택합니다.
**서버 종료(Shut down server)**를 선택합니다.
Studio Classic 액세스 시 사용하는 탭이나 창을 닫습니다.
Amazon SageMaker AI 콘솔에서 Studio Classic을 엽니다.

**자격 증명으로 Snowflake에서 Data Wrangler로 데이터세트를 가져오려면**

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 **Snowflake**를 선택합니다.

1. **연결 이름(Connection name)**에서 연결 고유 식별자를 지정합니다.

1. **인증 방법(Authentication method)**에서 **OAuth**를 선택합니다.

1. (선택 사항) **고급 설정(Advanced settings)**에서 다음을 지정합니다.
   + **역할(Role)** - Snowflake 내 역할. 일부 역할은 여러 데이터세트에 액세스할 수 있습니다. 역할을 지정하지 않으면 Data Wrangler는 Snowflake 계정에서 기본 역할을 사용합니다.
   + **스토리지 통합(Storage integration)** - 쿼리를 지정하고 실행하면 Data Wrangler는 쿼리 결과의 임시 사본을 메모리에 생성합니다. 쿼리 결과의 영구 사본을 저장하려면, 스토리지 통합용 Amazon S3 위치를 지정합니다. S3 URI은 관리자가 제공합니다.
   + **KMS 키 ID(KMS key ID)** - 사용자가 생성한 KMS 키. ARN을 지정하여 Snowflake 쿼리의 출력을 암호화할 수 있습니다. 그렇지 않으면 Data Wrangler는 기본 암호화를 사용합니다.

1. **연결**을 선택합니다.

------

Snowflake에서 데이터를 가져오는 프로세스는 연결 후 시작할 수 있습니다.

Data Wrangler에서는 테이블을 미리 볼 수 있는 눈 아이콘과 함께 데이터 웨어하우스, 데이터베이스, 스키마를 볼 수 있습니다. **테이블 미리 보기(Preview Table)** 아이콘 선택 후, 테이블의 스키마 미리보기가 생성됩니다. 테이블을 미리 보려면 먼저 웨어하우스를 선택해야 합니다.

**중요**  
`TIMESTAMP_TZ` 또는 `TIMESTAMP_LTZ` 유형의 열이 있는 데이터세트를 가져오는 경우, 쿼리 열 이름에 `::string`을(를) 추가합니다. 자세한 정보는 [TIMESTAMP\$1TZ 및 TIMESTAMP\$1LTZ 데이터를 Parquet 파일로 언로드하는 방법](https://community.snowflake.com/s/article/How-To-Unload-Timestamp-data-in-a-Parquet-file)에서 확인하세요.

데이터 웨어하우스, 데이터베이스, 스키마를 선택해야 쿼리를 작성하고 실행할 수 있습니다. 쿼리 출력은 **쿼리 결과(Query results)** 아래에 표시됩니다.

쿼리 출력 결정 후 쿼리 결과를 Data Wrangler 흐름으로 가져와 데이터 변환을 수행할 수 있습니다.

데이터를 가져온 후에는 Data Wrangler 흐름으로 이동하여 변환 추가를 시작합니다. 사용 가능한 변환 목록은 [데이터 변환하기](data-wrangler-transform.md)에서 확인하세요.

## 서비스형 소프트웨어(SaaS) 플랫폼에서 데이터 가져오기
<a name="data-wrangler-import-saas"></a>

Data Wrangler로 40가지 이상의 서비스형 소프트웨어(SaaS) 플랫폼에서 데이터를 가져올 수 있습니다. SaaS 플랫폼에서 데이터를 가져오려면 사용자 또는 관리자가 Amazon AppFlow로 플랫폼에서 Amazon S3 또는 Amazon Redshift로 데이터를 전송해야 합니다. Amazon AppFlow에 대한 자세한 정보는 [Amazon AppFlow란 무엇입니까?](https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html)에서 확인하세요. Amazon Redshift를 사용할 필요가 없는 경우, 데이터를 Amazon S3로 전송하여 더 간단한 프로세스를 사용할 것을 권장합니다.

Data Wrangler는 다음 SaaS 플랫폼에서의 데이터 전송을 지원합니다.
+ [Amplitude](https://docs.aws.amazon.com/appflow/latest/userguide/amplitude.html)
+ [Asana](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-asana.html)
+ [Braintree](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-braintree.html)
+ [CircleCI](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-circleci.html)
+ [DocuSign Monitor](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-docusign-monitor.html)
+ [Delighted](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-delighted.html)
+ [Domo](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-domo.html)
+ [Datadog](https://docs.aws.amazon.com/appflow/latest/userguide/datadog.html)
+ [Dynatrace](https://docs.aws.amazon.com/appflow/latest/userguide/dynatrace.html)
+ [Facebook Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-facebook-ads.html)
+ [Facebook Page Insights](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-facebook-page-insights.html)
+ [Google Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-ads.html)
+ [Google Analytics 4](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-analytics-4.html)
+ [Google Calendar](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-calendar.html)
+ [Google Search Console](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-search-console.html)
+ [GitHub](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-github.html)
+ [GitLab](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-gitlab.html)
+ [Infor Nexus](https://docs.aws.amazon.com/appflow/latest/userguide/infor-nexus.html)
+ [Instagram Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-instagram-ads.html)
+ [Intercom](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-intercom.html)
+ [JDBC (Sync)](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-jdbc.html)
+ [Jira Cloud](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-jira-cloud.html)
+ [LinkedIn Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-linkedin-ads.html)
+ [Mailchimp](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-mailchimp.html)
+ [Marketo](https://docs.aws.amazon.com/appflow/latest/userguide/marketo.html)
+ [Microsoft Dynamics 365](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-microsoft-dynamics-365.html)
+ [Microsoft Teams](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-microsoft-teams.html)
+ [Mixpanel](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-mixpanel.html)
+ [Okta](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-okta.html)
+ [Oracle HCM](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-oracle-hcm.html)
+ [Paypal Checkout](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-paypal.html)
+ [Pendo](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-pendo.html)
+ [Salesforce](https://docs.aws.amazon.com/appflow/latest/userguide/salesforce.html)
+ [Salesforce Marketing Cloud](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-salesforce-marketing-cloud.html)
+ [Salesforce Pardot](https://docs.aws.amazon.com/appflow/latest/userguide/pardot.html)
+ [SAP OData](https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html)
+ [SendGrid](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-sendgrid.html)
+ [ServiceNow](https://docs.aws.amazon.com/appflow/latest/userguide/servicenow.html)
+ [Singular](https://docs.aws.amazon.com/appflow/latest/userguide/singular.html)
+ [Slack](https://docs.aws.amazon.com/appflow/latest/userguide/slack.html)
+ [Smartsheet](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-smartsheet.html)
+ [Snapchat Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-snapchat-ads.html)
+ [Stripe](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-stripe.html)
+ [Trend Micro](https://docs.aws.amazon.com/appflow/latest/userguide/trend-micro.html)
+ [Typeform](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-typeform.html)
+ [Veeva](https://docs.aws.amazon.com/appflow/latest/userguide/veeva.html)
+ [WooCommerce](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-woocommerce.html)
+ [Zendesk](https://docs.aws.amazon.com/appflow/latest/userguide/slack.html)
+ [Zendesk Chat](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-chat.html)
+ [Zendesk Sell](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-sell.html)
+ [Zendesk Sunshine](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-sunshine.html)
+ [Zoho CRM](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zoho-crm.html)
+ [Zoom Meetings](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zoom-meetings.html)

이전 목록에는 데이터 소스 설정에 대한 추가 정보를 볼 수 있는 링크가 있습니다. 사용자 또는 관리자는 다음 정보를 읽은 후 이전 링크를 참조할 수 있습니다.

Data Wrangler 흐름의 **가져오기(Import)** 탭으로 이동하면 다음 섹션 아래에 데이터 소스가 표시됩니다.
+ **사용 가능**
+ **데이터 소스 설정**

**사용 가능** 아래에서 추가 구성 없이 데이터 소스에 연결할 수 있습니다. 데이터 소스를 선택하고 데이터를 가져올 수 있습니다.

**데이터 소스 설정** 아래 데이터 소스를 사용하려면 사용자 또는 관리자가 Amazon AppFlow를 사용하여 SaaS 플랫폼에서 Amazon S3 또는 Amazon Redshift로 데이터를 전송해야 합니다. 전송 방법은 [Amazon AppFlow로 데이터 전송하기](#data-wrangler-import-saas-transfer)에서 확인하세요.

데이터 전송 수행 후, **사용 가능** 아래에 SaaS 플랫폼이 데이터 소스로 표시됩니다. 이 플랫폼을 선택하면 Data Wrangler로 전송한 데이터를 가져올 수 있습니다. 전송한 데이터는 쿼리할 수 있는 테이블로 표시됩니다.

### Amazon AppFlow로 데이터 전송하기
<a name="data-wrangler-import-saas-transfer"></a>

Amazon AppFlow는 코드 작성 없이 SaaS 플랫폼에서 Amazon S3 또는 Amazon Redshift로 데이터를 전송할 수 있는 플랫폼입니다. 데이터 전송을 수행하려면 AWS Management Console을(를) 사용합니다.

**중요**  
데이터 전송 권한 설정 여부를 확인해야 합니다. 자세한 내용은 [Amazon AppFlow 권한](data-wrangler-security.md#data-wrangler-appflow-permissions) 단원을 참조하십시오.

권한 추가 후 데이터를 전송할 수 있습니다. Amazon AppFlow에서 데이터 전송 흐름을 생성합니다.** 흐름은 일련의 구성입니다. 흐름을 통해 일정에 따라 데이터 전송을 실행할지 아니면 데이터를 별도의 파일로 분할할지 지정할 수 있습니다. 흐름을 구성한 후 실행하여 데이터를 전송합니다.

흐름 생성 방법은 [Amazon AppFlow로 흐름 생성하기](https://docs.aws.amazon.com/appflow/latest/userguide/create-flow.html)에서 확인하세요. 흐름 실행 방법은 [Amazon AppFlow 흐름 활성화하기](https://docs.aws.amazon.com/appflow/latest/userguide/run-flow.html)에서 확인하세요.

데이터 전송 후 다음 절차에 따라 Data Wrangler 데이터에 액세스합니다.
**중요**  
데이터 액세스 전 IAM 역할에 다음 정책이 적용되었는지 확인하세요.  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:SearchTables",
            "Resource": [
                "arn:aws:glue:*:*:table/*/*",
                "arn:aws:glue:*:*:database/*",
                "arn:aws:glue:*:*:catalog"
            ]
        }
    ]
}
```
기본적으로, Data Wrangler에 액세스하는 데 사용하는 IAM 역할은 `SageMakerExecutionRole`입니다. 정책 추가 방법에 대한 자세한 내용은 [IAM 자격 증명 권한 추가하기(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)에서 확인하세요.

데이터 소스 연결 방법은 다음과 같습니다.

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)에 로그인합니다.

1. **Studio**를 선택합니다.

1. **Launch app**(앱 시작)을 선택합니다.

1. 드롭다운 목록에서 **Studio를** 선택합니다.

1. 홈 아이콘을 선택합니다.

1. **Data**(데이터)를 선택합니다.

1. **Data Wrangler**를 선택합니다.

1. **데이터 가져오기(Import data)**을 선택합니다.

1. **사용 가능(Available)** 아래에서 데이터 소스를 선택합니다.

1. **이름(Name)** 필드에서 연결 이름을 지정합니다.

1. (선택 사항) **고급 구성(Advanced configuration)**을 선택합니다.

   1. **작업 그룹(Workgroup)**을 선택합니다.

   1. 작업 그룹이 Amazon S3 출력 위치를 적용하지 않았거나 작업 그룹을 사용하지 않는 경우, **쿼리 결과의 Amazon S3 위치(Amazon S3 location of query results)** 값을 지정합니다.

   1. (선택 사항) **데이터 보존 기간(Data retention period)**에서 확인란을 선택하여 데이터 보존 기간을 설정하고 삭제 전까지 저장할 일수를 지정합니다.

   1. (선택 사항) 기본적으로 Data Wrangler는 연결을 저장합니다. 확인란 선택을 해제하여 연결을 저장하지 않을 수 있습니다.

1. **연결**을 선택합니다.

1. 쿼리를 지정합니다.
**참고**  
쿼리 지정을 위해 왼쪽 탐색창에서 테이블을 선택할 수 있습니다. Data Wrangler에는 테이블 이름과 테이블 미리보기가 표시됩니다. 테이블 이름 옆 아이콘을 선택하여 이름을 복사합니다. 쿼리에 테이블 이름을 사용할 수 있습니다.

1. **실행**을 선택합니다.

1. **쿼리 가져오기(Import query)**를 선택합니다.

1. **데이터세트 이름(Dataset name)**에서 데이터세트 이름을 지정합니다.

1. **추가**를 선택합니다.

**데이터 가져오기(Import data)** 화면으로 이동하면 생성한 연결을 볼 수 있습니다. 연결을 사용하여 더 많은 데이터를 가져올 수 있습니다.

## 가져온 데이터 스토리지
<a name="data-wrangler-import-storage"></a>

**중요**  
 [보안 모범 사례](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)에 따라 Amazon S3 버킷을 보호하는 모범 사례를 따를 것을 적극 권장합니다.

Amazon Athena 또는 Amazon Redshift에서 데이터를 쿼리하면 쿼리된 데이터세트가 Amazon S3에 자동으로 저장됩니다. 데이터는 Studio Classic을 사용하는 AWS 리전의 기본 SageMaker AI S3 버킷에 저장됩니다.

기본 S3 버킷의 명명 규칙은 `sagemaker-region-account number`입니다. 예를 들어, 계정 번호가 111122223333이고 `us-east-1`에서 Studio Classic을 사용하는 경우, 가져온 데이터세트는 `sagemaker-us-east-1-`111122223333에 저장됩니다.

 Data Wrangler 흐름은 이 Amazon S3 데이터세트 위치에 따라 달라지므로, 종속 흐름을 사용하는 동안에는 Amazon S3에서 이 데이터세트를 수정해서는 안 됩니다. 이 S3 위치를 수정하고 데이터 흐름을 계속 사용하려면 .flow 파일에 있는 `trained_parameters`에서 모든 객체를 제거해야 합니다. 그러려면 Studio Classic에서 .flow 파일을 다운로드하고 각 `trained_parameters` 인스턴스의 모든 항목을 삭제해야 합니다. 작업 후 `trained_parameters`은(는) 빈 JSON 객체가 되어야 합니다.

```
"trained_parameters": {}
```

데이터를 내보내고 데이터 흐름으로 데이터를 처리하는 경우, 내보내는 .flow 파일은 Amazon S3의 이 데이터세트를 참조합니다. 다음 섹션에서 자세히 알아보세요.

### Amazon Redshift 가져오기 스토리지
<a name="data-wrangler-import-storage-redshift"></a>

Data Wrangler는 쿼리 결과 데이터세트를 기본 SageMaker AI S3 버킷의 Parquet 파일에 저장합니다.

이 파일은 redshift/*uuid*/data/ 접두사(디렉터리) 아래 저장되는데, 여기서 *uuid*는 쿼리별로 생성되는 고유 식별자입니다.

예를 들어, 기본 버킷이 `sagemaker-us-east-1-111122223333`인 경우, Amazon Redshift에서 쿼리된 단일 데이터세트의 위치는 s3://sagemaker-us-east-1-111122223333/redshift/*uuid*/data/입니다.

### Amazon Athena 가져오기 스토리지
<a name="data-wrangler-import-storage-athena"></a>

Athena 데이터베이스를 쿼리하고 데이터세트를 가져오면 Data Wrangler는 데이터세트와 해당 데이터세트의 서브셋 또는 미리 보기 파일을 Amazon S3에 저장합니다.**

**데이터세트 가져오기**를 선택하여 가져온 데이터세트는 Amazon S3에 Parquet 형식으로 저장됩니다.

Athena 가져오기 화면에서 **실행**을 선택하면 미리 보기 파일이 CSV 형식으로 작성되며, 쿼리된 데이터세트의 최대 100개 행을 포함합니다.

쿼리하는 데이터세트는 athena/*uuid*/data/ 접두사(디렉터리) 아래에 있는데, 여기서 *uuid*는 쿼리별로 생성되는 고유 식별자입니다.

예를 들어, 기본 버킷이 `sagemaker-us-east-1-111122223333`인 경우, Athena에서 쿼리된 단일 데이터세트의 위치는 `s3://sagemaker-us-east-1-111122223333`/athena/*uuid*/data/*example\$1dataset.parquet*입니다.

Data Wrangler에서 데이터프레임을 미리 보기 위해 저장되는 데이터세트의 서브셋은 접두사 athena/ 아래에 저장됩니다.

# Data Wrangler 흐름을 생성합니다.
<a name="data-wrangler-data-flow"></a>

Amazon SageMaker Data Wrangler 흐름 또는 데이터 흐름을 사용하여 데이터 준비 파이프라인을 생성하고 수정하세요.** 데이터 흐름은 생성한 데이터세트, 변환, 분석 또는 단계를 연결하고 파이프라인을 정의하는 데 사용할 수 있습니다.**

## 인스턴스
<a name="data-wrangler-data-flow-instances"></a>

Amazon SageMaker Studio Classic에서 Data Wrangler 흐름을 만들면 Data Wrangler는 Amazon EC2 인스턴스를 사용하여 흐름의 분석 및 변환을 실행합니다. 기본적으로 Data Wrangler는 m5.4xlarge 인스턴스를 사용합니다. m5 인스턴스는 컴퓨팅과 메모리 간의 균형을 제공하는 범용 인스턴스입니다. m5 인스턴스를 다양한 컴퓨팅 워크로드에 사용할 수 있습니다.

Data Wrangler는 또한 r5 인스턴스를 사용할 수 있는 옵션을 제공합니다. r5 인스턴스는 메모리에서 대규모 데이터세트를 처리하는 빠른 성능을 제공하도록 설계되었습니다.

워크로드에 가장 최적화된 인스턴스를 선택하는 것이 좋습니다. 예를 들어 r5.8xlarge는 m5.4xlarge보다 가격이 더 높을 수 있지만 r5.8xlarge는 워크로드에 더 잘 최적화될 수 있습니다. 더 잘 최적화된 인스턴스를 사용하면 더 적은 시간에 더 저렴한 비용으로 데이터 흐름을 실행할 수 있습니다.

Data Wrangler 흐름을 실행하는 데 사용할 수 있는 인스턴스가 다음 테이블에 나와 있습니다.


| 표준 인스턴스 | vCPU | Memory | 
| --- | --- | --- | 
| ml.m5.4xlarge | 16 | 64GiB | 
| ml.m5.8xlarge | 32 | 128GiB | 
| ml.m5.16xlarge | 64 |  256GiB  | 
| ml.m5.24xlarge | 96 | 384 GiB | 
| r5.4xlarge | 16 | 128GiB | 
| r5.8xlarge | 32 | 256GiB | 
| r5.24xlarge | 96 | 768GiB | 

r5 인스턴스에 대한 자세한 내용은 [Amazon EC2 R5 인스턴스](https://aws.amazon.com/ec2/instance-types/r5/)를 참조하세요. m5 인스턴스에 대한 자세한 내용은 [Amazon EC2 M5 인스턴스](https://aws.amazon.com/ec2/instance-types/m5/)를 참조하세요.

각 Data Wrangler 흐름에는 연결된 Amazon EC2 인스턴스가 있습니다. 단일 인스턴스에 연결된 플로우가 여러 개 있을 수 있습니다.

각 흐름 파일에 대해 인스턴스 유형을 원활하게 전환할 수 있습니다. 인스턴스 유형을 전환해도 흐름을 실행하는 데 사용한 인스턴스는 계속 실행됩니다.

흐름의 인스턴스 유형을 전환하려면 다음과 같이 하세요.

1. **터미널 및 커널 실행** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/running-terminals-kernels.png))을 선택합니다.

1. 사용 중인 인스턴스로 이동하여 선택합니다.

1. 삭제하려는 인스턴스를 선택합니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 페이지에서 인스턴스를 선택하는 방법을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-instance-switching-list-instances.png)

1. **저장**을 선택합니다.

두 인스턴스가 실행되는 동안에는 두 인스턴스에 대해 요금이 청구됩니다. 추가 요금이 발생하지 않도록 하려면 사용하지 않는 인스턴스를 수동으로 종료하세요. 실행 중인 인스턴스를 종료하려면 다음 절차를 사용하세요.

실행 중인 인스턴스를 종료하려면

1. 인스턴스 아이콘을 선택합니다. 다음 이미지는 **실행 중인 인스턴스** 아이콘을 선택할 수 있는 위치를 보여줍니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/instance-switching-running-instances.png)

1. 종료하려는 인스턴스 옆의 **종료**를 선택합니다.

흐름을 실행하는 데 사용된 인스턴스를 종료하면 일시적으로 흐름에 액세스할 수 없습니다. 이전에 종료한 인스턴스를 실행하는 흐름을 열려고 시도하는 동안 오류가 발생하는 경우 5분 동안 기다린 후 다시 열어 보세요.

Amazon 심플 스토리지 서비스 또는 Amazon SageMaker 피처 스토어와 같은 위치로 데이터 흐름을 내보내는 경우 Data Wrangler는 Amazon SageMaker 처리 작업을 실행합니다. 처리 작업에 다음 인스턴스 중 하나를 사용할 수 있습니다. 데이터 내보내기에 대한 자세한 내용은 [내보내기](data-wrangler-data-export.md) 섹션을 참조하세요.


| 표준 인스턴스 | vCPU | Memory | 
| --- | --- | --- | 
| ml.m5.4xlarge | 16 | 64GiB | 
| ml.m5.12xlarge | 48 |  192GiB  | 
| ml.m5.24xlarge | 96 | 384 GiB | 

사용 가능한 인스턴스 유형 사용에 따른 시간당 비용에 대한 자세한 내용은 [SageMaker 가격](https://aws.amazon.com//sagemaker/pricing/)을 참조하세요.

## 데이터 흐름 UI
<a name="data-wrangler-data-flow-ui"></a>

데이터세트를 가져오면 원본 데이터세트이 데이터 흐름에 나타나고 이름은 **Source**입니다. 데이터를 가져올 때 샘플링을 설정한 경우 이 데이터세트의 이름은 **Source - sampled**입니다. Data Wrangler는 데이터세트의 각 열 유형을 자동으로 유추하여 **Data types**이라는 새 데이터 프레임을 만듭니다. 이 프레임을 선택하여 유추된 데이터 유형을 업데이트할 수 있습니다. 데이터세트 하나를 업로드하면 다음 이미지에 표시된 것과 비슷한 결과가 나타납니다.

![\[Data Wrangler 콘솔에서 소스 - 샘플링됨 및 데이터 유형으 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/dataflow-after-import.png)


변환 단계를 추가할 때마다 새 데이터 프레임이 생성됩니다. 여러 변환 단계(**조인** 또는 **연결** 제외)가 동일한 데이터세트에 추가되면 해당 단계가 누적됩니다.

**조인** 및 **연결**은 조인되거나 연결된 새 데이터세트를 포함하는 독립형 단계를 만듭니다.

다음 다이어그램은 두 데이터세트 간의 조인과 두 단계 스택이 있는 데이터 흐름을 보여줍니다. 첫 번째 스택(**단계(2)**)은 **데이터 유형** 데이터세트에서 유추된 유형에 두 개의 변환을 추가합니다. *다운스트림* 스택 또는 오른쪽 스택은 **demo-join**이라는 조인의 결과로 데이터세트에 변환을 추가합니다.

![\[Data Wrangler 콘솔의 데이터 흐름 페이지에서 단계를 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-flow-steps.png)


데이터 흐름의 오른쪽 하단에 있는 작은 회색 상자는 흐름의 스택과 단계 수, 흐름의 레이아웃에 대한 개요를 제공합니다. 회색 상자 안의 밝은 상자는 UI 뷰에 있는 단계를 나타냅니다. 이 상자를 사용하여 UI 보기를 벗어나는 데이터 흐름 섹션을 볼 수 있습니다. 화면 맞춤 아이콘(![\[Dotted square outline icon representing a placeholder or empty state.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/fit-screen.png))을 사용하여 모든 단계와 데이터세트를 UI 뷰에 맞출 수 있습니다.

왼쪽 하단 내비게이션 바에는 데이터 흐름을 확대(![\[Plus symbol icon representing an addition or new item action.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/zoom-in.png)) 및 축소(![\[Horizontal line or divider, typically used to separate content sections.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/zoom-out.png))하고 화면에 맞게 데이터 흐름의 크기를 조정(![\[Dotted square outline icon representing a placeholder or empty state.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/fit-screen.png))하는 데 사용할 수 있는 아이콘이 있습니다. 잠금 아이콘(![\[Trash can icon representing deletion or removal functionality.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/lock-nodes.png))을 사용하여 화면에서 각 단계의 위치를 잠그거나 잠금 해제할 수 있습니다.



## 데이터 흐름에 단계 추가
<a name="data-wrangler-data-flow-add-step"></a>

데이터세트 또는 이전에 추가한 단계 옆의 **\$1**를 선택하고 다음 옵션 중 하나를 선택합니다.
+ **데이터 유형 편집**(**데이터 유형** 단계만 해당): **데이터 유형** 단계에 변환을 추가하지 않은 경우 **데이터 유형 편집**을 선택하여 데이터세트를 가져올 때 Data Wrangler가 추론한 데이터 유형을 업데이트할 수 있습니다.
+ **변환 추가**: 새 변환 단계를 추가합니다. 추가할 수 있는 데이터 변환에 대해 자세히 알아보려면 [데이터 변환하기](data-wrangler-transform.md) 섹션을 참조하세요.
+ **분석 추가**: 분석을 추가합니다. 이 옵션을 사용하여 데이터 흐름의 어느 시점에서든 데이터를 분석할 수 있습니다. 단계에 분석을 하나 이상 추가하면 해당 단계에 분석 아이콘(![\[Bar chart icon representing data visualization or analytics functionality.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/updates/analysis-icon.png))이 나타납니다. 추가할 수 있는 분석에 대한 자세한 내용은 [분석 및 시각화](data-wrangler-analyses.md) 섹션을 참조하세요.
+ **조인**: 두 데이터세트를 조인하고 결과 데이터세트를 데이터 흐름에 추가합니다. 자세한 내용은 [데이터세트 조인하기](data-wrangler-transform.md#data-wrangler-transform-join) 단원을 참조하세요.
+ **연결**: 두 데이터세트를 연결하고 결과 데이터세트를 데이터 흐름에 추가합니다. 자세한 내용은 [데이터세트 연결하기](data-wrangler-transform.md#data-wrangler-transform-concatenate) 단원을 참조하세요.

## 데이터 흐름에서 한 단계 삭제
<a name="data-wrangler-data-flow-delete-step"></a>

단계를 삭제하려면 단계를 선택하고 **삭제**를 선택합니다. 노드가 단일 입력이 있는 노드인 경우 선택한 단계만 삭제합니다. 입력이 하나인 단계를 삭제해도 그 뒤에 오는 단계는 삭제되지 않습니다. 소스, 조인 또는 연결 노드의 단계를 삭제하는 경우 해당 단계를 따르는 모든 단계도 삭제됩니다.

단계 스택에서 단계를 삭제하려면 스택을 선택한 다음 삭제할 단계를 선택합니다.

다운스트림 단계를 삭제하지 않고 다음 절차 중 하나에 따라 단계를 삭제할 수 있습니다.

------
#### [ Delete a step in the Data Wrangler flow ]

단일 입력이 있는 데이터 흐름의 노드에 대해 개별 단계를 삭제할 수 있습니다. 소스, 조인 및 연결 노드의 개별 단계는 삭제할 수 없습니다.

Data Wrangler 흐름에서 단계를 삭제하려면 다음 절차를 따르세요.

1. 삭제하려는 단계가 있는 단계 그룹을 선택합니다.

1. 단계 옆에 있는 아이콘을 선택합니다.

1. **스택 삭제**를 선택합니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 페이지에서 단계를 삭제하는 방법을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/delete-step-flow-1.png)

------
#### [ Delete a step in the table view ]

다음 절차에 따라 테이블 보기에서 단계를 삭제합니다.

단일 입력이 있는 데이터 흐름의 노드에 대해 개별 단계를 삭제할 수 있습니다. 소스, 조인 및 연결 노드의 개별 단계는 삭제할 수 없습니다.

1. 단계를 선택하고 해당 단계의 테이블 보기를 엽니다.

1. 커서를 단계 위로 이동하면 줄임표 아이콘이 나타납니다.

1. 단계 옆에 있는 아이콘을 선택합니다.

1. **삭제**를 선택합니다.  
![\[Data Wrangler 콘솔의 테이블 보기에서 단계를 삭제하는 방법을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/delete-step-table-0.png)

------

## Data Wrangler 플로우에서 단계 편집
<a name="data-wrangler-data-flow-edit-step"></a>

Data Wrangler 흐름에 추가한 각 단계를 편집할 수 있습니다. 단계를 편집하여 열의 변환 또는 데이터 유형을 변경할 수 있습니다. 단계를 편집하여 더 나은 분석을 수행할 수 있도록 변경할 수 있습니다.

단계를 편집할 수 있는 방법은 여러 가지가 있습니다. 일부 예로는 값을 이상값으로 간주하기 위한 임계값 변경 또는 대치 방법 변경 등이 있습니다.

스토리를 재생하려면 다음 절차에 따르세요.

단계를 편집하려면 다음과 같이 하세요.

1. Data Wrangler 흐름에서 단계를 선택하여 테이블 보기를 엽니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 페이지의 예시 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-flow-edit-choose-step.png)

1. 데이터 흐름에서 단계를 선택합니다.

1. 단계를 편집합니다.

다음 그림에 의 예가 나와 있습니다.

![\[Data Wrangler 콘솔의 데이터 흐름 페이지에서 단계를 편집하는 방법을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-flow-table-edit-step.png)


**참고**  
Amazon SageMaker AI 도메인 내의 공유 스페이스를 사용하여 Data Wrangler 흐름에서 공동으로 작업할 수 있습니다. 공유 공간 내에서 사용자와 공동 작업자는 플로우 파일을 실시간으로 편집할 수 있습니다. 하지만 사용자와 공동 작업자 모두 변경 사항을 실시간으로 확인할 수 없습니다. Data Wrangler 흐름을 변경하는 사람이 있으면 즉시 저장해야 합니다. 누군가 파일을 저장하면 공동 작업자는 파일을 닫았다가 다시 열지 않는 한 해당 파일을 볼 수 없습니다. 한 사람이 저장하지 않은 모든 변경 내용은 변경 내용을 저장한 사람이 덮어씁니다.

# 데이터 및 데이터 품질에 대한 인사이트 확보
<a name="data-wrangler-data-insights"></a>

**데이터 품질 및 인사이트 보고서**를 사용하여 Data Wrangler로 가져온 데이터를 분석할 수 있습니다. 데이터세트를 가져온 후 보고서를 생성하는 것이 좋습니다. 보고서를 사용하여 데이터를 정리하고 처리할 수 있습니다. 이는 누락된 값의 갯수, 이상치 갯수 등의 정보를 제공합니다. 대상 누출 또는 불균형과 같은 데이터 관련 문제가 있는 경우 인사이트 보고서를 통해 이러한 문제를 파악할 수 있습니다.

다음 절차에 따라 데이터 품질 및 인사이트 보고서를 생성합니다. 여기서는 데이터세트를 Data Wrangler 흐름으로 이미 가져온 것으로 가정합니다.

**데이터 품질 및 인사이트 보고서를 생성하려면**

1. Data Wrangler 흐름에서 노드 옆에 있는 **\$1**를 선택합니다.

1. **Get data insights**(데이터 인사이트 가져오기)를 선택합니다.

1. **Analysis name**(분석 이름)에 인사이트 보고서의 이름을 지정합니다.

1. (선택 사항) **Target column**(대상 열)에 대상 열을 지정합니다.

1. **Problem type**(문제 유형)에는 **Regression**(회귀) 또는 **Classification**(분류)를 지정합니다.

1. **Data size**(데이터 크기)로 다음 중 하나를 지정합니다.
   + **50 K** - 보고서를 만들기 위해 가져온 데이터세트 중 처음 50000개 행을 사용합니다.
   + **Entire dataset**(전체 데이터세트) - 보고서를 만들기 위해 가져온 전체 데이터세트를 사용합니다.
**참고**  
전체 데이터세트에 대한 데이터 품질 및 인사이트 보고서를 생성하려면 Amazon SageMaker 처리 작업을 사용합니다. SageMaker Processing 작업은 모든 데이터에 대한 인사이트를 얻는 데 필요한 추가 컴퓨팅 리소스를 제공합니다. SageMaker Processing 작업에 대한 자세한 정보는 [SageMaker Processing을 사용한 데이터 변환 워크로드](processing-job.md) 섹션을 참조하세요.

1. **Create**(생성)을 선택합니다.

다음 주제는 보고서의 섹션을 보여줍니다.

**Topics**
+ [요약](#data-wrangler-data-insights-summary)
+ [대상 열](#data-wrangler-data-insights-target-column)
+ [빠른 모델](#data-wrangler-data-insights-quick-model)
+ [변수 요약](#data-wrangler-data-insights-feature-summary)
+ [샘플](#data-wrangler-data-insights-samples)
+ [정의](#data-wrangler-data-insights-definitions)

보고서를 다운로드하거나 온라인으로 볼 수 있습니다. 보고서를 다운로드하려면 화면 오른쪽 위 모서리에 있는 다운로드 버튼을 선택합니다. 다음 이미지는 버튼을 보여줍니다.

![\[다운로드 버튼을 보여주는 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-download.png)


## 요약
<a name="data-wrangler-data-insights-summary"></a>

인사이트 보고서에는 누락된 값, 유효하지 않은 값, 변수 유형, 이상치 갯수 등과 같은 일반 정보가 포함된 간략한 데이터 요약이 있습니다. 또한 데이터에 발생할 수 있는 문제를 가리키는 심각도가 높은 경고도 포함될 수 있습니다. 경고를 조사하는 것이 좋습니다.

다음은 이러한 보고서 요약의 예입니다.

![\[보고서 요약의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-report-summary.png)


## 대상 열
<a name="data-wrangler-data-insights-target-column"></a>

데이터 품질 및 인사이트 보고서를 만들 때 Data Wrangler는 대상 열을 선택할 수 있는 옵션을 제공합니다. 대상 열은 예측하려는 열입니다. 대상 열을 선택하면 Data Wrangler가 자동으로 대상 열 분석을 생성합니다. 또한 예측력 순서대로 변수의 순위를 매깁니다. 대상 열을 선택할 때는 회귀 문제를 해결할지 분류 문제를 해결할지 지정해야 합니다.

분류의 경우 Data Wrangler는 가장 일반적인 클래스의 표와 히스토그램을 보여줍니다. 클래스는 범주입니다. 또한 누락되거나 유효하지 않은 대상 값이 있는 관측치 또는 행을 표시합니다.

다음 이미지는 분류 문제에 대한 대상 열 분석 예를 보여줍니다.

![\[대상 열 분석의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-target-column-classification.png)


회귀의 경우 Data Wrangler는 대상 열에 있는 모든 값의 히스토그램을 보여줍니다. 또한 누락되거나, 유효하지 않은, 또는 이상치 대상 값이 있는 관측치 또는 행을 표시합니다.

다음 이미지는 회귀 문제에 대한 대상 열 분석 예를 보여줍니다.

![\[대상 열 분석의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-target-column-regression.png)


## 빠른 모델
<a name="data-wrangler-data-insights-quick-model"></a>

**Quick Model**(빠른 모델)은 데이터를 기반으로 훈련한 모델의 기대되는 예상 품질 추정치를 제공합니다.

Data Wrangler는 데이터를 훈련 폴드와 검증 폴드로 분할합니다. 샘플의 80%를 훈련에 사용하고 값의 20%를 검증에 사용합니다. 분류의 경우 표본을 계층화 분할합니다. 계층화 분할의 경우 각 데이터 파티션의 레이블 비율이 동일합니다. 분류 문제의 경우 훈련 폴드와 분류 폴드의 레이블 비율을 동일하게 유지하는 것이 중요합니다. Data Wrangler는 기본값 하이퍼파라미터를 사용하여 XGBoost 모델을 훈련시킵니다. 검증 데이터에 조기 중지를 적용하고 변수 사전 처리를 최소화합니다.

분류 모델의 경우 Data Wrangler는 모델 요약과 혼동 행렬을 모두 반환합니다.

다음은 분류 모델 요약의 예제입니다. 반환되는 정보에 대한 자세한 내용은 [정의](#data-wrangler-data-insights-definitions) 섹션을 참조하세요.

![\[분류 모델 요약의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-classification-summary.png)


다음은 빠른 모델이 반환하는 혼동 행렬의 예입니다.

![\[혼동 행렬의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-classification-confusion-matrix.png)


혼동 행렬은 다음 정보를 제공합니다.
+ 예측 레이블이 실제 레이블과 일치하는 횟수.
+ 예측 레이블이 실제 레이블과 일치하지 않는 횟수.

실제 레이블은 데이터의 실제 관측치를 나타냅니다. 예를 들어, 사기 거래를 탐지하기 위해 모델을 사용하는 경우 실제 레이블은 실제로 사기 또는 사기가 아닌 거래를 나타냅니다. 예측 레이블은 모델이 데이터에 할당하는 레이블을 나타냅니다.

혼동 행렬을 사용하여 모델이 조건의 유무를 얼마나 잘 예측하는지 확인할 수 있습니다. 부정 거래를 예측하는 경우, 혼동 행렬을 사용하여 모델의 민감도와 특이도를 모두 파악할 수 있습니다. 민감도는 사기 거래를 탐지하는 모델의 능력을 나타냅니다. 특이도란 모델이 사기가 아닌 거래를 사기로 탐지하는 것을 피하는 능력을 말합니다.

다음은 회귀 문제에 대한 빠른 모델 출력의 예입니다.

![\[회귀 문제에 대한 빠른 모델 출력의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-regression-summary.png)


## 변수 요약
<a name="data-wrangler-data-insights-feature-summary"></a>

대상 열을 지정하면 Data Wrangler는 예측력에 따라 변수를 정렬합니다. 예측력은 데이터를 80% 훈련 폴드와 20% 검증 폴드로 분할한 후 데이터를 기준으로 측정됩니다. Data Wrangler는 훈련 폴드에서 각 변수에 대한 모델을 개별적으로 피팅합니다. 변수 전처리를 최소화하고 검증 데이터에 대한 예측 성능을 측정합니다.

점수를 [0,1] 범위로 정규화합니다. 예측 점수가 높을수록 열 자체가 대상을 예측하는 데 더 유용하다는 뜻입니다. 점수가 낮을수록 열이 대상 열을 예측할 수 없음을 보여줍니다.

예측 가능하지 않은 열을 다른 열과 함께 사용한다고 예측 가능한 열이 되는 경우는 드뭅니다. 예측 점수를 사용하여 데이터세트의 변수가 예측 가능한지 여부를 확실하게 판단할 수 있습니다.

일반적으로 점수가 낮으면 변수가 중복되었음을 나타냅니다. 1점은 완벽한 예측 능력을 나타내며, 이는 종종 대상 누출을 나타냅니다. 대상 누출은 일반적으로 예측 시점에 사용할 수 없는 열이 데이터세트에 포함되어 있을 때 발생합니다. 예를 들어 대상 열과 중복된 열일 수 있습니다.

다음은 각 변수의 예측값을 보여주는 표와 히스토그램의 예입니다.

![\[각 기능의 예측 값을 보여주는 요약 표의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-feature-summary-table.png)


![\[각 특성의 예측 값을 보여주는 히스토그램 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-feature-summary-histogram.png)


## 샘플
<a name="data-wrangler-data-insights-samples"></a>

Data Wrangler는 표본이 비정상적인지 또는 데이터세트에 중복이 있는지 여부에 대한 정보를 제공합니다.

Data Wrangler는 격리 포리스트 알고리즘(isolation forest algorithm)을 사용하여 비정상적인 샘플을 탐지합니다.** 격리 포리스트는 비정상 점수를 데이터세트의 각 샘플 (행)과 연결합니다. 비정상 점수가 낮으면 변칙 샘플이 있음을 나타냅니다. 높은 점수는 비정상이 아닌 샘플과 관련이 있습니다. 일반적으로 비정상 점수가 음수인 샘플은 변칙으로 간주되고 변칙 점수가 양수인 샘플은 비정상이 아닌 것으로 간주됩니다.

비정상일 수 있는 표본을 볼 때는 특이한 값에 주의를 기울이는 것이 좋습니다. 예를 들어, 데이터 수집 및 처리 중 오류로 인한 비정상적인 값이 발생할 수 있습니다. 비정상적인 샘플을 검사할 때는 도메인 지식과 비즈니스 로직을 사용하는 것이 좋습니다.

Data Wrangler는 중복된 행을 탐지하고 데이터에서 중복된 행의 비율을 계산합니다. 일부 데이터 소스에는 유효한 중복이 포함될 수 있습니다. 다른 데이터 소스에는 데이터 수집 문제를 나타내는 중복이 있을 수 있습니다. 잘못된 데이터 수집으로 인해 샘플이 중복되면 데이터를 독립적인 훈련 및 검증 폴드로 분할하는 데 의존하는 기계 학습 프로세스에 방해가 될 수 있습니다.

중복된 샘플로 인해 영향을 받을 수 있는 인사이트 보고서의 요소는 다음과 같습니다.
+ 빠른 모델
+ 예측력 추정
+ 자동 하이퍼파라미터 튜닝

**Manage rows**(행 관리)에서 **Drop duplicates**(중복 삭제) 변환을 사용하여 데이터세트에서 중복 샘플을 제거할 수 있습니다. Data Wrangler는 가장 자주 중복되는 행을 보여줍니다.

## 정의
<a name="data-wrangler-data-insights-definitions"></a>

다음은 데이터 인사이트 보고서에 사용되는 기술 용어에 대한 정의입니다.

------
#### [ Feature types ]

다음은 각 변수 유형에 대한 정의입니다.
+ **Numeric**(숫자) - 숫자 값은 부동 소수점 또는 정수일 수 있습니다 (예: 연령 또는 수입). 기계 학습 모델은 숫자 값은 정렬되어 있고 숫자 값에 대한 거리가 정의되어 있다고 가정합니다. 예를 들어 3은 10보다 4에 더 가깝고 3 < 4 < 10입니다.
+ 범주형 - 열 항목은 고유한 값 집합에 속하며, 집합의 수는 일반적으로 열의 항목 수보다 훨씬 적습니다. 예를 들어, 길이가 100인 열에는 고유한 값 `Dog`, `Cat` 및 `Mouse`가 포함될 수 있습니다. 값은 숫자, 텍스트 또는 이 두 가지의 조합일 수 있습니다. `Horse`, `House`, `8`, `Love` 및 `3.1` 는 모두 유효한 값이며 동일한 범주형 열에서 찾을 수 있습니다. 기계 학습 모델은 모든 값이 숫자인 경우에도 수치형 변수와 달리 범주형 변수 값의 순서나 거리를 가정하지 않습니다.
+ **Binary**(바이너리) - 바이너리 변수는 고유한 값 집합의 카디널리티가 2인 특수 범주형 변수 유형입니다.
+ **Text**(텍스트) - 텍스트 열에는 숫자가 아닌 고유 값이 많이 포함되어 있습니다. 극단적인 경우에는 열의 모든 요소가 고유합니다. 극단적인 경우에는 동일한 항목이 두 개 없을 수도 있습니다.
+ **Datetime**(날짜시간) - 날짜/시간 열에는 날짜 또는 시간에 대한 정보가 포함됩니다. 날짜와 시간에 대한 정보를 모두 포함할 수 있습니다.

------
#### [ Feature statistics ]

다음은 각 변수 통계에 대한 정의입니다.
+ **예측력** - 예측력은 대상을 예측하는 데 열이 얼마나 유용한지를 측정합니다.
+ **이상치** (숫자 열의) - Data Wrangler는 이상치에 대한 확고한 두 가지 통계, 즉 중앙값과 강력한 표준 편차(RSTD)를 사용하여 이상치를 탐지합니다. RSTD는 변수 값을 [5 백분위수, 95 백분위수] 범위로 클리핑한 다음 클리핑된 벡터의 표준 편차를 계산하여 도출됩니다. 중앙값 \$1 5 \$1 RSTD보다 크거나 중앙값 - 5 \$1 RSTD보다 작은 모든 값은 이상치로 간주됩니다.
+ **스큐**(Skew) (숫자 열의) - 스큐는 분포의 대칭성을 측정하며 분포의 세 번째 모멘트를 표준 편차의 3제곱으로 나눈 값으로 정의됩니다. 정규 분포 또는 기타 대칭 분포의 왜도는 0입니다. 양수 값은 분포의 오른쪽 꼬리가 왼쪽 꼬리보다 길다는 것을 의미합니다. 음수 값은 분포의 왼쪽 꼬리가 오른쪽 꼬리보다 길다는 것을 의미합니다. 일반적으로 스큐의 절대값이 3보다 크면 분포가 치우친 것으로 간주됩니다.
+ **첨도**(Kurtosis) (숫자 열의) - Pearson의 첨도는 분포 꼬리의 영향을 측정합니다. 분포의 네 번째 모멘트를 두 번째 모멘트의 제곱으로 나눈 값으로 정의됩니다. 정규 분포의 첨도는 3입니다. 첨도 값이 3보다 작으면 분포가 평균 주위에 집중되고 꼬리가 정규 분포의 꼬리보다 가볍다는 것을 의미합니다. 첨도 값이 3보다 크면 꼬리 또는 이상치가 더 무겁다는 의미입니다.
+ **누락된 값** - NULL과 유사한 객체, 빈 문자열, 공백으로만 구성된 문자열은 누락된 것으로 간주됩니다.
+ **숫자 변수 또는 회귀 대상에 적합한 값** - 유한 부동 소수점으로 지정할 수 있는 모든 값이 유효합니다. 누락된 값은 유효하지 않습니다.
+ **범주형, 바이너리 또는 텍스트 변수 또는 분류 대상에 유효한 값** - 누락되지 않은 모든 값이 유효합니다.
+ **Datetime 변수** 날짜/시간 객체로 지정할 수 있는 모든 값이 유효합니다. 누락된 값은 유효하지 않습니다.
+ **유효하지 않은 값** - 누락되었거나 제대로 지정할 수 없는 값. 예를 들어 숫자 열에서는 `"six"` 문자열이나 null 값을 지정할 수 없습니다.

------
#### [ Quick model metrics for regression ]

다음은 빠른 모델 메트릭의 정의입니다.
+ R2 (또는 결정 계수) - R2는 모델이 예측한 대상의 변동 비율입니다. R2는 [-infty, 1] 범위 내에 있습니다. 1은 대상을 완벽하게 예측하는 모델의 점수이고 0은 항상 대상 평균을 예측하는 간단한 모델의 점수입니다.
+ MSE 또는 평균 제곱 오차 - MSE는 [0, infty] 범위에 있습니다. 0은 대상을 완벽하게 예측하는 모델의 점수입니다.
+ MAE 또는 평균 절대 오차 - MAE는 [0, infty] 범위에 있습니다. 여기서 0은 대상을 완벽하게 예측하는 모델의 점수입니다.
+ RMSE 또는 제곱근 오차 - RMSE는 [0, infty] 범위에 있습니다. 여기서 0은 대상을 완벽하게 예측하는 모델의 점수입니다.
+ 최대 오차 - 데이터세트에 대한 오차의 최대 절대값입니다. 최대 오차는 [0, infty] 범위에 있습니다. 0은 대상을 완벽하게 예측하는 모델의 점수입니다.
+ 절대 오차 중앙값 - 절대 오차 중앙값은 [0, infty] 범위에 있습니다. 0은 대상을 완벽하게 예측하는 모델의 점수입니다.

------
#### [ Quick model metrics for classification ]

다음은 빠른 모델 메트릭의 정의입니다.
+ **정확도**(Accuracy) - 정확도는 정확하게 예측된 샘플의 비율입니다. 정확도는 [0, 1] 범위에 있습니다. 0은 모든 샘플을 잘못 예측한 모델의 점수이고 1은 완벽한 모델의 점수입니다.
+ **균형 정확도** - 균형 정확도는 데이터의 균형을 맞추기 위해 클래스 가중치를 조정할 때 정확하게 예측된 샘플의 비율입니다. 빈도와 상관없이 모든 클래스에 동일한 중요도가 부여됩니다. 균형 정확도는 [0, 1] 범위에 있습니다. 0은 모든 샘플을 잘못 예측한 모델의 점수이고 1은 완벽한 모델의 점수입니다.
+ **AUC (바이너리 분류)** - 수신기 작동 특성 곡선 아래 면적입니다. AUC는 [0, 1] 범위에 있으며, 여기서 랜덤 모델은 0.5점을 반환하고 완벽한 모델은 1점을 반환합니다.
+ **AUC (OVR)** - 다중 클래스 분류의 경우 이는 한 레이블을 나머지 레이블과 대비하여 각 레이블에 대해 개별적으로 계산된 수신기 작동 특성 곡선 아래 면적입니다. Data Wrangler는 면적의 평균을 보고합니다. AUC는 [0, 1] 범위에 있으며, 여기서 랜덤 모델은 0.5점을 반환하고 완벽한 모델은 1점을 반환합니다.
+ **정밀도**(Precision) - 정밀도는 특정 클래스에 대해 정의됩니다. 정밀도는 모델이 해당 클래스로 분류한 모든 인스턴스 중에서 True positive의 비율을 나타냅니다. 정밀도는 [0, 1] 범위 내에 있습니다. 1은 해당 클래스에 대해 False Positive가 없는 모델의 점수입니다. 바이너리 분류의 경우 Data Wrangler는 포지티브 클래스의 정밀도를 보고합니다.
+ **재현율**(Recall) - 리콜은 특정 클래스에 대해 정의됩니다. 재현율은 관련 클래스 인스턴스 중 성공적으로 검색된 인스턴스의 비율입니다. 재현율은 [0, 1] 범위 내에 있습니다. 1은 클래스의 모든 인스턴스를 올바르게 분류한 모델의 점수입니다. 바이너리 분류의 경우 Data Wrangler는 포지티브 클래스의 재현율을 보고합니다.
+ **F1** - F1은 특정 클래스에 대해 정의됩니다. F1은 정밀도와 재현율의 조화 평균입니다. F1의 범위는 [0, 1]입니다. 1은 완벽한 모델의 점수입니다. 바이너리 분류의 경우 Data Wrangler는 값이 양수인 클래스에 대해 F1을 보고합니다.

------
#### [ Textual patterns ]

**패턴**은 읽기 쉬운 형식을 사용하여 문자열의 텍스트 형식을 설명합니다. 다음은 텍스트 패턴의 예입니다.
+ “\$1digits:4-7\$1”는 길이가 4에서 7 사이인 일련의 숫자를 나타냅니다.
+ “\$1alnum:5\$1”는 길이가 정확히 5인 영숫자 문자열을 나타냅니다.

Data Wrangler는 데이터의 비어 있지 않은 문자열의 샘플을 보고 패턴을 유추합니다. 일반적으로 사용되는 여러 패턴을 설명할 수 있습니다. 백분율로 표시되는 **신뢰도**는 패턴과 일치하는 것으로 추정되는 데이터의 양을 나타냅니다. 텍스트 패턴을 사용하면 데이터에서 수정하거나 삭제해야 하는 행을 확인할 수 있습니다.

다음은 Data Wrangler가 인식할 수 있는 패턴을 설명합니다.


| 패턴 | 텍스트 형식 | 
| --- | --- | 
|  \$1alnum\$1  |  영숫자 문자열  | 
|  \$1any\$1  |  모든 단어 문자열  | 
|  \$1digits\$1  |  일련의 숫자  | 
|  \$1lower\$1  |  소문자 단어  | 
|  \$1mixed\$1  |  대소문자가 혼합된 단어  | 
|  \$1name\$1  |  대문자로 시작하는 단어  | 
|  \$1upper\$1  |  대문자 단어  | 
|  \$1whitespace\$1  |  공백(화이트스페이스) 문자  | 

단어 문자는 밑줄이거나 모든 언어의 단어에 나타날 수 있는 문자입니다. 예를 들어, 'Hello\$1Word' 및 'écoute' 문자열은 모두 단어 문자로 구성됩니다. 'H'와 'é' 모두 단어 문자의 예입니다.

------

# 데이터 플로우에서 모델 자동 훈련하기
<a name="data-wrangler-autopilot"></a>

Amazon SageMaker Autopilot을 사용하면 데이터 플로우에서 변환한 데이터를 기반으로 모델을 자동으로 훈련, 조정 및 배포할 수 있습니다. Amazon SageMaker Autopilot은 여러 알고리즘을 거쳐 데이터에 가장 적합한 알고리즘을 사용할 수 있습니다. Amazon SageMaker Autopilot에 대한 추가 정보는 [SageMaker Autopilot](autopilot-automate-model-development.md)를 참고하세요.

모델을 훈련하고 조정할 때 Data Wrangler는 Amazon SageMaker Autopilot이 데이터에 액세스할 수 있는 Amazon S3 위치로 데이터를 내보냅니다.

Data Wrangler 플로우에서 노드를 선택하고 데이터 미리 보기에서 **내보내기 및 훈련**을 선택하여 모델을 준비하고 배포할 수 있습니다. 모델을 훈련하기로 선택하기 전에 이 방법을 사용하여 데이터세트를 확인할 수 있습니다.

데이터 플로우에서 직접 모델을 훈련하고 배포할 수도 있습니다.

다음 절차는 데이터 플로우에서 모델을 준비하고 배포합니다. 다중 행 변환이 포함된 Data Wrangler 플로우의 경우 모델을 배포할 때 Data Wrangler 플로우의 변환을 사용할 수 없습니다. 데이터를 사용하여 추론을 수행하기 전에 다음 절차를 사용하여 데이터를 처리할 수 있습니다.

데이터 플로우에서 직접 모델을 훈련하고 배포하려면 다음을 수행하세요.

1. 훈련 데이터가 들어 있는 노드 옆의 **\$1**를 선택합니다.

1. **모델 훈련**을 선택합니다.

1. (선택 사항) AWS KMS 키 또는 ID를 지정합니다. 데이터 보호를 위한 암호화 키 생성 및 제어에 대한 추가 정보는 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)을 참고하세요.

1. **내보내기 및 훈련**을 선택합니다.

1. Amazon SageMaker Autopilot은 Data Wrangler가 내보낸 데이터를 기반으로 모델을 훈련시킨 후 **실험 이름**에 이름을 지정합니다.

1. **데이터 입력**에서 **미리보기**를 선택하여 Data Wrangler가 데이터를 Amazon SageMaker Autopilot으로 제대로 내보냈는지 확인합니다.

1. **대상**에서 대상 열을 선택합니다.

1. (선택 사항) **출력 데이터**에서 **S3 위치** 경우 기본 위치가 아닌 Amazon S3 위치를 지정합니다.

1. **다음: 훈련 방법**을 선택합니다.

1. 훈련 방법을 선택합니다. 추가 정보는 [훈련 모드](autopilot-model-support-validation.md#autopilot-training-mode) 섹션을 참조하세요.

1. (선택 사항) **자동 배포 엔드포인트**의 경우 엔드포인트의 이름을 지정합니다.

1. **배포 옵션**에서 배포 방법을 선택합니다. 데이터에 수행한 변환과 함께 배포 또는 변환하지 않고 배포를 선택할 수 있습니다.
**중요**  
Data Wrangler 플로우에서 수행한 변환과 함께 Amazon SageMaker Autopilot 모델을 배포할 수는 없습니다. 이러한 변환에 대한 추가 정보는 [추론 엔드포인트로 내보내기](data-wrangler-data-export.md#data-wrangler-data-export-inference)을 참고하세요.

1. **다음: 검토 및 생성**을 선택합니다.

1. **Create experiment(실험 생성)**를 선택합니다.

모델 훈련 및 배포에 대한 추가 정보는 [AutoML API를 사용하여 테이블 형식 데이터에 대한 회귀 또는 분류 작업 생성](autopilot-automate-model-development-create-experiment.md)을 참고하세요. Autopilot은 최적의 모델 성능에 대한 분석을 보여줍니다. 모델 성능에 대한 추가 정보는 [Autopilot 모델 성능 보고서 보기](autopilot-model-insights.md)을 참고하세요.

# 데이터 변환하기
<a name="data-wrangler-transform"></a>

Amazon SageMaker Data Wrangler는 ML 데이터를 다양하게 변환시켜 데이터 정리, 변환, 특성 추출을 간소화합니다. 변환을 추가하면 데이터 흐름에 단계가 추가됩니다. 변환을 추가할 때마다 데이터세트가 수정되고 새 데이터 프레임이 생깁니다. 이후 모든 변환은 결과 데이터 프레임에 적용됩니다.

Data Wrangler에는 사용자가 코드 없이 열을 변환할 때 사용할 수 있는 내장 변환이 포함되어 있습니다. 사용자는 PySpark, Python(사용자 지정 함수), pandas, PySpark SQL로 사용자 지정 변환을 추가할 수도 있습니다. 현재 위치에서 작동하는 변환이 있는 반면, 데이터세트에서 새 출력 열을 생성하는 변환도 있습니다.

변환은 여러 열에 한 번에 적용할 수 있습니다. 예를 들어, 사용자는 한 번에 여러 열을 삭제할 수 있습니다.

사용자는 **숫자 처리(Process numeric)**와 **누락 처리(Handle missing)** 변환은 단일 열에만 적용할 수 있습니다.

이 페이지에서 이러한 내장 변환과 사용자 지정 변환에 대해 자세히 알아보세요.

## UI 변환하기
<a name="data-wrangler-transform-ui"></a>

대부분의 내장 변환은 Data Wrangler UI의 **준비(Prepare)** 탭에 있습니다. 사용자는 데이터 흐름 보기를 통해 조인 및 연결 변환에 액세스할 수 있습니다. 다음 테이블에서 이 두 가지 뷰를 미리 볼 수 있습니다.

------
#### [ Transform ]

사용자는 데이터 흐름 내 어떤 단계에도 변환을 추가할 수 있습니다. 다음 절차에 따라 데이터 흐름에 변환을 추가합니다.

데이터 흐름에 단계를 추가하는 방법은 다음과 같습니다.

1. 데이터 흐름 단계 옆 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-add-step.png)

1. 변환을 선택합니다.

1. (선택 사항) 사용자는 사용할 변환을 검색할 수 있습니다. Data Wrangler는 결과에서 쿼리를 강조 표시합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-search.png)

------
#### [ Join View ]

두 데이터세트를 조인하려면, 데이터 흐름에서 첫 번째 데이터세트를 선택하고 **조인(Join)**을 선택합니다. **조인**을 선택한 경우 다음 이미지와 유사한 결과가 나타납니다. 왼쪽 및 오른쪽 데이터 세트가 왼쪽 패널에 표시됩니다. 기본 패널에는 새로 조인된 데이터세트가 추가된 데이터 흐름이 표시됩니다.

![\[Data Wrangler 콘솔의 데이터 흐름 섹션에 있는 조인된 데이터세트 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/join-1.png)


조인 구성을 위해 **구성**을 선택한 경우 다음 이미지와 유사한 결과가 나타납니다. 조인 구성이 왼쪽 패널에 표시됩니다. 사용자는 이 패널에서 조인된 데이터세트 이름, 조인 유형, 조인할 열을 선택할 수 있습니다. 기본 패널에는 세 개의 테이블이 표시됩니다. 위의 두 테이블에는 각각 왼쪽과 오른쪽에 왼쪽과 오른쪽 데이터 세트가 표시됩니다. 이 테이블 아래에서 사용자는 조인된 데이터세트를 미리 볼 수 있습니다.

![\[Data Wrangler 콘솔의 데이터 흐름 섹션에 있는 조인된 데이터세트 테이블입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/join-2.png)


자세한 내용은 [데이터세트 조인하기](#data-wrangler-transform-join) 섹션을 참조하세요.

------
#### [ Concatenate View ]

두 데이터세트를 연결하려면, 데이터 흐름에서 첫 번째 데이터세트를 선택하고 **연결(Concatenate)**을 선택합니다. **연결**을 선택하면 다음 이미지와 유사한 결과가 나타납니다. 왼쪽 및 오른쪽 데이터세트가 왼쪽 패널에 표시됩니다. 기본 패널에는 새로 연결된 데이터세트가 추가된 데이터 흐름이 표시됩니다.

![\[Data Wrangler 콘솔의 데이터 흐름 섹션에 있는 연결된 데이터세트 흐름의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/concat-1.png)


연결 구성을 위해 **구성**을 선택하면 다음 이미지와 유사한 결과가 나타납니다. 연결 구성이 왼쪽 패널에 표시됩니다. 사용자는 이 패널을 사용하여 연결된 데이터세트 이름을 선택하고, 연결 후 중복을 제거하고, 소스 데이터 프레임을 나타내는 열을 추가할 수 있습니다. 기본 패널에는 세 개의 테이블이 표시됩니다. 위의 두 테이블에는 각각 왼쪽과 오른쪽에 왼쪽과 오른쪽 데이터세트가 표시됩니다. 이 테이블 아래에서 사용자는 연결된 데이터세트를 미리 볼 수 있습니다.

![\[Data Wrangler 콘솔의 데이터 흐름 섹션에 있는 연결된 데이터세트 테이블의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/concat-2.png)


자세한 내용은 [데이터세트 연결하기](#data-wrangler-transform-concatenate) 섹션을 참조하세요.

------

## 데이터세트 조인하기
<a name="data-wrangler-transform-join"></a>

데이터 흐름에서 데이터 프레임을 직접 조인할 수 있습니다. 두 데이터세트를 조인하면 조인된 결과 데이터세트가 흐름에 나타납니다. 다음 조인 유형이 Data Wrangler에서 지원됩니다.
+ **왼쪽 외부(Left Outer)** - 왼쪽 테이블의 모든 행 포함. 왼쪽 테이블 행에서 조인된 열의 값이 오른쪽 테이블 행 값과 일치하지 않는 경우, 조인된 테이블에서 해당 열은 모든 오른쪽 테이블 열에 대해 null 값 포함.
+ **왼쪽 안티(Left Anti)** - 조인된 열에 대해 오른쪽 테이블에 값이 없는 왼쪽 테이블 행 포함.
+ **왼쪽 세미(Left semi)** - 조인문 기준을 충족하는 모든 동일한 행에 왼쪽 테이블의 단일 행 포함. 이 경우 조인 기준과 일치하는 왼쪽 테이블의 중복 행 제외.
+ **오른쪽 외부(Left Outer)** - 오른쪽 테이블의 모든 행 포함. 오른쪽 테이블 행에서 조인된 열의 값이 왼쪽 테이블 행 값과 일치하지 않는 경우, 조인된 테이블에서 해당 열은 모든 왼쪽 테이블 열에 대해 null 값 포함.
+ **내부(Inner)** - 왼쪽 및 오른쪽 테이블 행 중 일치하는 값이 포함된 행을 조인된 열에 포함.
+ **완전 외부(Full Outer)** - 왼쪽과 오른쪽 테이블의 모든 행 포함. 두 테이블 중 하나에 있는 조인된 열의 행 값이 일치하지 않는 경우, 조인된 테이블에 별도 행 생성. 조인된 테이블에서 열 값이 포함되지 않는 경우, 해당 열에 null 삽입.
+ **데카르트 크로스(Cartesian Cross)** - 첫 번째 테이블의 각 행을 두 번째 테이블의 각 행과 결합하는 행 포함. 이것은 조인 테이블 행의 [데카르트 곱(Cartesian product)](https://en.wikipedia.org/wiki/Cartesian_product)입니다. 이 곱의 결과는 왼쪽 표의 크기와 오른쪽 표의 크기를 곱한 값입니다. 따라서 초대형 데이터세트 간에 이 조인을 사용할 때는 주의할 것을 권장합니다.

다음 절차에 따라 두 데이터 프레임을 조인합니다.

1. 결합하려는 왼쪽 데이터 프레임 옆에서 **\$1**를 선택합니다. 첫 번째로 선택하는 데이터 프레임은 항상 조인의 왼쪽 테이블입니다.

1. **조인**을 선택합니다.

1. 올바른 데이터 프레임을 선택합니다. 두 번째로 선택하는 데이터 프레임은 항상 조인의 오른쪽 테이블입니다.

1. **구성(Configure)**을 선택하여 조인을 구성합니다.

1. **이름(Name)** 필드에 조인된 데이터세트 이름을 입력합니다.

1. **조인 유형(Join type)**을 선택합니다.

1. 왼쪽 및 오른쪽 테이블에서 조인할 열을 선택합니다.

1. **적용(Apply)**을 선택하여 오른쪽에 조인된 데이터세트를 미리보기 합니다.

1. 조인된 테이블을 데이터 흐름에 추가하려면 **추가(Add)**를 선택합니다.

## 데이터세트 연결하기
<a name="data-wrangler-transform-concatenate"></a>

**두 데이터세트를 연결합니다.**

1. 연결하려는 왼쪽 데이터 프레임 옆에서 **\$1**를 선택합니다. 첫 번째로 선택하는 데이터 프레임은 항상 연결의 왼쪽 테이블입니다.

1. **연결(Concatenate)**을 선택합니다.

1. 올바른 데이터 프레임을 선택합니다. 두 번째로 선택하는 데이터 프레임은 항상 연결의 오른쪽 테이블입니다.

1. **구성(Configure)**을 선택하여 연결을 구성합니다.

1. **이름(Name)** 필드에 연결된 데이터세트 이름을 입력합니다.

1. (선택 사항) **연결 후 중복 제거(Remove duplicates after concatenation)** 옆 확인란을 선택하여 중복 열을 제거합니다.

1. (선택 사항) 새 데이터세트에 있는 개별 열에 열 소스 표시기를 추가하려면, **소스 데이터 프레임을 표시할 열 추가(Add column to indicate source dataframe)** 옆 확인란을 선택합니다.

1. **적용(Apply)**을 선택하여 새 데이터세트를 미리보기 합니다.

1. 새 데이터세트를 데이터 흐름에 추가하려면 **추가(Add)**를 선택합니다.

## 데이터 균형화
<a name="data-wrangler-transform-balance-data"></a>

사용자는 데이터세트에 과소 대표된 범주가 있는 경우, 데이터 균형을 맞출 수 있습니다. 데이터세트 균형화는 더 개선된 바이너리 분류 모델을 생성하는 데 도움이 될 수 있습니다.

**참고**  
열 벡터가 포함된 데이터세트의 균형화는 불가능합니다.

사용자는 **데이터 균형화** 연산에서 다음 연산자 중 하나를 사용하여 데이터 균형을 맞출 수 있습니다.
+ 무작위 오버샘플링 - 소수 범주의 샘플을 무작위로 복제.** 예를 들어, 사기 감지의 경우 데이터의 10%에만 사기 사례가 있을 수 있습니다. 사기 사례와 비사기 사례의 비율이 같은 경우, 이 연산자는 데이터세트에서 사기 사례를 무작위로 8회 복제합니다.
+ 무작위 언더샘플링 - 무작위 오버샘플링과 대체적으로 상응함.** 과대 대표된 범주에서 샘플을 무작위로 제거하여 원하는 샘플 비율을 구합니다.
+ 합성 소수 오버샘플링 기법(SMOTE) - 과소 대표된 범주의 샘플을 사용하여 새 합성 소수 샘플 보간.** SMOTE에 대한 추가 정보는 다음 설명에서 확인하세요.

사용자는 숫자 및 비 숫자 특성을 모두 포함하는 데이터세트에서는 모든 변환을 적용할 수 있습니다. SMOTE는 인접 샘플을 사용하여 값을 보간합니다. Data Wrangler는 결정계수 거리를 사용하여 추가 샘플을 보간할 이웃을 결정합니다. Data Wrangler는 숫자 특성만 사용하여 과소 대표 집단 내 샘플 간 거리를 계산합니다.

Data Wrangler는 과소 대표 집단에 있는 두 개의 실제 샘플에 대해 가중 평균을 사용하여 숫자 특성을 보간합니다. [0, 1] 범위 샘플에 무작위로 가중치를 할당합니다. 숫자 특성인 경우, Data Wrangler는 샘플의 가중 평균을 사용하여 샘플을 보간합니다. 표본 A와 B의 경우, Data Wrangler는 A에 0.7, B에 0.3의 가중치를 무작위로 할당할 수 있습니다. 보간된 샘플 값은 0.7A\$10.3B입니다.

Data Wrangler는 보간된 실제 샘플 중 하나를 복사하여 비 숫자 특성을 보간합니다. 개별 샘플 무작위 할당 확률로 샘플을 복사합니다. 표본 A와 B의 경우, A에는 확률 0.8을, B에는 0.2를 할당할 수 있습니다. 할당된 확률에 대해 80% 의 확률로 A를 복사합니다.

## 사용자 지정 변환
<a name="data-wrangler-transform-custom"></a>

**사용자 지정 변환** 그룹에서는 Python(사용자 지정 함수), PySpark, pandas 또는 PySpark(SQL) 로 사용자 지정 변환을 정의할 수 있습니다. 세 가지 옵션 모두 `df` 변수를 사용하여 변환을 적용하려는 데이터 프레임에 액세스합니다. 사용자 지정 코드를 데이터 프레임에 적용하려면, `df` 변수에 적용한 변환을 데이터 프레임에 할당해야 합니다. Python(사용자 지정 함수)을 사용하지 않는 경우, 반환문을 포함하지 않아도 됩니다. **미리보기(Preview)**를 선택하여 사용자 지정 변환 결과를 미리보기 합니다. **추가(Add)**를 선택하여 **이전 단계(Previous steps)** 목록에 사용자 지정 변환을 추가합니다.

다음과 같이 사용자 지정 변환 코드 블록에 있는 `import`문으로 주요 라이브러리를 가져올 수 있습니다.
+ NumPy 버전 1.19.0
+ scikit-learn 버전 0.23.2
+ SciPy 버전 1.5.4
+ pandas 버전 1.0.3
+ PySpark 버전 3.0.0

**중요**  
**사용자 지정 변환**은 이름에 공백이나 특수 문자가 있는 열을 지원하지 않습니다. 영숫자 문자와 밑줄만으로 열 이름을 지정할 것을 권장합니다. 사용자는 **열 이름 바꾸기(Rename column)** 변환(**관리 열(Manage columns)** 변환 그룹 내)으로 열 이름에서 공백을 제거할 수 있습니다. 사용자는 또한 다음과 비슷한 **Python(Pandas)** **사용자 지정 변환(Custom transform)**을 추가하여 한 번에 여러 열에서 공백을 제거할 수도 있습니다. 이 예제에서는 이름이 `A column`, `B column`인 열을 각각 `A_column`, `B_column`(으)로 변경합니다.  

```
df.rename(columns={"A column": "A_column", "B column": "B_column"})
```

코드 블록에 출력문이 있는 경우, **미리보기(Preview)**를 선택할 때 결과가 표시됩니다. 사용자는 사용자 지정 코드 변환기 패널의 크기를 조정할 수 있습니다. 패널 크기를 조정하면 코드 작성 공간이 넓어집니다. 다음 이미지에서 패널 크기 조정 방법을 확인하세요.

![\[Python 함수의 경우 pd.Series 아래 주석을 코드로 바꿉니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/resizing-panel.gif)


다음 섹션에는 사용자 지정 변환 코드 작성을 위한 추가 컨텍스트와 예제가 있습니다.

**Python(사용자 지정 함수)**

Python 함수를 사용하면 Apache Spark 또는 pandas를 몰라도 사용자 지정 변환을 작성할 수 있습니다. Data Wrangler는 사용자 지정 코드를 빠르게 실행할 수 있게 최적화되어 있습니다. 사용자 지정 Python 코드와 Apache Spark 플러그인을 사용하면 비슷한 성능을 얻을 수 있습니다.

Python(사용자 지정 함수) 코드 블록을 사용하려면 다음을 지정해야 합니다.
+ **입력 열(Input column)** - 변환을 적용할 입력 열.
+ **모드(Mode)** - 스크립팅 모드(pandas 또는 Python).
+ **반환 유형(Return type)** - 반환 값의 데이터 유형.

pandas 모드를 사용하면 성능이 향상됩니다. Python 모드에서는 순수 Python 함수로 더 쉽게 변환을 작성할 수 있습니다.

다음 영상에서 사용자 지정 코드로 변환을 생성하는 방법을 알아보세요. 영상에서는 [Titanic 데이터세트](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)로 사용하여 인사말이 표시된 열을 생성합니다.

![\[Python 함수의 경우 pd.Series 아래 주석을 코드로 바꿉니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/python-function-transform-titanic-720.gif)


**PySpark**

다음 예제에서는 타임스탬프에서 날짜와 시간을 추출합니다.

```
from pyspark.sql.functions import from_unixtime, to_date, date_format
df = df.withColumn('DATE_TIME', from_unixtime('TIMESTAMP'))
df = df.withColumn( 'EVENT_DATE', to_date('DATE_TIME')).withColumn(
'EVENT_TIME', date_format('DATE_TIME', 'HH:mm:ss'))
```

**pandas**

다음 예제에서는 변환을 추가하는 데이터 프레임의 개요를 입력합니다.

```
df.info()
```

**PySpark(SQL)**

다음 예제에서는 *name*, *fare*, *pclass*, *survived*의 네 개의 열이 있는 새 데이터 프레임을 생성합니다.

```
SELECT name, fare, pclass, survived FROM df
```

PySpark 사용법을 모르는 경우, 사용자는 사용자 지정 코드 조각을 사용하여 시작 시 도움을 받을 수 있습니다.

Data Wrangler에는 검색 가능한 코드 조각 모음이 있습니다. 사용자는 코드 조각을 사용하여 열 삭제, 열별 그룹화, 모델링 등의 작업을 수행할 수 있습니다.

코드 조각을 사용하려면, **예제 조각 검색(Search example snippets)**을 선택하고 검색창에서 쿼리를 지정합니다. 쿼리에 지정하는 텍스트가 코드 조각의 이름과 정확히 일치할 필요는 없습니다.

다음 예제에서 데이터세트에 유사한 데이터가 있는 행을 삭제할 수 있는 **중복 행 삭제(Drop duplicate rows)** 코드 조각을 볼 수 있습니다. 사용자는 다음 중 하나로 검색하면 코드 조각을 찾을 수 있습니다.
+ Duplicates
+ Identical
+ 제거

다음 조각에는 변경할 사항을 파악하는 데 도움이 되는 주석이 있습니다. 먼저 대부분의 조각에 코드 내 데이터세트 열 이름을 지정해야 합니다.

```
# Specify the subset of columns
# all rows having identical values in these columns will be dropped

subset = ["col1", "col2", "col3"]
df = df.dropDuplicates(subset)  

# to drop the full-duplicate rows run
# df = df.dropDuplicates()
```

조각을 사용하려면, 조각 내용을 복사하여 **사용자 지정 변환** 필드에 붙여넣습니다. 사용자는 여러 개의 코드 조각을 복사하여 사용자 지정 변환 필드에 붙여 넣을 수 있습니다.

## 사용자 지정 공식
<a name="data-wrangler-transform-custom-formula"></a>

**사용자 지정 공식**으로 Spark SQL 표현식을 사용하는 새 열을 정의하여 현재의 데이터 프레임에 있는 데이터 쿼리를 실행합니다. 쿼리는 Spark SQL 표현식 규칙을 적용해야 합니다.

**중요**  
**사용자 지정 공식**은 이름에 공백이나 특수 문자가 있는 열을 지원하지 않습니다. 영숫자 문자와 밑줄만으로 열 이름을 지정할 것을 권장합니다. 사용자는 **열 이름 바꾸기(Rename column)** 변환(**관리 열(Manage columns)** 변환 그룹 내)으로 열 이름에서 공백을 제거할 수 있습니다. 사용자는 또한 다음과 비슷한 **Python(Pandas)** **사용자 지정 변환(Custom transform)**을 추가하여 한 번에 여러 열에서 공백을 제거할 수도 있습니다. 이 예제에서는 이름이 `A column`, `B column`인 열을 각각 `A_column`, `B_column`(으)로 변경합니다.  

```
df.rename(columns={"A column": "A_column", "B column": "B_column"})
```

사용자는 이 변환으로 열 이름을 참조하여 열에 대한 연산을 수행할 수 있습니다. 예를 들어, 현재 데이터 프레임에 *col\$1a* 및 *col\$1b* 열이 있다고 가정하면, 사용자는 다음 연산으로 다음 코드가 포함된 두 열의 곱인 **출력 열**을 생성할 수 있습니다.

```
col_a * col_b
```

데이터 프레임에 `col_a` 및 `col_b` 열이 포함되어 있다고 가정할 때 사용되는 다른 일반적인 연산에는 다음이 포함됩니다.
+ 두 열의 연결: `concat(col_a, col_b)`
+ 두 열 더하기: `col_a + col_b`
+ 두 열 빼기: `col_a - col_b`
+ 두 열 나누기: `col_a / col_b`
+ 열의 절대값 구하기: `abs(col_a)`

자세한 정보는 데이터 선택에 관한 [Spark 설명서](http://spark.apache.org/docs/latest/api/python)에서 확인하세요.

## 데이터세트 내 차원 축소
<a name="data-wrangler-transform-dimensionality-reduction"></a>

주성분 분석(PCA)으로 데이터 차원을 축소합니다. 데이터세트의 차원은 특성 수와 일치합니다. Data Wrangler에서 차원 축소를 적용하면 성분이라는 새로운 특성을 얻을 수 있습니다. 개별 성분은 데이터의 일부 변동성을 고려합니다.

첫 번째 성분은 데이터에서 가장 많은 양의 변동을 구성합니다. 두 번째 성분은 데이터에서 두 번째로 많은 양의 변동을 구성하는 식으로 계속됩니다.

사용자는 차원 축소를 사용하여 모델 훈련 시 사용하는 데이터세트의 크기를 줄일 수 있습니다. 사용자는 데이터세트에 있는 특성 대신에 주성분을 사용할 수 있습니다.

Data Wrangler는 PCA를 수행하기 위해 데이터 축을 생성합니다. 축은 데이터세트의 열 아핀 조합입니다. 첫 번째 주성분은 분산량이 가장 많은 축의 값입니다. 두 번째 주성분은 분산량이 두 번째로 많은 축의 값입니다. n번째 주성분은 분산량이 n번째로 많은 축의 값입니다.

사용자는 Data Wrangler가 반환하는 주성분 수를 구성할 수 있습니다. 사용자는 주성분 수를 직접 지정하거나 분산 임곗값 백분율을 지정할 수 있습니다. 개별 주성분은 데이터의 분산량을 설명합니다. 예를 들어, 값이 0.5인 주성분이 있을 수 있습니다. 이 성분은 데이터 분산의 50%를 설명합니다. 분산 임곗값 백분율을 지정하면 Data Wrangler는 지정한 백분율을 충족하는 최소 개수의 성분을 반환합니다.

다음은 데이터에서 설명하는 분산량을 포함한 주성분의 예입니다.
+ 성분 1 - 0.5
+ 성분 2 - 0.45
+ 성분 3 - 0.05

분산 임곗값 백분율을 `94` 또는 `95`로 지정하는 경우, Data Wrangler는 성분 1과 성분 2를 반환합니다. 분산 임곗값 백분율을 `96`로 지정하는 경우, Data Wrangler는 주성분 세 개를 모두 반환합니다.

사용자는 다음 절차에 따라 데이터세트에서 PCA를 실행할 수 있습니다.

데이터세트에서 PCA를 실행하는 방법은 다음과 같습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **차원 축소(Dimensionality Reduction)**를 선택합니다.

1. **입력 열(Input Columns)**에서 주성분으로 축소하려는 특성을 선택합니다.

1. (선택 사항) **주성분 수(Number of principal components)**에서 Data Wrangler가 데이터세트에 반환하는 주성분의 수를 선택합니다. 필드 값을 지정할 경우 **분산 임곗값 백분율(Variance threshold percentage)** 값을 지정할 수 없습니다.

1. (선택 사항) **분산 임곗값 백분율**을 주성분으로 설명하고자 하는 데이터의 분산 백분율로 지정합니다. 분산 임곗값을 지정하지 않을 경우, Data Wrangler는 `95`의 기본 값을 적용합니다. **주성분 수(Number of principal components)** 값을 지정한 경우 분산 임곗값 백분율을 지정할 수 없습니다.

1. (선택 사항) 열 평균을 데이터 중심으로 사용하지 않으려면 **중심화(Center)** 선택을 해제합니다. 기본적으로 Data Wrangler는 크기 조정 전에 평균으로 데이터를 중앙화합니다.

1. (선택 사항) 단위 표준 편차로 데이터 크기를 조정하지 않으려면 **조정(Scale)** 선택을 해제합니다.

1. (선택 사항) 성분을 개별 열에 출력하려면 **열(Columns)**을 선택합니다. 성분을 단일 벡터로 출력하려면 **벡터(Vector)**를 선택합니다.

1. (선택 사항) **출력 열(Output column)**에 출력 열 이름을 지정합니다. 성분을 개별 열에 출력하는 경우 지정하는 이름은 접두사입니다. 성분을 벡터로 출력하는 경우 지정하는 이름은 벡터 열 이름입니다.

1. (선택 사항) **입력 열 유지(Keep input columns)**를 선택합니다. 주성분만 사용하여 모델을 훈련시킬 경우에는 이 옵션 선택을 권장하지 않습니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

## 카테고리 인코딩
<a name="data-wrangler-transform-cat-encode"></a>

카테고리 데이터는 일반적으로 유한한 수의 범주로 구성되며, 각 범주는 문자열로 표시됩니다. 예를 들어, 고객 데이터 테이블에서 개인의 거주 국가를 나타내는 열은 카테고리입니다. 아프가니스탄, 알바니아, 알제리 등이 범주가 됩니다.****** 카테고리 데이터는 명목형 또는 순서형일 수 있습니다.**** 순서형 범주에는 고유한 순서가 있지만 명목형 범주에는 고유한 순서가 없습니다. 순서형 범주의 예로는 최종 학력(고졸, 대졸, 대학원졸 등)이 있습니다.******

카테고리 데이터 인코딩은 범주를 수치로 표현하는 과정입니다. 예를 들어, 범주가 개와 고양이인 경우, 이 정보를 `[1,0]` 벡터(개)와 `[0,1]` 벡터(고양이)로 인코딩할 수 있습니다.********

서수 범주를 인코딩할 때는 범주의 일반 순서를 인코딩으로 변환해야 할 수 있습니다. 예를 들어, 사용자는 다음 맵을 사용하여 얻은 최고 등급을 표시할 수 있습니다. `{"High school": 1, "Bachelors": 2, "Masters":3}` 

카테고리 인코딩을 사용하면 문자열 형식의 카테고리 데이터를 정수 배열로 인코딩할 수 있습니다.

Data Wrangler 카테고리 인코더는 단계가 정의될 때 열에 있는 모든 범주에 대한 인코딩을 생성합니다. *t* 시점에 데이터세트를 처리하기 위해 Data Wrangler 작업을 시작할 때 열에 새 범주가 추가되고, 이 열이 *t*-1 시점의 Data Wrangler 카테고리 인코딩 변환용 입력인 경우, 이 새 범주는 Data Wrangler 작업에서 누락된 것으로 간주됩니다.** **유효하지 않은 처리 전략(Invalid handling strategy)**으로 선택한 옵션은 이러한 누락된 값에 적용됩니다. 이러한 상황이 발생할 수 있는 경우의 예는 다음과 같습니다.
+ .flow 파일로 Data Wrangler 작업을 생성하여 데이터 흐름 생성 후 업데이트된 데이터세트를 처리하는 경우. 예를 들어, 데이터 흐름으로 매월 정기적으로 판매 데이터를 처리할 수 있습니다. 판매 데이터가 매주 업데이트되는 경우, 인코딩 카테고리 단계가 정의된 열에 새 범주가 도입될 수 있습니다.
+ 데이터세트를 가져올 때 **샘플링(Sampling)**을 선택하면 샘플에서 일부 범주가 제외될 수 있습니다.

이런 상황에서는 새 범주가 Data Wrangler 작업에서 누락된 값으로 간주됩니다.

사용자는 서수(ordinal) 및 원-핫 인코딩(one-hot encode) 중에서 선택하여 구성할 수 있습니다.**** 다음 섹션을 통해 이런 옵션에 대해 자세히 알아보세요.

두 변환 모두 **출력 열 이름(Output column name)**이라는 새 열 이름을 생성합니다. **출력 스타일(Output style)**로 이 열의 출력 형식을 지정합니다.
+ **벡터(Vector)**를 선택하여 희소 벡터가 있는 단일 열을 생성합니다.
+ **열(Columns)**을 선택하여 원래 열의 텍스트에 해당 범주와 동일한 값이 포함되어 있는지 여부를 나타내는 표시기 변수로 모든 범주에 대한 열을 생성합니다.

### 서수 인코딩
<a name="data-wrangler-transform-cat-encode-ordinal"></a>

**서수 인코딩(Ordinal encode)**을 선택하여 범주를 0에서 선택한 **입력 열**의 총 범주 수 사이의 정수로 인코딩합니다.

**유효하지 않은 처리 전략(Invalid handing strategy)**: 유효하지 않거나 누락된 값을 처리하는 메서드를 선택합니다.
+ 누락된 값이 있는 행을 생략하려면 **건너뛰기(Skip)**를 선택합니다.
+ 누락된 값을 마지막 범주로 유지하려면 **유지하기(Keep)**를 선택합니다.
+ **입력 열**에서 누락된 값이 발견될 경우 Data Wrangler에서 오류가 발생하도록 하려면 **오류(Error)**를 선택합니다.
+ 누락된 항목을 NaN으로 바꾸려면 **NaN으로 바꾸기(Replace with NaN)**를 선택합니다. ML 알고리즘이 누락된 값을 처리할 수 있는 경우, 이 옵션을 사용할 것을 권장합니다. 그렇지 않다면, 첫 세 가지 옵션을 통해 더 나은 결과를 얻을 수 있습니다.

### 원-핫 인코딩
<a name="data-wrangler-transform-cat-encode-onehot"></a>

**원-핫 인코딩(One-hot encode)**을 원-핫 인코딩을 사용할 **변환(Transform)**에 대해 선택합니다. 다음과 같이 변환을 구성합니다.
+ **마지막 범주 삭제(Drop last category)**: `True` 마지막 카테고리에 원-핫 인코딩에 있는 상응하는 인덱스가 없는 경우. 누락된 값이 있을 수 있는 경우, 누락된 범주는 항상 마지막이므로 이 범주를 `True`(으)로 설정하면 누락된 값으로 인해 올 제로 벡터가 발생합니다.
+ **유효하지 않은 처리 전략(Invalid handing strategy)**: 유효하지 않거나 누락된 값을 처리하는 메서드를 선택합니다.
  + 누락된 값이 있는 행을 생략하려면 **건너뛰기(Skip)**를 선택합니다.
  + 누락된 값을 마지막 범주로 유지하려면 **유지하기(Keep)**를 선택합니다.
  + **입력 열**에서 누락된 값이 발견될 경우 Data Wrangler에서 오류가 발생하도록 하려면 **오류(Error)**를 선택합니다.
+ **서수 인코딩 입력임(Is input ordinal encoded)**: 입력 벡터에 서수 인코딩 데이터가 포함된 경우 이 옵션을 선택합니다. 이 옵션을 사용하려면 입력 데이터에 음이 아닌 정수가 포함되어야 합니다. **True**인 경우, 입력 *i*는 *i*번째 위치에 0이 아닌 벡터로 인코딩됩니다.

### 유사성 인코딩
<a name="data-wrangler-transform-cat-encode-similarity"></a>

다음과 같은 경우에는 유사성 인코딩을 사용합니다.
+ 다수의 카테고리 변수
+ 노이즈 데이터

유사성 인코더는 카테고리 데이터가 있는 열을 임베딩합니다. 임베딩은 단어 같은 불연속 객체에서 실수 벡터로의 매핑을 뜻합니다. 비슷한 문자열을 비슷한 값을 포함하는 벡터로 인코딩합니다. 예를 들어, “California”와 “Calfornia”에 대해 매우 유사한 인코딩을 생성합니다.

Data Wrangler는 3-그램 토크나이저로 데이터세트의 각 범주를 토큰 세트로 변환합니다. 최소-해시 인코딩을 사용하여 토큰을 임베딩으로 변환합니다.

다음 예제에서 유사성 인코더가 문자열에서 벡터를 생성하는 방식을 볼 수 있습니다.

![\[Data Wrangler 콘솔의 테이블에 ENCODE CATEGORICAL을 사용한 예입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/similarity-encode-example-screenshot-0.png)


![\[Data Wrangler 콘솔의 테이블에 있는 변수의 벡터 표현 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/similarity-encode-example-screenshot-1.png)


Data Wrangler가 생성하는 유사성 인코딩:
+ 저 차원
+ 다수 범주로 확장 가능
+ 강건하고 노이즈에 강함

위와 같은 이유로 유사성 인코딩은 원-핫 인코딩보다 용도가 다양합니다.

유사성 인코딩 변환을 데이터세트에 추가하려면 다음 절차에 따릅니다.

유사성 인코딩 사용 방법은 다음과 같습니다.

1. [Amazon SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker/)에 로그인합니다.

1. **Studio Classic 열기**를 선택합니다.

1. **앱 시작(Launch app)**을 선택합니다.

1. **Studio**를 선택합니다.

1. 데이터 흐름을 지정합니다.

1. 변환이 있는 단계를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **카테고리 인코딩(Encode categorical)**을 선택합니다.

1. 다음을 지정합니다.
   + **변환(Transform)** - **유사성 인코딩**
   + **입력 열(Input column)** - 인코딩할 카테고리 데이터가 포함된 열.
   + **대상 차원(Target dimension)** - (선택 사항) 카테고리 임베딩 벡터의 차원. 기본값은 30입니다. 다중 범주를 포함한 대형 데이터세트인 경우, 더 큰 대상 차원을 사용할 것을 권장합니다.
   + **출력 스타일(Output style)** - 인코딩된 값이 모두 있는 단일 벡터인 경우 **벡터(Vector)** 선택. 인코딩된 값을 별도 열에 표시하려면 **열(Column)**을 선택합니다.
   + **출력 열(Output column)** - (선택 사항) 벡터로 인코딩된 출력의 출력 열 이름. 열로 인코딩된 출력의 경우 열 이름 접두사 뒤에 나열된 번호가 붙습니다.

## 텍스트 특성 추출
<a name="data-wrangler-transform-featurize-text"></a>

**텍스트 특성 추출(Featureize Text)** 변환 그룹으로 문자열 유형 열을 검사하고 텍스트 임베딩으로 이런 열의 특성을 추출할 수 있습니다.

이 특성 그룹에는 문자 통계(Character statistics)와 벡터화(Vectorize)라는 두 가지 특성이 있습니다.**** 다음 섹션을 통해 이런 변환에 대해 자세히 알아보세요. 두 옵션 모두 **입력 열(Input column)**에 텍스트 데이터(문자열 유형)가 포함되어야 합니다.

### 문자 통계
<a name="data-wrangler-transform-featurize-text-character-stats"></a>

**문자 통계(Character statistics)**로 텍스트 데이터가 포함된 열의 각 행에 대한 통계를 생성할 수 있습니다.

이 변환은 각 행에 대해 다음과 같은 비율과 개수를 계산하고 결과를 보고하는 새 열을 생성합니다. 새 열의 이름은 입력 열 이름을 접두사로, 비율 또는 개수를 접미사로 하여 명명됩니다.
+ **단어 수(Number of words)**: 행에 있는 총 단어 수. 이 출력 열의 접미사는 `-stats_word_count`.
+ **문자 수(Number of characters)**: 행에 있는 총 문자 수. 이 출력 열의 접미사는 `-stats_char_count`.
+ **대문자 비율(Ratio of upper)**: A부터 Z까지의 대문자 수를 열의 모든 문자로 나눈 값. 이 출력 열의 접미사는 `-stats_capital_ratio`.
+ **소문자 비율(Ratio of lowerr)**: a부터 z까지의 소문자 수를 열의 모든 문자로 나눈 값. 이 출력 열의 접미사는 `-stats_lower_ratio`.
+ **자릿수 비율**: 입력 열의 자릿수 합계에 대한 단일 행 자릿수 비율. 이 출력 열의 접미사는 `-stats_digit_ratio`.
+ **특수 문자 비율**: 입력 열에 있는 모든 문자의 합계에 대한 영숫자를 제외한 문자(예: \$1\$1&%:@) 의 비율. 이 출력 열의 접미사는 `-stats_special_ratio`.

### 벡터화
<a name="data-wrangler-transform-featurize-text-vectorize"></a>

텍스트 임베딩에는 어휘의 단어 또는 구문을 실수 벡터로 매핑하는 작업이 포함됩니다. Data Wrangler 텍스트 임베딩 변환으로 텍스트 데이터를 단어 빈도-역 문서 빈도(TF-IDF) 벡터로 토큰화하고 벡터화할 수 있습니다.

텍스트 데이터 열에 대한 TF-IDF를 계산할 때, 개별 문장의 각 단어는 의미론적 중요성을 나타내는 실수로 변환됩니다. 숫자가 높을수록 단어 빈도가 낮고 보다 유의미한 경향이 있습니다.

**벡터화** 변환 단계를 정의할 때, Data Wrangler는 데이터세트에 있는 데이터로 개수 벡터라이저및 TF-IDF 메서드를 정의합니다. Data Wrangler 작업을 실행할 때도 이와 동일한 메서드를 사용합니다.

다음과 같이 변환을 구성합니다.
+ **출력 열 이름(Output column name)**: 이 변환은 텍스트 임베딩이 포함된 새 열을 생성합니다. 이 필드로 출력 열 이름을 지정합니다.
+ **토크나이저**: 토크나이저는 문장을 단어 목록 또는 토큰으로 변환합니다.**

  **표준(Standard)**을 선택하여 공백으로 분할하고 각 단어를 소문자로 변환하는 토크나이저를 적용합니다. 예를 들어, `"Good dog"`은(는) `["good","dog"]`(으)로 토큰화됩니다.

  **사용자 지정(Custom)**을 선택하여 사용자 지정 토크나이저를 적용합니다. **사용자 지정**을 선택하면 사용자는 다음 필드로 토크나이저를 구성할 수 있습니다.
  + **최소 토큰 길이(Minimum token length)**: 토큰이 효력을 갖기 위한 최소 길이(문자). 기본값은 `1`입니다. 예를 들어, 최소 토큰 길이를 `3`(으)로 지정하면, 토큰화된 문장에서 `a, at, in`와 같은 단어가 삭제됩니다.
  + **격차 발생 시 분할 Regex(Should regex split on gaps)**: 선택 시, 격차가 발생하면 분할 **Regex**. 선택하지 않으면 토큰과 일치시킵니다. 기본값은 `True`입니다.
  + **Regex 패턴(Regex pattern)**: 토큰화 프로세스를 정의하는 Regex 패턴. 기본값은 `' \\ s+'`입니다.
  + **소문자로(To lowercase)**: 선택 시, Data Wrangler가 토큰화 전에 모든 문자를 소문자로 변환. 기본값은 `True`입니다.

  자세한 내용은 [Tokenizer](https://spark.apache.org/docs/latest/ml-features#tokenizer)에 대한 Spark 설명서를 참조하세요.
+ **벡터라이저(Vectorizer)**: 벡터라이저는 토큰 목록을 희소 숫자 벡터로 변환. 각 토큰은 벡터의 인덱스에 해당하고 0이 아닌 값은 입력 문장에 토큰이 있음을 나타냅니다. 사용자는 개수(Count) 및 해싱(Hashing) 벡터라이저 중에서 선택할 수 있습니다.****
  + **개수 백터화(Count Vectorize)**로 자주 사용하지 않거나 지나치게 일반적인 토큰을 사용자 지정 필터링할 수 있습니다. **개수 벡터화 파라미터(Count vectorize parameters)**에는 다음이 포함됩니다.
    + **최소 용어 빈도(Minimum term frequency)**: 각 행에서 빈도가 낮은 용어(토큰) 필터링. 정수로 지정하면 절대 임곗값(포함)이 됩니다. 0(포함)에서 1 사이의 분수로 지정하면 임곗값은 총 용어 수에 비례합니다. 기본값은 `1`입니다.
    + **최소 문서 빈도(Minimum document frequency)**: 용어(토큰)가 포함된 것으로 보이는 최소 행 개수. 정수로 지정하면 절대 임곗값(포함)이 됩니다. 0(포함)에서 1 사이의 분수로 지정하면 임곗값은 총 용어 수에 비례합니다. 기본값은 `1`입니다.
    + **최대 문서 빈도(Maximum document frequency)**: 용어(토큰)가 포함된 것으로 보이는 문서(행)의 최대 수. 정수로 지정하면 절대 임곗값(포함)이 됩니다. 0(포함)에서 1 사이의 분수로 지정하면 임곗값은 총 용어 수에 비례합니다. 기본값은 `0.999`입니다.
    + **최대 어휘 크기(Maximum vocabulary size)**: 어휘의 최대 크기. 어휘는 열의 모든 행에 있는 모든 용어(토큰)로 구성됩니다. 기본값은 `262144`입니다.
    + **바이너리 출력(Binary outputs)**: 선택 시, 벡터 출력에 문서에 나타나는 용어의 개수가 포함되지 않고 용어의 출현 여부가 바이너리 표시자로 표시됩니다. 기본값은 `False`입니다.

    이 옵션에 대한 자세한 내용은 [CountVectorizer](https://spark.apache.org/docs/latest/ml-features#countvectorizer)에 대한 Spark 설명서를 참조하세요.
  + **해싱(Hashing)**은 연산 속도가 더 빠릅니다. **해시 벡터화 파라미터(Hash vectorize parameters)**에는 다음이 포함됩니다.
    + **해싱 중 특성 수(Number of features during hashing)**: 해시 벡터라이저는 해시 값에 따라 토큰을 벡터 인덱스에 매핑합니다. 이 기능은 가능한 해시 값의 수를 결정합니다. 값이 크면 해시 값 간의 충돌은 줄어들지만 출력 벡터의 차원은 커집니다.

    이 옵션에 대한 자세한 내용은 [FeatureHasher](https://spark.apache.org/docs/latest/ml-features#featurehasher)에 대한 Spark 설명서를 참조하세요.
+ **IDF 적용(Apply IDF)**은 주파수라는 용어에 TF-IDF 임베딩에 사용되는 표준 역 문서 빈도를 곱하는 IDF 변환을 적용합니다. **IDF 파라미터(IDF parameters)**에는 다음이 포함됩니다.
  + **최소 문서 빈도(Minimum document frequency)**: 용어(토큰)가 포함된 것으로 보이는 최소 문서 개수. **count\$1vectorize**를 벡터라이저로 선택한 경우, 기본값을 유지하되 **min\$1doc\$1freq** 필드(**개수 벡터화 파라미터(Count vectorize parameters)** 내)만 수정할 것을 권장합니다. 기본값은 `5`입니다.
+ **출력 형식(Output format)**: 각 행의 출력 형식.
  + **벡터(Vector)**를 선택하여 희소 벡터가 있는 단일 열을 생성합니다.
  + **평탄화(Flattened)**을 선택하여 원래 열의 텍스트에 해당 범주와 동일한 값이 포함되어 있는지 여부를 나타내는 표시기기 변수로 모든 범주에 대한 열을 생성합니다. 사용자는 **벡터라이저(Vectorizer)**를 **개수 벡터라이저(Count vectorizer)**로 설정했을 때만 평탄화를 선택할 수 있습니다.

## 시계열 변환
<a name="data-wrangler-transform-time-series"></a>

Data Wrangler에서 사용자는 시계열 데이터를 변환할 수 있습니다. 시계열 데이터세트 값은 특정 시간을 기준으로 인덱싱됩니다. 예를 들어, 하루 매시간 매장 내 고객 수를 보여주는 데이터세트는 시계열 데이터세트입니다. 다음 테이블에는 시계열 데이터세트의 예시가 있습니다.

매장 내 시간당 고객 수


| 고객 수 | 시간(시간) | 
| --- | --- | 
| 4 | 09:00 | 
| 10 | 10:00 | 
| 14 | 11:00 | 
| 25 | 12:00 | 
| 20 | 13:00 | 
| 18 | 14:00 | 

이전 테이블의 **고객 수(Number of Customers)** 열에는 시계열 데이터가 포함되어 있습니다. 시계열 데이터는 **시간(Time(hour))** 열의 시간별 데이터를 기반으로 인덱싱됩니다.

사용자가 분석에 사용할 수 있는 형식으로 데이터를 가져오려면 데이터를 여러 번 변환해야 할 수 있습니다. **시계열(Time series)** 변환 그룹으로 시계열 데이터를 변환할 수 있습니다. 사용자가 수행할 수 있는 변환에 대한 추가 정보는 다음 섹션에서 확인하세요.

**Topics**
+ [시계열 기준 그룹화](#data-wrangler-group-by-time-series)
+ [시계열 데이터 리샘플링](#data-wrangler-resample-time-series)
+ [누락된 시계열 데이터 처리](#data-wrangler-transform-handle-missing-time-series)
+ [시계열 데이터의 타임스탬프 검증](#data-wrangler-transform-validate-timestamp)
+ [시계열 길이 표준화](#data-wrangler-transform-standardize-length)
+ [시계열 데이터에서 특성 추출하기](#data-wrangler-transform-extract-time-series-features)
+ [시계열 데이터에서 시차 특성 적용하기](#data-wrangler-transform-lag-time-series)
+ [시계열에 Datetime 범위 생성하기](#data-wrangler-transform-datetime-range)
+ [시계열에 이동 기간 적용하기](#data-wrangler-transform-rolling-window)

### 시계열 기준 그룹화
<a name="data-wrangler-group-by-time-series"></a>

사용자는 연산 기준 그룹화로 열의 특정 값에 대한 시계열 데이터를 그룹화할 수 있습니다.

예를 들어, 다음 테이블은 일 평균 세대당 전기 사용량을 추적합니다.

일 평균 세대당 전기 사용량


| 세대 ID | 일별 타임스탬프 | 전기 사용량(kWh) | 세대당 거주자 수 | 
| --- | --- | --- | --- | 
| household\$10 | 1/1/2020 | 30 | 2 | 
| household\$10 | 1/2/2020 | 40 | 2 | 
| household\$10 | 1/4/2020 | 35 | 3 | 
| household\$11 | 1/2/2020 | 45 | 3 | 
| household\$11 | 1/3/2020 | 55 | 4 | 

ID별 그룹화를 선택하면 다음 테이블이 표시됩니다.

세대 ID별로 그룹화된 전기 사용량


| 세대 ID | 전기 사용량 시리즈(kWh) | 세대당 거주자 수 시리즈 | 
| --- | --- | --- | 
| household\$10 | [30, 40, 35] | [2, 2, 3] | 
| household\$11 | [45, 55] | [3, 4] | 

시계열 시퀀스의 각 항목은 상응하는 타임스탬프를 기준으로 정렬됩니다. 시퀀스의 첫 번째 요소는 시리즈의 첫 번째 타임스탬프와 상응합니다. `household_0`의 경우, `30`이(가) **전기 사용량 시리즈**의 첫 번째 값입니다. `30` 값은 `1/1/2020`의 첫 번째 타임스탬프와 상응합니다.

사용자는 시작 타임스탬프와 종료 타임스탬프를 포함할 수 있습니다. 다음 테이블에서 정보 표시 방식을 볼 수 있습니다.

세대 ID별로 그룹화된 전기 사용량


| 세대 ID | 전기 사용량 시리즈(kWh) | 세대당 거주자 수 시리즈 | Start\$1time | End\$1time | 
| --- | --- | --- | --- | --- | 
| household\$10 | [30, 40, 35] | [2, 2, 3] | 1/1/2020 | 1/4/2020 | 
| household\$11 | [45, 55] | [3, 4] | 1/2/2020 | 1/3/2020 | 

사용자는 다음 절차에 따라 시계열 열을 기준으로 그룹화할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **시계열(Time Series)**을 선택합니다.

1. **변환(Transform)** 아래에 있는 **그룹화 기준(Group by)**을 선택합니다.

1. **이 열을 기준으로 그룹화(Group by this column)**에서 열을 지정합니다.

1. **열에 적용(Apply to columns)**에서 값을 지정합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열 데이터 리샘플링
<a name="data-wrangler-resample-time-series"></a>

시계열 데이터에는 일반적으로 일정 간격으로 수집되지 않는 관측치가 있습니다. 예를 들어, 데이터세트에 매시간 기록되는 관측치와 2시간마다 기록되는 관측치가 있을 수 있습니다.

예측 알고리즘과 같은 많은 분석에서는 일정 간격으로 관측치를 수집해야 합니다. 리샘플링을 통해 데이터세트의 관측 간격을 일정하게 정할 수 있습니다.

사용자는 시계열을 업샘플링하거나 다운샘플링할 수 있습니다. 다운샘플링은 데이터세트의 관측 간격을 늘립니다. 예를 들어, 1시간 또는 2시간마다 실시되던 관측을 다운샘플링하면 데이터세트의 각 관측치를 2시간마다 추출합니다. 평균, 중앙값 등의 집계 메서드를 적용하여 시간별 관측치를 단일 값으로 집계합니다.

업샘플링은 데이터세트의 관측 간격이 줄입니다. 예를 들어, 2시간마다 수집되던 관측치를 시간별로 업샘플링하는 경우 사용자는 보간 메서드를 적용하여 2시간마다 수행된 관측치에서 시간별 관측치를 유추할 수 있습니다. 보간 메서드에 대한 자세한 정보는 [pandas.DataFrame.interpolate](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html)에서 확인하세요.

사용자는 숫자 및 비 숫자 데이터를 모두 리샘플링할 수 있습니다.

**리샘플링(Resample)** 연산으로 시계열 데이터를 리샘플링할수 있습니다. 데이터세트에 여러 시계열이 있는 경우, Data Wrangler는 각 시계열의 시간 간격을 표준화합니다.

다음 테이블에서는 평균을 집계 메서드로 사용하여 시계열 데이터를 다운샘플링하는 예제를 볼 수 있습니다. 데이터는 2시간 간격에서 1시간 간격으로 다운샘플링됩니다.

다운샘플링 전 하루의 시간당 온도 측정값


| 타임스탬프 | 온도(섭씨) | 
| --- | --- | 
| 12:00 | 30 | 
| 1:00 | 32 | 
| 2:00 | 35 | 
| 3:00 | 32 | 
| 4:00 | 30 | 

온도 측정값을 2시간 간격으로 다운샘플링


| 타임스탬프 | 온도(섭씨) | 
| --- | --- | 
| 12:00 | 30 | 
| 2:00 | 33.5 | 
| 4:00 | 35 | 

사용자는 다음 절차에 따라 시계열 데이터를 리샘플링할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **리샘플링(Resample)**을 선택합니다.

1. **타임스탬프(Timestamp)**에서 타임스탬프 열을 선택합니다.

1. **빈도 단위(Frequency unit)**에서 리샘플링할 빈도를 지정합니다.

1. (선택 사항) **빈도 수량(Frequency quantity)** 값을 지정합니다.

1. 나머지 필드를 지정하여 변환을 구성합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 누락된 시계열 데이터 처리
<a name="data-wrangler-transform-handle-missing-time-series"></a>

데이터세트에 누락된 값이 있는 경우 사용자는 다음 중 하나를 수행할 수 있습니다.
+ 시계열이 여러 개 있는 데이터세트인 경우, 지정한 임곗값보다 큰 누락된 값이 있는 시계열을 삭제합니다.
+ 시계열의 다른 값을 사용하여 시계열의 누락된 값을 산입합니다.

누락된 값을 산입하려면 값을 지정하거나 추론 메서드를 통해 데이터를 바꿔야 합니다. 사용자가 산입 시 사용할 수 있는 메서드는 다음과 같습니다.
+ 상수 값 - 데이터세트에서 누락된 데이터를 모두 지정한 값으로 바꿉니다.
+ 가장 일반적인 값 - 모든 누락된 데이터를 데이터세트에서 빈도가 가장 높은 값으로 바꿉니다.
+ 이전 값으로 채우기 - 이전 값으로 채우기를 적용하면 누락된 값을 누락된 값 이전의 누락되지 않은 값으로 바꿉니다. 시퀀스가 [2, 4, 7, NaN, NaN, NaN, 8]인 경우, 모든 누락된 값이 7로 바뀝니다. 이전 값으로 채우기를 적용한 시퀀스는 [2, 4, 7, 7, 7, 7, 8]이 됩니다.
+ 이후 값으로 채우기 - 이후 값으로 채우기를 적용하면 누락된 값을 누락된 값 이후의 누락되지 않은 값으로 바꿉니다. 시퀀스가 [2, 4, 7, NaN, NaN, NaN, 8]인 경우, 모든 누락된 값이 8로 바뀝니다. 이후 값으로 채우기를 적용한 시퀀스는 [2, 4, 7, 8, 8, 8, 8]이 됩니다.
+ 보간 - 보간 함수를 적용하여 누락된 값을 산입합니다. 사용자가 보간 시 사용할 수 있는 함수에 대한 자세한 정보는 [pandas.DataFrame.interpolate](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html)에서 확인하세요.

일부 산입 메서드로는 데이터세트에서 누락된 값을 모두 산입하지 못할 수도 있습니다. 예를 들어, **이전 값으로 채우기**로는 시계열 시작 부분에 나타나는 누락된 값을 산입할 수 없습니다. 해당 값은 이전 값으로 채우기 또는 이후 값으로 채우기로 산입할 수 있습니다.

사용자는 셀이나 열에서 누락된 값을 산입할 수 있습니다.

다음 예제에서 셀에 값이 산입되는 방식을 볼 수 있습니다.

누락된 값이 있는 전기 사용량


| 세대 ID | 전기 사용량 시리즈(kWh) | 
| --- | --- | 
| household\$10 | [30, 40, 35, NaN, NaN] | 
| household\$11 | [45, NaN, 55] | 

이전 값으로 채우기로 값을 산입한 전기 사용량


| 세대 ID | 전기 사용량 시리즈(kWh) | 
| --- | --- | 
| household\$10 | [30, 40, 35, 35, 35] | 
| household\$11 | [45, 45, 55] | 

다음 예제에서 열에 값이 산입되는 방식을 볼 수 있습니다.

누락된 값이 있는 일 평균 세대당 전기 사용량


| 세대 ID | 전기 사용량(kWh) | 
| --- | --- | 
| household\$10 | 30 | 
| household\$10 | 40 | 
| household\$10 | NaN | 
| household\$11 | NaN | 
| household\$11 | NaN | 

이전 값으로 채우기로 값을 산입한 일 평균 세대당 전기 사용량


| 세대 ID | 전기 사용량(kWh) | 
| --- | --- | 
| household\$10 | 30 | 
| household\$10 | 40 | 
| household\$10 | 40 | 
| household\$11 | 40 | 
| household\$11 | 40 | 

사용자는 다음 절차에 따라 누락된 값을 처리할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **누락 처리(Handle missing)**를 선택합니다.

1. **시계열 입력 유형(Time series input type)**에서 누락된 값을 셀 안에서 처리 또는 열과 함께 처리 여부를 선택합니다.

1. **이 열의 누락된 값 산입(Impute missing values for this column)**에서 누락된 값이 있는 열을 지정합니다.

1. **값 산입 메서드(Method for imputing values)**에서 방법을 선택합니다.

1. 나머지 필드를 지정하여 변환을 구성합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. 누락된 값이 있는 경우, 사용자는 **값 산입 메서드(Method for imputing values)**에서 산입 메서드를 지정할 수 있습니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열 데이터의 타임스탬프 검증
<a name="data-wrangler-transform-validate-timestamp"></a>

유효하지 않은 타임스탬프 데이터가 있을 수 있습니다. 사용자는 **타임스탬프 검증(Validate time stamp)** 함수로 데이터세트의 타임스탬프가 유효한지 확인할 수 있습니다. 타임스탬프는 다음 중 하나 이상의 이유로 유효하지 않을 수 있습니다.
+ 타임스탬프 열에 누락된 값이 있음.
+ 타임스탬프 열의 값 형식이 올바르지 않음.

데이터세트에 유효하지 않은 타임스탬프가 있는 경우, 정상적으로 분석을 수행할 수 없습니다. 사용자는 Data Wrangler로 유효하지 않은 타임스탬프를 식별하고 데이터 정리가 필요한 위치를 파악할 수 있습니다.

다음 두 가지 중 한 가지 방법으로 시계열을 검증할 수 있습니다.

사용자는 데이터세트에서 누락된 값이 발견될 경우 다음 중 하나를 수행하도록 Data Wrangler를 구성할 수 있습니다.
+ 누락되거나 유효하지 않은 값이 있는 행을 삭제합니다.
+ 누락되거나 유효하지 않은 값이 있는 행을 식별합니다.
+ 데이터세트에서 누락되거나 유효하지 않은 값을 발견하면 오류가 발생하게 합니다.

사용자는 `timestamp` 유형이나 `string` 유형이 있는 열의 타임스탬프를 검증할 수 있습니다. 열에 `string` 유형이 있는 경우, Data Wrangler는 열 유형을 `timestamp`(으)로 변환하고 검증을 수행합니다.

사용자는 다음 절차에 따라 데이터세트의 타임스탬프를 검증할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **타임스탬프 검증(Validate timestamps)**을 선택합니다.

1. **타임스탬프 열(Timestamp Column)**에서 타임스탬프 열을 선택합니다.

1. **정책(Policy)**에서 누락된 타임스탬프의 처리 여부를 선택합니다.

1. (선택 사항) **출력 열(Output column)**에 출력 열 이름을 지정합니다.

1. Datetime 열 형식이 문자열 유형인 경우, **Datetime으로 캐스팅(Cast to datetime)**을 선택합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열 길이 표준화
<a name="data-wrangler-transform-standardize-length"></a>

시계열 데이터를 배열로 저장한 경우, 사용자는 개별 시계열을 동일한 길이로 표준화할 수 있습니다. 시계열 배열 길이를 표준화하면 데이터 분석을 더 쉽게 수행할 수 있습니다.

사용자는 데이터 길이 고정이 필요한 데이터 변환에 맞게 시계열을 표준화할 수 있습니다.

여러 ML 알고리즘을 사용하려면 먼저 시계열 데이터를 평탄화해야 합니다. 시계열 데이터 평탄화는 시계열의 각 값을 데이터세트의 자체 열로 분리하는 것입니다. 데이터세트의 열 수는 변경할 수 없으므로, 각 배열을 특성 세트로 평탄화하는 사이에 시계열 길이를 표준화해야 합니다.

각 시계열은 시계열 세트의 분위수 또는 백분위수로 지정한 길이로 설정됩니다. 예를 들어, 사용자는 길이가 다음과 같은 세 개의 시퀀스가 있을 수 있습니다.
+ 3
+ 4
+ 5

사용자는 전체 시퀀스 길이를 50번째 백분위수 길이를 갖는 시퀀스의 길이로 설정할 수 있습니다.

지정한 길이보다 짧은 시계열 배열에는 누락된 값이 추가됩니다. 다음은 시계열을 더 긴 길이로 표준화하는 예제 형식입니다. [2, 4, 5, NaN, NaN, NaN].

누락된 값을 처리하는 방법은 다양합니다. 변경 방법에 대한 정보는 [누락된 시계열 데이터 처리](#data-wrangler-transform-handle-missing-time-series)에서 확인하세요.

지정한 길이보다 긴 시계열 배열은 잘립니다.

사용자는 다음 절차에 따라 시계열 길이를 표준화할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **길이 표준화(Standardize length)**를 선택합니다.

1. **열의 시계열 길이 표준화(Standardize the time series length for the column)**에서 열을 선택합니다.

1. (선택 사항) **출력 열(Output column)**에 출력 열 이름을 지정합니다. 이름을 지정하지 않으면 현재 위치에서 변환이 실시됩니다.

1. Datetime 열 형식이 문자열 유형인 경우, **Datetime으로 캐스팅(Cast to datetime)**을 선택합니다.

1. **컷오프 분위수(Cutoff quantile)**를 선택하고 분위수를 지정하여 시퀀스 길이를 설정합니다.

1. **출력 평탄화(Flatten the output)**를 선택하여 시계열 값을 별도 열로 출력합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열 데이터에서 특성 추출하기
<a name="data-wrangler-transform-extract-time-series-features"></a>

시계열 데이터에 대해 분류 또는 회귀 알고리즘을 실행하는 경우, 알고리즘 실행 전 시계열에서 특성을 추출할 것을 권장합니다. 특성을 추출하면 알고리즘 성능이 향상될 수 있습니다.

다음 옵션으로 데이터에서 특성을 추출하는 방법을 선택합니다.
+ **최소 하위 집합(Minimal subset)**으로 다운스트림 분석에 유용한 것으로 알고 있는 8가지 특징을 추출하도록 지정합니다. 신속한 컴퓨팅이 필요한 경우 사용자는 최소 하위 집합을 적용할 수 있습니다. 또한 ML 알고리즘이 과적합될 위험이 높고 더 적은 특성을 제공하려는 경우에도 적용할 수 있습니다.
+ **효율적인 하위 집합(Efficient subset)**으로 분석 시 컴퓨팅 집약적인 특성을 추출하지 않고 가능한 많은 특성을 추출하도록 지정합니다.
+ **전체 특성(All features)**으로 tune 시리즈에서 전체 특성을 추출하도록 지정합니다.
+ **수동 하위 집합(Manual subset)**으로 데이터 원천 내 변동을 설명한다고 판단되는 특성 목록을 선택합니다.

다음 절차에 따라 시계열 데이터에서 특성을 추출합니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **특성 추출(Extract Features)**을 선택합니다.

1. **이 열에서 특성 추출(Extract features for this column)**에서 열을 선택합니다.

1. (선택 사항) **평탄화(Flatten)**를 선택하여 특성을 별도 열로 출력합니다.

1. **전략(Strategy)**에서 특성을 추출할 전략을 선택합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열 데이터에서 시차 특성 적용하기
<a name="data-wrangler-transform-lag-time-series"></a>

여러 사용 사례에서 시계열의 미래 동작을 예측하는 가장 좋은 방법은 시계열의 최신 동작을 사용하는 것입니다.

시차 특성의 가장 일반적인 용도는 다음과 같습니다.
+ 소수의 과거 값 수집. 예를 들어, 시간이 t\$11인 경우 t, t-1, t-2, t-3을 수집합니다.
+ 데이터의 계절적 작동에 해당하는 값 수집. 예를 들어, 식당의 오후 1시 인원을 예측하려면 전날 오후 1시의 특성을 적용하는 것이 좋습니다. 같은 날 오후 12시 또는 오전 11시 이후의 특성을 적용하면 전날의 특성을 적용하는 것에 비해 예측이 정확하지 않을 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **시차 특성(Lag features)**을 선택합니다.

1. **이 열에서 시차 특성 생성(Generate lag features for this column)**에서 열을 선택합니다.

1. **타임스탬프 열(Timestamp Column)**에서 타임스탬프를 포함한 열을 선택합니다.

1. **시차(Lag)**에서 시차를 지정합니다.

1. (선택 사항) 다음 옵션 중 하나로 출력을 구성합니다.
   + **전체 시차 기간 포함(Include the entire lag window)**
   + **출력 평탄화(Flatten the output)**
   + **Drop rows without history(이력 없는 행 삭제)**

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열에 Datetime 범위 생성하기
<a name="data-wrangler-transform-datetime-range"></a>

타임스탬프가 없는 시계열 데이터가 있을 수 있습니다. 일정한 간격으로 관측이 수행되었음을 알고 있는 경우, 사용자는 시계열 타임스탬프를 별도 열에 생성할 수 있습니다. 타임스탬프를 생성하려면 시작 타임스탬프 값과 타임스탬프 빈도를 지정합니다.

예를 들어, 식당 고객 수에 대한 다음과 같은 시계열 데이터가 있을 수 있습니다.

식당 고객 수에 대한 시계열 데이터


| 고객 수 | 
| --- | 
| 10 | 
| 14 | 
| 24 | 
| 40 | 
| 30 | 
| 20 | 

식당이 오후 5시에 문을 열었고 매시간마다 관측을 했음을 알고 있는 경우, 사용자는 시계열 데이터에 해당하는 타임스탬프 열을 추가할 수 있습니다. 사용자는 다음 테이블에서 타임스탬프 열을 볼 수 있습니다.

식당 고객 수에 대한 시계열 데이터


| 고객 수 | 타임스탬프 | 
| --- | --- | 
| 10 | 1:00 PM | 
| 14 | 2:00 PM | 
| 24 | 3:00 PM | 
| 40 | 4:00 PM | 
| 30 | 5:00 PM | 
| 20 | 6:00 PM | 

다음 절차에 따라 데이터에 Datetime 범위를 추가합니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **Datetime 범위(Datetime range)**를 선택합니다.

1. **빈도 유형(Frequency type)**에서 타임스탬프 빈도 측정 단위를 선택합니다.

1. **시작 타임스탬프(Starting timestamp)**에 시작 타임스탬프를 지정합니다.

1. **출력 열(Output column)**에 출력 열 이름을 지정합니다.

1. (선택 사항) 나머지 필드를 사용하여 출력을 구성합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

### 시계열에 이동 기간 적용하기
<a name="data-wrangler-transform-rolling-window"></a>

사용자는 일정 기간 동안 특성을 추출할 수 있습니다. 예를 들어, 시간 *t*, 기간 길이 3, *t*번째 타임스탬프를 나타내는 행이 있는 경우, 시계열에서 추출된 특성을 시간 *t*-3, *t*-2, *t*-1에 추가합니다. 특성 추출에 대한 정보는 [시계열 데이터에서 특성 추출하기](#data-wrangler-transform-extract-time-series-features)에서 확인하세요.

사용자는 다음 절차에 따라 일정 기간 동안 특성을 추출할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터세트를 가져오지 않았다면 **데이터 가져오기(Import data)** 탭에서 가져옵니다.

1. 데이터 흐름의 **데이터 유형(Data types)**에서 **\$1**를 선택하고 **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **이동 기간 특성(Rolling window features)**을 선택합니다.

1. **이 열에서 이동 기간 특성 생성(Generate rolling window features for this column)**에서 열을 선택합니다.

1. **타임스탬프 열(Timestamp Column)**에서 타임스탬프를 포함한 열을 선택합니다.

1. (선택 사항) **출력 열(Output column)**에 출력 열 이름을 지정합니다.

1. **윈도우 크기(Window size)**에 윈도우 크기를 지정합니다.

1. **전략(Strategy)**에서 추출 전략을 선택합니다.

1. **미리 보기(Preview)**를 선택하여 변환 미리 보기를 생성합니다.

1. **추가(Add)**를 선택하여 변환을 Data Wrangler 데이터 흐름에 추가합니다.

## Datetime 특성 추출
<a name="data-wrangler-transform-datetime-embed"></a>

**Datetime 특성 추출(Featurize date/time)**로 Datetime 필드를 나타내는 벡터 임베딩을 생성합니다. 이 변환을 사용하려면 Datetime 데이터가 다음 형식 중 하나여야 합니다.
+ Datetime 설명 문자열: 예: `"January 1st, 2020, 12:44pm"` 
+ Unix 타임스탬프: Unix 타임스탬프는 1970년 1월 1일 이후의 초, 밀리초, 마이크로초 또는 나노초 수를 나타냅니다.

사용자는 **Datetime 형식 추론(Infer datetime format)**을 선택하고 **Datetime 형식(Datetime format)**을 입력할 수 있습니다. Datetime 형식 입력 시 먼저 [Python 설명서](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)에 있는 코드를 사용해야 합니다. 이 두 구성에 대해 선택하는 옵션은 연산 속도와 최종 결과에 영향을 미칩니다.
+ 가장 수동적이고 컴퓨팅 속도가 빠른 옵션은 **Datetime 형식**을 지정하고 **아니요(No)**를 **Datetime 형식 추론**에서 선택하는 것입니다.
+ 수작업을 줄이려면 **Datetime 형식 추론**을 선택하고 Datetime 형식을 지정하지 않으면 됩니다. 역시 컴퓨팅 속도가 빠른 연산이지만, 입력 열에서 처음 접하는 Datetime 형식이 전체 열의 형식으로 간주됩니다. 열에 다른 형식이 있는 경우, 최종 출력에서 NaN 값이 됩니다. Datetime 형식을 추론하면 구문 분석되지 않은 문자열을 얻을 수 있습니다.
+ 형식을 지정하지 않고 **아니요**를 **Datetime 형식 추론**에서 선택하면 가장 강건한 결과를 얻게 됩니다. 모든 유효한 Datetime 문자열이 구문 분석됩니다. 그러나 이 연산은 이 목록의 첫 두 옵션에 비해 훨씬 느릴 수 있습니다.

이 변환을 적용할 때는 위에 나열된 형식 중 하나로 된 Datetime 데이터를 포함하는 **입력 열(Input column)**을 지정합니다. 변환 시 **출력 열 이름(Output column name)**이라는 출력 열이 생성됩니다. 출력 열 형식은 다음을 적용하는 구성에 따라 달라집니다.
+ **벡터(Vector)**: 단일 열을 벡터로 출력.
+ **열(Columns)**: 모든 특성에 대해 새 열 생성. 예를 들어, 출력에 년, 월, 일이 포함된 경우, 년, 월, 일에 대한 별도의 열 세 개가 생성됩니다.

또한 먼저 **임베딩 모드(Embedding mode)**를 선택해야 합니다. 선형 모델 및 심층망의 경우, **순환형(cyclic)**을 선택할 것을 권장합니다. 트리 기반 알고리즘의 경우, **순서형(ordinal)**을 선택할 것을 권장합니다.

## 문자열 형식 지정하기
<a name="data-wrangler-transform-format-string"></a>

**문자열 형식 지정(Format string)** 변환에는 표준 문자열 형식 지정 연산이 포함됩니다. 예를 들어, 사용자는 이 연산으로 특수 문자를 제거하고, 문자열 길이를 정상화하고, 문자열 대소문자를 업데이트할 수 있습니다.

이 특성 그룹에는 다음과 같은 변환이 포함됩니다. 모든 변환은 문자열 사본을 **입력 열**에 반환하고 결과를 새 출력 열에 추가합니다.


| 이름 | 함수 | 
| --- | --- | 
| 왼쪽부터 채우기 |  주어진 **채우기 문자(Fill character)**로 주어진 **너비(width)**까지 문자열을 왼쪽부터 채웁니다. 문자열이 **너비**보다 길면 반환 값이 **너비** 문자로 단축됩니다.  | 
| 오른쪽부터 채우기 |  주어진 **채우기 문자**로 주어진 **너비**까지 문자열을 오른쪽부터 채웁니다. 문자열이 **너비**보다 길면 반환 값이 **너비** 문자로 단축됩니다.  | 
| 가운데(양쪽에서 채우기) |  주어진 **채우기 문자**로 주어진 **너비**까지 문자열을 가운데 채우기(문자열 양쪽에서 추가)합니다. 문자열이 **너비**보다 길면 반환 값이 **너비** 문자로 단축됩니다.  | 
| 앞에 0 추가 |  숫자 문자열을 주어진 **너비**까지 왼쪽부터 0으로 채웁니다. 문자열이 **너비**보다 길면 반환 값이 **너비** 문자로 단축됩니다.  | 
| 왼쪽 및 오른쪽 제거 |  선행 및 후행 문자가 제거된 문자열 사본을 반환합니다.  | 
| 왼쪽부터 문자 제거 |  선행 문자가 제거된 문자열 사본을 반환합니다.  | 
| 오른쪽부터 문자 제거 |  후행 문자가 제거된 문자열 사본을 반환합니다.  | 
| 소문자 |  텍스트의 모든 문자를 소문자로 변환합니다.  | 
| 대문자 |  텍스트의 모든 문자를 대문자로 변환합니다.  | 
| 첫 글자 대문자 |  문장의 첫 글자를 대문자로 표기합니다.  | 
| 대소문자 전환 | 주어진 문자열의 모든 대문자를 소문자로, 모든 소문자를 대문자로 변환하여 반환합니다. | 
| 접두사 또는 접미사 추가 |  문자열 열에 접두사와 접미사를 추가합니다. 먼저 최소 하나의 **Prefix(접두사)**와 **Suffix(접미사)**를 지정해야 합니다.  | 
| 기호 제거 |  문자열에서 주어진 기호를 제거합니다. 나열된 모든 문자가 제거됩니다. 기본값은 공백입니다.  | 

## 이상치 처리하기
<a name="data-wrangler-transform-handle-outlier"></a>

머신러닝 모델은 특성 값의 분포와 범위에 민감합니다. 이상치, 즉 희귀값은 모델 정확도에 부정적인 영향을 미치고 훈련 시간을 지연지킬 수 있습니다. 이 특성 그룹으로 데이터세트 내 이상치를 감지하고 업데이트할 수 있습니다.

**이상치 처리(Handle outliers)** 변환 단계를 정의하면 Data Wrangler에서 사용할 수 있는 데이터에 대해 이상치를 감지할 때 사용되는 통계가 생성됩니다. Data Wrangler 작업을 실행할 때도 이와 동일한 통계가 사용됩니다.

다음 섹션을 통해 이 그룹에 포함된 변환에 대해 자세히 알아보세요. **출력 이름(Output name)**을 지정하면 개별 변환에서 결과 데이터가 포함된 출력 열이 생성됩니다.

### 강건한 표준 편차 숫자 이상치
<a name="data-wrangler-transform-handle-outlier-rstdev"></a>

이 변환은 이상치에 강한 통계를 사용하여 숫자 특성의 이상치를 감지하고 수정합니다.

먼저 이상치 계산 시 사용되는 통계 **상한 분위수(Upper quantile)**와 **하한 분위수(Lower quantile)**를 정의해야 합니다. 또한 **표준 편차(Standard deviations)** 수를 먼저 지정해야 평균과 다른 값을 이상치로 감지할 수 있습니다. 예를 들어, **표준 편차**로 3을 지정한 경우, 평균에서 3 표준편차 이상 떨어진 값이 이상치로 간주됩니다.

**수정 메서드(Fix method)**는 감지된 이상치를 처리할 때 사용되는 메서드입니다. 사용자는 다음 중에서 선택할 수 있습니다.
+ **클립(Clip)**: 이 옵션으로 이상치를 상응하는 이상치 감지 한도로 클리핑할 수 있습니다.
+ **제거(Remove)**: 데이터 프레임에서 이상치가 있는 행을 제거합니다.
+ **무효화(Invalidate)**: 이상치를 유효하지 않은 값으로 바꿉니다.

### 표준 편차 숫자 이상치
<a name="data-wrangler-transform-handle-outlier-sstdev"></a>

이 변환은 평균과 표준 편차를 사용하여 숫자 특성의 이상치를 감지하고 수정합니다.

**표준 편차** 수를 지정하면 평균과 다른 값을 이상치로 감지할 수 있습니다. 예를 들어, **표준 편차**로 3을 지정한 경우, 평균에서 3 표준편차 이상 떨어진 값이 이상치로 간주됩니다.

**수정 메서드(Fix method)**는 감지된 이상치를 처리할 때 사용되는 메서드입니다. 사용자는 다음 중에서 선택할 수 있습니다.
+ **클립(Clip)**: 이 옵션으로 이상치를 상응하는 이상치 감지 한도로 클리핑할 수 있습니다.
+ **제거(Remove)**: 데이터 프레임에서 이상치가 있는 행을 제거합니다.
+ **무효화(Invalidate)**: 이상치를 유효하지 않은 값으로 바꿉니다.

### 분위수 숫자 이상치
<a name="data-wrangler-transform-handle-outlier-quantile-numeric"></a>

이 변환을 적용하면 분위수를 사용하여 숫자 특성의 이상치를 감지하고 수정합니다. 사용자는 **상한 분위수(Upper quantile)**와 **하한 분위수(Lower quantile)**를 정의할 수 있습니다. 상위 분위수를 초과하거나 하위 분위수에 미달하는 모든 값은 이상치로 간주됩니다.

**수정 메서드(Fix method)**는 감지된 이상치를 처리할 때 사용되는 메서드입니다. 사용자는 다음 중에서 선택할 수 있습니다.
+ **클립(Clip)**: 이 옵션으로 이상치를 상응하는 이상치 감지 한도로 클리핑할 수 있습니다.
+ **제거(Remove)**: 데이터 프레임에서 이상치가 있는 행을 제거합니다.
+ **무효화(Invalidate)**: 이상치를 유효하지 않은 값으로 바꿉니다.

### 최소-최대 숫자 이상치
<a name="data-wrangler-transform-handle-outlier-minmax-numeric"></a>

이 변환은 상한 및 하한 임곗값을 사용하여 숫자 특성의 이상치를 감지하고 수정합니다. 이상치를 나타내는 임곗값을 알고 있는 경우 이 메서드를 적용합니다.

**상한 임곗값(Upper threshold)**과 **하한 임곗값(Lower threshold)**을 지정하고 값이 각각 해당 임곗값보다 높거나 낮으면 이상치로 간주합니다.

**수정 메서드(Fix method)**는 감지된 이상치를 처리할 때 사용되는 메서드입니다. 사용자는 다음 중에서 선택할 수 있습니다.
+ **클립(Clip)**: 이 옵션으로 이상치를 상응하는 이상치 감지 한도로 클리핑할 수 있습니다.
+ **제거(Remove)**: 데이터 프레임에서 이상치가 있는 행을 제거합니다.
+ **무효화(Invalidate)**: 이상치를 유효하지 않은 값으로 바꿉니다.

### 희귀값 바꾸기
<a name="data-wrangler-transform-handle-outlier-replace-rare"></a>

**희귀값 바꾸기(Replace Rare)** 변환을 적용하면 임곗값 지정 시 Data Wrangler가 해당 임곗값을 충족하는 모든 값을 찾아 지정한 문자열로 바꿉니다. 예를 들어, 이 변환을 사용하여 한 열의 모든 이상치를 “기타” 범주로 분류할 수 있습니다.
+ **대체 문자열(Replacement string)**: 이상치를 대체할 문자열.
+ **절대 임곗값(Absolute threshold)**: 인스턴스 수가 이 절대 임곗값보다 작거나 같으면 희귀 범주.
+ **분수 임곗값(Fraction threshold)**: 인스턴스 수가 이 분수 임곗값에 행 수를 곱한 값보다 작거나 같으면 희귀 범주.
+ **최대 일반 범주(Max common categories)**: 연산 후 남아 있는 최대 비 희귀 범주. 임곗값이 필터링하는 범주가 충분하지 않은 경우, 나타나는 횟수가 가장 많은 범주는 희귀하지 않은 것으로 분류됩니다. 0(기본값)으로 설정하면 범주 수가 엄격하게 제한되지 않습니다.

## 누락된 값 처리
<a name="data-wrangler-transform-handle-missing"></a>

누락된 값은 머신러닝 데이터세트에서 흔히 발생합니다. 경우에 따라 누락된 데이터를 평균값이나 카테고리 공통 값과 같은 계산된 값으로 바꾸는 것이 적절할 수 있습니다. 사용자는 누락된 값은 **누락된 값 처리(Handle missing values)** 변환 그룹으로 처리할 수 있습니다. 이 그룹에는 다음과 같은 변환이 포함됩니다.

### 누락 채우기
<a name="data-wrangler-transform-fill-missing"></a>

**누락 채우기(Fill missing)** 변환으로 누락된 값을 정의한 **채우기 값(Fill value)**으로 바꿀 수 있습니다.

### 누락 산입
<a name="data-wrangler-transform-impute"></a>

**누락 산입(Impute missing)** 변환으로 누락된 값이 발견된 입력 카테고리 및 숫자 데이터에 산입 값이 포함된 새 열을 생성합니다. 구성은 데이터 유형에 따라 달라집니다.

숫자 데이터의 경우, 산입할 새 값을 정할 때 사용되는 산입 전략을 선택합니다. 사용자는 데이터세트에 있는 값의 평균이나 중앙값 산입을 선택할 수 있습니다. Data Wrangler는 계산한 값으로 누락된 값을 산입합니다.

카테고리 데이터의 경우, Data Wrangler가 열에서 가장 빈번한 값으로 누락된 값을 산입합니다. 사용자 지정 문자열을 산입하려면 **누락 채우기** 변환을 대신 적용합니다.

### 누락 표시기 추가
<a name="data-wrangler-transform-missing-add-indicator"></a>

**누락 표시기 추가(Add indicator for missing)** 변환으로 새 표시기 열을 생성합니다. 행에 값이 있는 경우 부울 `"false"`이(가) 포함되고, 행에 누락된 값이 있는 경우 `"true"`이(가) 포함됩니다.

### 누락 삭제
<a name="data-wrangler-transform-drop-missing"></a>

**누락 삭제(Drop missing)** 옵션으로 **입력 열(Input column)**에서 누락된 값이 포함된 행을 삭제합니다.

## 열 관리
<a name="data-wrangler-manage-columns"></a>

사용자는 다음 변환으로 데이터세트의 열을 빠르게 업데이트하고 관리할 수 있습니다.


| 이름 | 함수 | 
| --- | --- | 
| 열 삭제 | 열을 삭제합니다. | 
| 열 복제 | 열을 복제합니다. | 
| 열 이름 바꾸기 | 열 이름을 바꿉니다. | 
| 열 이동 |  데이터세트 내 열 위치를 옮깁니다. 열을 데이터세트의 시작이나 끝, 참조 열의 앞뒤, 특정 색인으로 이동시키려면 선택합니다.  | 

## 행 관리
<a name="data-wrangler-transform-manage-rows"></a>

이 변환 그룹으로 행 정렬과 셔플 연산을 빠르게 수행할 수 있습니다. 이 그룹에는 다음이 포함됩니다.
+ **정렬(Sort)**: 전체 데이터 프레임을 주어진 열을 기준으로 정렬합니다. **오름차순(Ascending order)** 옆 확인란에서 이 옵션을 선택합니다. 확인란 선택을 취소하면 내림차순으로 정렬됩니다.
+ **셔플(Shuffle)** 데이터세트의 모든 행을 임의로 섞습니다.

## 벡터 관리
<a name="data-wrangler-transform-manage-vectors"></a>

이 변환 그룹으로 벡터 열을 조합하거나 평탄화할 수 있습니다. 이 그룹에는 다음과 같은 변환이 포함됩니다.
+ **모으기(Assemble)**: 이 변환으로 Spark 벡터와 숫자 데이터를 단일 열로 모을 수 있습니다. 예를 들어, 사용자는 숫자 데이터가 포함된 두 열과 벡터가 포함된 한 열을 조합할 수 있습니다. 조합하고자 하는 열을 모두 **입력 열(Input columns)**에 추가하고 조합된 데이터의 **출력 열 이름(Output column name)**을 지정합니다.
+ **평탄화(Flatten)**: 이 변환으로 벡터 데이터가 포함된 단일 열을 평탄화할 수 있습니다. 입력 열에는 PySpark 벡터 또는 배열과 유사한 객체가 포함되어야 합니다. 사용자가 생성된 열 수를 제어하려면 **출력 수 감지 메서드(Method to detect number of outputs)**를 지정하면 됩니다. 예를 들어, **첫 번째 벡터의 길이(Length of first vector)**를 선택하면 열에서 찾은 첫 번째 유효한 벡터 또는 배열의 요소 수에 따라 생성되는 출력 열의 수가 결정됩니다. 항목이 너무 많은 다른 입력 벡터는 모두 잘립니다. 항목이 너무 적은 입력은 NaN으로 채워집니다.

  또한 **출력 접두사(Output prefix)**를 지정하면 개별 출력 열의 접두사로 사용됩니다.

## 숫자 처리
<a name="data-wrangler-transform-process-numeric"></a>

**숫자 처리(Process Numeric)** 특성 그룹으로 숫자 데이터를 처리합니다. 이 그룹의 개별 스케일러는 Spark 라이브러리로 정의됩니다. 다음 스케일러가 지원됩니다.
+ **표준 스케일러(Standard Scaler)**: 각 값에서 평균을 빼고 단위 분산으로 조정하여 입력 열 표준화. 자세한 내용은 [StandardScaler](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-transform.html)에 대한 Spark 설명서를 참조하세요.
+ **견고 스케일러(Robust Scaler)**: 이상치에 강한 통계를 사용하여 입력 열 조정. 자세한 내용은 [RobustScaler](https://spark.apache.org/docs/latest/ml-features#robustscaler)에 대한 Spark 설명서를 참조하세요.
+ **최소 최대 스케일러**: 각 특성을 주어진 범위로 조정하여 입력 열 변환. 자세한 내용은 [MinMaxScaler](https://spark.apache.org/docs/latest/ml-features#minmaxscaler)에 대한 Spark 설명서를 참조하세요.
+ **최대 절대 스케일러**: 각 값을 최대 절대값으로 나누어 입력 열 조정. 자세한 내용은 [MaxAbsScaler](https://spark.apache.org/docs/latest/ml-features#maxabsscaler)에 대한 Spark 설명서를 참조하세요.

## 샘플링
<a name="data-wrangler-transform-sampling"></a>

데이터를 가져온 후 사용자는 **샘플링(Sampling) 변환기**로 하나 이상의 데이터를 샘플링할 수 있습니다. 샘플링 변환기를 사용하면 Data Wrangler가 원본 데이터세트를 샘플링합니다.

사용자는 다음 중 한 가지 메서드를 선택할 수 있습니다.
+ **제한(Limit)**: 첫 번째 행부터 지정한 한도까지 데이터세트 샘플링.
+ **무작위(Randomized)**: 지정된 크기의 무작위 샘플 추출.
+ **계층화(Stratified)**: 계층화된 무작위 샘플 추출.

사용자는 무작위 샘플을 계층화하여 데이터세트의 원래 분포를 나타내도록 할 수 있습니다.

여러 사용 사례에 맞게 데이터를 준비할 수 있습니다. 사용 사례별로 사용자는 다른 샘플을 가져와서 다른 변환 세트를 적용할 수 있습니다.

다음은 무작위 샘플 생성 과정입니다.

데이터에서 무작위 샘플을 추출하려면.

1. 가져온 데이터 세트 오른쪽에서 **\$1**를 선택합니다. 데이터세트 이름은 **\$1** 아래에 있습니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **샘플링**을 선택합니다.

1. **샘플링 메서드(Sampling method)**에서 샘플링 메서드를 선택합니다.

1. **샘플 크기 근사치(Approximate sample size)**에서 샘플링하고자 하는 관측 근사치를 선택합니다.

1. (선택 사항) **무작위 시드(Random seed)**에 정수를 지정하여 재현 가능한 샘플을 생성합니다.

다음은 계층화 샘플 생성 과정입니다.

데이터에서 계층화 샘플을 추출하려면.

1. 가져온 데이터세트 오른쪽에서 **\$1**를 선택합니다. 데이터세트 이름은 **\$1** 아래에 있습니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **샘플링**을 선택합니다.

1. **샘플링 메서드(Sampling method)**에서 샘플링 메서드를 선택합니다.

1. **샘플 크기 근사치(Approximate sample size)**에서 샘플링하고자 하는 관측 근사치를 선택합니다.

1. **계층화 열(Stratify column)**에서 계층화하고자 하는 열의 이름을 지정합니다.

1. (선택 사항) **무작위 시드(Random seed)**에 정수를 지정하여 재현 가능한 샘플을 생성합니다.

## 검색 및 편집
<a name="data-wrangler-transform-search-edit"></a>

이 섹션으로 문자열 내 특정 패턴을 검색하고 편집할 수 있습니다. 예를 들어, 사용자는 문장이나 문서 내에서 문자열을 찾아 업데이트하고, 구분자로 문자열을 분할하고, 특정 문자열 발생을 검색할 수 있습니다.

**검색 및 편집(Search and edit)**에서 지원되는 변환은 다음과 같습니다. 모든 변환은 문자열 사본을 **입력 열(Input column)**에 반환하고 결과를 새 출력 열에 추가합니다.


| 이름 | 함수 | 
| --- | --- | 
|  하위 문자열 찾기  |  검색한 **하위 문자열(Substring)**이 처음 나타나는 항목의 색인을 반환합니다. 사용자는 **시작(Start)**과 **끝(End)**에서 검색을 시작하고 종료할 수 있습니다.  | 
|  하위 문자열 찾기(오른쪽부터)  |  검색한 **하위 문자열** 마지막 항목 색인을 반환합니다. 사용자는 **시작**과 **끝**에서 검색을 시작하고 종료할 수 있습니다.  | 
|  접두사 일치  |  문자열에 주어진 **패턴(Pattern)**이 포함된 경우 부울 값을 반환합니다. 패턴은 문자 시퀀스 또는 정규 표현식일 수 있습니다. 선택적으로 사용자는 대소문자 구분 패턴을 만들 수 있습니다.  | 
|  전체 발생 항목 찾기  |  주어진 패턴의 발생 항목이 모두 포함된 배열을 반환합니다. 패턴은 문자 시퀀스 또는 정규 표현식일 수 있습니다.  | 
|  Regex로 추출  |  주어진 Regex 패턴과 일치하는 문자열을 반환합니다.  | 
|  구분자 사이 추출  |  **왼쪽 구분자(Left delimiter)**와 **오른쪽 구분자(Right delimiter)** 사이에 있는 모든 문자가 포함된 문자열을 반환합니다.  | 
|  위치에서 추출  |  입력 문자열의 **시작 위치(Start position)**에서 시작하여 시작 위치까지의 모든 문자에 **길이(Length)**를 더한 문자열을 반환합니다.  | 
|  하위 문자열 찾기 및 바꾸기  |  주어진 **패턴(Pattern)**(정규 표현식)과 일치하는 모든 항목이 **대체 문자열(Replacement string)**로 대체된 문자열을 반환합니다.  | 
|  구분자 사이 바꾸기  |  처음 나타나는 **왼쪽 구분자**와 마지막으로 나타나는 **오른쪽 구분자** 사이에 있는 하위 문자열이 **대체 문자열(Replacement string)**로 대체된 문자열을 반환합니다. 일치하는 결과가 없으면 대체되지 않습니다.  | 
|  위치에서 바꾸기  |  **시작 위치**와 **시작 위치** 더하기 **길이** 사이의 하위 문자열을 **대체 문자열**로 바꾼 문자열을 반환합니다. **시작 위치** 더하기 **길이**가 대체 문자열 길이보다 큰 경우, 출력에는**...** 가 포함됩니다.  | 
|  Regex를 누락으로 변환  |  유효하지 않은 경우 문자열을 `None`(으)로 변환하고 결과를 반환합니다. 유효성은 **패턴**의 정규 표현식으로 정의됩니다.  | 
|  구분자로 문자열 분할  |  입력 문자열에서 **구분자(Delimiter)**로 **최대 분할 횟수(Max number of splits)**까지 분할된 문자열 배열을 반환합니다(선택 사항). 구분자 기본값은 공백입니다.  | 

## 데이터 분할
<a name="data-wrangler-transform-split-data"></a>

**데이터 분할(Split data)** 변환으로 데이터세트를 2개 또는 3개로 분할할 수 있습니다. 예를 들어, 사용자는 데이터세트를 모델 훈련 시 사용되는 데이터세트와 모델 테스트 시 사용되는 데이터세트로 분할할 수 있습니다. 사용자는 각 분할에 포함되는 데이터세트 비율을 결정할 수 있습니다. 예를 들어, 하나의 데이터세트를 두 개로 분할하는 경우, 훈련 데이터세트는 데이터의 80%를, 테스트 데이터세트는 20%를 차지할 수 있습니다.

데이터를 세 개의 데이터세트로 분할하면 훈련, 검증, 테스트 데이터세트를 만들 수 있습니다. 대상 열을 삭제하면 테스트 데이터세트에서 모델이 얼마나 잘 작동하는지 확인할 수 있습니다.

사용 사례에 따라 개별 데이터세트가 가져오는 원본 데이터세트의 양과 데이터 분할 메서드가 결정됩니다. 예를 들어, 계층화 분할을 적용하면 대상 열의 관측 분포가 데이터세트 간에 동일한지 확인할 수 있습니다. 사용자는 다음과 같은 분할 변환을 사용할 수 있습니다.
+ 무작위 분할 - 원본 데이터세트를 무작위의 겹치지 않는 샘플로 분할, 대규모 데이터세트인 경우, 무작위 분할을 적용하면 순차 분할보다 컴퓨팅 비용이 많이 들고 시간이 더 오래 걸릴 수 있습니다.
+ 순차 분할 - 순차적 관측 순서를 기준으로 데이터세트 분할. 예를 들어, 80/20 훈련-테스트 분할의 경우, 데이터세트의 80%를 구성하는 첫 번째 관측치가 훈련 데이터세트로 이동합니다. 나머지 20%는 테스트 데이터세트로 이동합니다. 순차 분할은 분할 사이에 데이터의 기존 순서를 유지하는 데 효과적입니다.
+ 계층화 분할 - 데이터세트를 분할하여 입력 열의 관측 수를 비례적으로 표현. 관측치 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3이 있는 입력 열의 경우 열을 80/20으로 분할하면 1의 약 80%, 2의 80%, 3의 80% 가 훈련 세트로 이동합니다. 각 유형의 약 20%가 테스트 세트에 사용됩니다.
+ 키 기준 분할 - 동일한 키를 가진 데이터가 두 번 이상 분할되는 일을 방지. 예를 들어, 'customer\$1id' 열이 있는 데이터세트가 있고 이것을 키로 사용하는 경우, 고객 ID는 두 번 이상 분할되지 않습니다.

데이터 분할 후 사용자는 각 데이터세트에 추가 변환을 적용할 수 있습니다. 대부분의 사용 사례에서는 필수가 아닙니다.

Data Wrangler는 성능에 따른 분할 비율을 계산합니다. 사용자는 오류 임곗값을 선택하여 분할 정확도를 설정할 수 있습니다. 오류 임곗값이 낮을수록 분할 시 지정된 비율이 더 정확하게 반영됩니다. 오류 임곗값을 높게 설정하면 성능은 향상되지만 정확도는 낮아집니다.

데이터를 완벽하게 분할하려면 오류 임곗값을 0으로 설정합니다. 성능을 높이려면 사용자는 임곗값을 0에서 1 사이로 지정합니다. 1보다 큰 값을 지정하는 경우, Data Wrangler는 이 값을 1로 해석합니다.

데이터세트에 10000개의 행이 있고 오차가 0.001인 80/20 분할을 지정하면 다음 결과 중 하나에 근사한 관측치를 얻을 수 있습니다.
+ 훈련 세트 관측치 8010개, 테스트 세트 관측치 1990개
+ 훈련 세트 관측치 7990개, 테스트 세트 관측치 2010개

이전 예제에서 테스트 세트의 관측치 수는 8010에서 7990 사이입니다.

기본적으로 Data Wrangler는 무작위 시드로 재현 가능한 분할을 실시합니다. 사용자는 시드를 다른 값으로 지정하여 재현 가능한 다른 분할을 생성할 수 있습니다.

------
#### [ Randomized split ]

다음 절차에 따라 데이터세트에서 무작위 분할을 수행합니다.

데이터세트의 무작위 분할 방법은 다음과 같습니다.

1. 분할하려는 데이터 세트를 포함하는 노드 옆에서 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **데이터 분할(Split data)**을 선택합니다.

1. (선택 사항) **분할(Split)**에서 개별 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **\$1**를 선택하여 추가 분할을 생성합니다.

   1. 모든 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **오류 임곗값(Error threshold)**을 가본값이 아닌 값으로 지정합니다.

1. (선택 사항) **무작위 시드(Random seed)** 값을 지정합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

------
#### [ Ordered split ]

다음 절차에 따라 데이터세트에서 순차 분할을 수행합니다.

데이터세트의 순차 분할 방법은 다음과 같습니다.

1. 분할하려는 데이터 세트를 포함하는 노드 옆에서 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **변환(Transform)**에서 **순차 분할(Ordered split)**을 선택합니다.

1. **데이터 분할(Split data)**을 선택합니다.

1. (선택 사항) **분할(Split)**에서 개별 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **\$1**를 선택하여 추가 분할을 생성합니다.

   1. 모든 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **오류 임곗값(Error threshold)**을 가본값이 아닌 값으로 지정합니다.

1. (선택 사항) **입력 열(Input column)**에 숫자 값이 있는 열을 지정합니다. 열 값으로 각 분할에 포함된 레코드를 유추합니다. 작은 값이 한 분할에 포함되고 큰 값이 다른 분할에 포함됩니다.

1. (선택 사항) **중복 처리(Handle duplicates)**를 선택하여 중복된 값에 노이즈를 추가하고 완전히 고유한 값으로 구성된 데이터세트를 생성합니다.

1. (선택 사항) **무작위 시드(Random seed)** 값을 지정합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

------
#### [ Stratified split ]

다음 절차에 따라 데이터세트에서 계층화 분할을 수행합니다.

데이터세트의 계층화 분할 방법은 다음과 같습니다.

1. 분할하려는 데이터 세트를 포함하는 노드 옆에서 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **데이터 분할(Split data)**을 선택합니다.

1. **변환(Transform)**에서 **계층화 분할(Stratified split)**을 선택합니다.

1. (선택 사항) **분할(Split)**에서 개별 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **\$1**를 선택하여 추가 분할을 생성합니다.

   1. 모든 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. **입력 열(Input column)** 최대 100개의 고유 값이 있는 열을 지정합니다. Data Wrangler는 100개가 넘는 고유 값이 있는 열을 계층화할 수 없습니다.

1. (선택 사항) **오류 임곗값(Error threshold)**을 가본값이 아닌 값으로 지정합니다.

1. (선택 사항) **무작위 시드(Random seed)** 값을 다른 시드로 지정합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

------
#### [ Split by column keys ]

다음 절차에 따라 데이터세트에서 열 키 기준 분할을 수행합니다.

데이터세트의 열 키 기준 분할 방법은 다음과 같습니다.

1. 분할하려는 데이터세트를 포함하는 노드 옆에서 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **데이터 분할(Split data)**을 선택합니다.

1. **변환(Transform)**에서 **키 기준 분할(Split by key)**을 선택합니다.

1. (선택 사항) **분할(Split)**에서 개별 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. (선택 사항) **\$1**를 선택하여 추가 분할을 생성합니다.

   1. 모든 분할의 이름과 비율을 지정합니다. 비율의 합은 1이어야 합니다.

1. **키 열(Key columns)**에 두 데이터세트에 모두 표시하고 싶지 않은 값이 있는 열을 지정합니다.

1. (선택 사항) **오류 임곗값(Error threshold)**을 가본값이 아닌 값으로 지정합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

------

## 값을 유형으로 구문 분석
<a name="data-wrangler-transform-cast-type"></a>

이 변환으로 열을 새 유형으로 캐스팅할 수 있습니다. 지원되는 Data Wrangler 데이터 유형은 다음과 같습니다.
+ Long
+ Float
+ 부울
+ DD-MM-YYYY(일-월-년) 형식의 날짜 
+ 문자열

## 문자열 검증
<a name="data-wrangler-transform-validate-string"></a>

**문자열 검증(Validate string)** 변환으로 텍스트 데이터 행이 지정된 조건을 충족함을 나타내는 새 열을 생성할 수 있습니다. 예를 들어, 사용자는 **문자열 검증** 변환으로 문자열에 소문자만 포함되어 있는지 확인할 수 있습니다. **문자열 검증**에서 지원되는 변환은 다음과 같습니다.

이 변환 그룹에는 다음과 같은 변환이 포함됩니다. 변환이 부울 값을 출력하는 경우, `True`은(는) `1`(으)로, `False`은(는) `0`(으)로 표시됩니다.


| 이름 | 함수 | 
| --- | --- | 
|  문자열 길이  |  문자열 길이가 지정된 길이와 같으면 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  다음으로 시작  |  문자열이 지정된 접두사로 시작되면 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  다음으로 끝남  |  문자열 길이가 지정된 길이와 같으면 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  영숫자임  |  문자열에 숫자와 문자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  알파벳(문자)임  |  문자열에 문자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  자릿수임  |  문자열에 자릿수만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  공란임  |  문자열에 숫자와 문자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  제목임  |  문자열에 공백이 있으면 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  소문자임  |  문자열에 소문자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  대문자임  |  문자열에 대문자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  숫자임  |  문자열에 숫자만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 
|  소수임  |  문자열에 소수만 포함된 경우 `True`을 반환합니다. 그렇지 않은 경우 `False`를 반환합니다.  | 

## JSON 데이터 중첩 해제
<a name="data-wrangler-transform-flatten-column"></a>

.csv 파일이 있는 경우, 데이터세트에 JSON 문자열 값이 있을 수 있습니다. 마찬가지로, Parquet 파일 또는 JSON 문서 열에 데이터가 중첩되어 있을 수 있습니다.

**구조화 평탄화(Flatten structured)** 연산자로 1단계 키를 별도 열로 분리할 수 있습니다. 1단계 키는 값 내에 중첩되지 않은 키입니다.

예를 들어, 개인의 신상정보가 JSON 문자열로 저장된 *person* 열이 있는 데이터세트가 있을 수 있습니다. 이 때 JSON 문자열의 모양은 다음과 같습니다.

```
 "{"seq": 1,"name": {"first": "Nathaniel","last": "Ferguson"},"age": 59,"city": "Posbotno","state": "WV"}"
```

**구조화 평탄화(Flatten structured)** 연산자는 다음과 같은 1단계 키를 데이터세트의 추가 열로 변환합니다.
+ seq
+ 이름
+ age
+ city
+ state

Data Wrangler는 키 값을 열 아래에 값으로 표시합니다. 다음은 JSON의 열 이름과 값입니다.

```
seq, name,                                    age, city, state
1, {"first": "Nathaniel","last": "Ferguson"}, 59, Posbotno, WV
```

**구조화 평탄화(Flatten structured)** 연산자는 JSON이 포함된 데이터세트의 각 값에 대해 1단계 키에 대한 열을 만듭니다. 중첩 키용 열을 생성하려면 연산자를 다시 호출합니다. 앞의 예제에서 연산자를 호출하면 다음과 같은 열이 생성됩니다.
+ name\$1first
+ name\$1last

다음 예제는 연산을 다시 호출한 결과 데이터세트입니다.

```
seq, name,                                    age, city, state, name_first, name_last
1, {"first": "Nathaniel","last": "Ferguson"}, 59, Posbotno, WV, Nathaniel, Ferguson
```

**평탄화할 키(Keys to flatten on)**를 선택하여 추출하고자 하는 1단계 키를 별도 열로 지정합니다. 키를 지정하지 않으면 Data Wrangler에서는 기본적으로 모든 키를 추출합니다.

## 배열 분해
<a name="data-wrangler-transform-explode-array"></a>

**배열 분해(Explode array)**로 배열 값을 별도의 출력 행으로 확장할 수 있습니다. 예를 들어, 연산을 통해 배열의 각 값 [[1, 2, 3,], [4, 5, 6], [7, 8, 9]]를 가져와 다음 행으로 구성된 새 열을 생성할 수 있습니다.

```
                [1, 2, 3]
                [4, 5, 6]
                [7, 8, 9]
```

Data Wrangler는 새 열의 이름을 input\$1column\$1name\$1flatten으로 지정합니다.

사용자는 **배열 분해** 연산을 여러 번 호출하여 중첩된 값을 별도의 출력 열로 가져올 수 있습니다. 다음 예제에서 중첩된 배열이 있는 데이터세트에서 작업을 여러 번 호출한 결과를 볼 수 있습니다.

중첩 배열 값을 별도 열에 넣기


| id | 배열 | id | array\$1items | id | array\$1items\$1items | 
| --- | --- | --- | --- | --- | --- | 
| 1 | [ [cat, dog], [bat, frog] ] | 1 | [cat, dog] | 1 | cat | 
| 2 |  [[rose, petunia], [lily, daisy]]  | 1 | [bat, frog] | 1 | dog | 
|  |  | 2 | [rose, petunia] | 1 | bat | 
|  |  | 2 | [lily, daisy] | 1 | frog | 
|  |  |  | 2 | 2 | rose | 
|  |  |  | 2 | 2 | petunia | 
|  |  |  | 2 | 2 | lily | 
|  |  |  | 2 | 2 | daisy | 

## 이미지 데이터 변환
<a name="data-wrangler-transform-image"></a>

Data Wrangler로 머신러닝(ML) 파이프라인에서 사용 중인 이미지를 가져오고 변환할 수 있습니다. 이미지 데이터를 준비한 후 사용자는 Data Wrangler 흐름에서 ML 파이프라인으로 내보낼 수 있습니다.

사용자는 여기에 있는 정보로 Data Wrangler에서 이미지 데이터를 가져오고 변환하는 방법을 익힐 수 있습니다. Data Wrangler는 OpenCV를 사용하여 이미지를 가져옵니다. 지원되는 이미지 형식에 대한 추가 정보는 [이미지 파일 읽기 및 쓰기](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)에서 확인하세요.

이미지 데이터 변환의 개념을 숙지한 후에는 [Amazon SageMaker Data Wrangler로 이미지 데이터 준비](https://aws.amazon.com/blogs/machine-learning/prepare-image-data-with-amazon-sagemaker-data-wrangler/) 자습서를 살펴보세요.

다음 산업 및 사용 사례는 변환된 이미지 데이터에 머신러닝을 적용하는 것이 유용할 수 있는 예제입니다.
+ 제조 - 조립 라인 품목의 하자 식별
+ 식품 - 상하거나 썩은 식품 식별
+ 의학 - 조직 내 병변 식별

Data Wrangler에서 이미지 데이터로 작업할 때는 다음 프로세스를 거칩니다.

1. 가져오기 - Amazon S3 버킷에서 이미지가 포함된 디렉터리를 선택하여 이미지를 선택합니다.

1. 변환 - 내장 변환으로 머신러닝 파이프라인에서 사용할 이미지를 준비합니다.

1. 내보내기 - 변환한 이미지를 파이프라인에서 액세스할 수 있는 위치로 내보냅니다.

다음 절차에 따라 이미지 데이터를 가져옵니다.

**이미지 데이터를 가져오려면**

1. **연결 생성(Create connection)** 페이지로 이동합니다.

1. **Amazon S3**를 선택합니다.

1. 이미지 데이터가 포함된 Amazon S3 파일 경로를 지정합니다.

1. **파일 유형(File type)**에서 **이미지(Image)**를 선택합니다.

1. (선택 사항) **중첩된 디렉터리 가져오기(Import nested directories)**를 선택하여 여러 Amazon S3 경로에서 이미지를 가져옵니다.

1. **가져오기**를 선택합니다.

Data Wrangler는 내장 이미지 변환 시 오픈 소스 [imgaug](https://imgaug.readthedocs.io/en/latest/) 라이브러리를 사용합니다. 사용자는 다음과 같은 내장 변환을 사용할 수 있습니다.
+ **ResizeImage**
+ **EnhanceImage**
+ **CorruptImage**
+ **SplitImage**
+ **DropCorruptedImages**
+ **DropImageDuplicates**
+ **Brightness(밝기)**
+ **ColorChannels**
+ **Grayscale**
+ **Rotate**

다음 절차에 따라 코드 작성 없이 이미지를 변환합니다.

**코드를 작성하지 않고 이미지 데이터를 변환하려면**

1. Data Wrangler 흐름에서 가져온 이미지를 나타내는 노드 옆의 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. 변환을 선택하고 구성합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

Data Wrangler에서 제공하는 변환을 사용하는 것 외에도 사용자는 자체 사용자 지정 코드 조각을 사용할 수도 있습니다. 사용자 지정 코드 조각에 대한 추가 정보는 [사용자 지정 변환](#data-wrangler-transform-custom) 섹션을 참조하세요. 사용자는 코드 조각에서 OpenCV 및 imgaug 라이브러리를 가져오고 이와 관련된 변환을 사용할 수 있습니다. 다음은 이미지의 가장자리를 감지하는 코드 조각의 예제입니다.

```
# A table with your image data is stored in the `df` variable
import cv2
import numpy as np
from pyspark.sql.functions import column

from sagemaker_dataprep.compute.operators.transforms.image.constants import DEFAULT_IMAGE_COLUMN, IMAGE_COLUMN_TYPE
from sagemaker_dataprep.compute.operators.transforms.image.decorators import BasicImageOperationDecorator, PandasUDFOperationDecorator


@BasicImageOperationDecorator
def my_transform(image: np.ndarray) -> np.ndarray:
  # To use the code snippet on your image data, modify the following lines within the function
    HYST_THRLD_1, HYST_THRLD_2 = 100, 200
    edges = cv2.Canny(image,HYST_THRLD_1,HYST_THRLD_2)
    return edges
    

@PandasUDFOperationDecorator(IMAGE_COLUMN_TYPE)
def custom_image_udf(image_row):
    return my_transform(image_row)
    

df = df.withColumn(DEFAULT_IMAGE_COLUMN, custom_image_udf(column(DEFAULT_IMAGE_COLUMN)))
```

Data Wrangler 흐름에서 변환을 적용할 때 Data Wrangler는 데이터세트의 이미지 샘플에만 변환을 적용합니다. 애플리케이션 사용 환경을 최적화하기 위해 Data Wrangler는 모든 이미지에 변환을 적용하지 않습니다.

모든 이미지에 변환을 적용하려면 Data Wrangler 흐름을 Amazon S3 위치로 내보냅니다. 사용자는 내보낸 이미지를 훈련 또는 추론 파이프라인에서 사용할 수 있습니다. 대상 노드 또는 Jupyter notebook을 사용하여 데이터를 내보냅니다. 사용자는 Data Wrangler 흐름에서 두 가지 중 한 가지 방법으로 데이터를 내보낼 수 있습니다. 메서드 사용에 대한 자세한 정보는 [Amazon S3로 내보내기](data-wrangler-data-export.md#data-wrangler-data-export-s3) 섹션을 참조하세요.

## 데이터 필터링
<a name="data-wrangler-transform-filter-data"></a>

Data Wrangler로 열의 데이터를 필터링합니다. 열의 데이터를 필터링할 때는 다음 필드를 지정합니다.
+ **열 이름(Column name)** - 데이터 필터링 시 사용하는 열 이름.
+ **조건(Condition)** - 열 값에 적용하는 필터 유형.
+ **값(Value)** - 필터를 적용하는 열의 값 또는 범주.

사용자는 다음 조건에 따라 필터링할 수 있습니다.
+ **=** - 지정한 값 또는 범주와 일치하는 값 반환.
+ **\$1=** - 지정한 값 또는 범주와 일치하지 않는 값 반환.
+ **>=** - **Long** 또는 **Float** 데이터의 경우, 지정한 값보다 크거나 같은 값 필터링.
+ **<=** - **Long** 또는 **Float** 데이터의 경우, 지정한 값보다 작거나 같은 값 필터링.
+ **>** - **Long** 또는 **Float** 데이터의 경우, 지정한 값보다 큰 값 필터링.
+ **<** - **Long** 또는 **Float** 데이터의 경우, 지정한 값보다 작은 값 필터링.

`male` 및 `female` 범주가 있는 열에서는 사용자는 모든 `male` 값을 필터링할 수 있습니다. 모든 `female` 값을 필터링할 수도 있습니다. 열에 `male` 및 `female` 값만 있기 때문에 필터는 `female` 값만 있는 열을 반환합니다.

또한 여러 필터를 추가할 수 있습니다. 필터는 여러 열 또는 동일한 열에 적용할 수 있습니다. 예를 들어, 특정 범위 내의 값만 있는 열을 만들려면 두 개의 다른 필터를 추가합니다. 한 필터는 열에 입력한 값보다 큰 값이 있어야 하도록 지정합니다. 다른 필터는 열에 입력한 값보다 작은 값이 있어야 하도록 지정합니다.

다음 절차에 따라 데이터에 필터 변환을 추가합니다.

**데이터를 필터링하려면 다음과 같이 하세요.**

1. Data Wrangler 흐름에서 필터링하려는 데이터가 있는 노드 옆에 있는 **\$1**를 선택합니다.

1. **변환 추가(Add transform)**를 선택합니다.

1. **단계 추가(Add step)**를 선택합니다.

1. **데이터 필터링(Filter data)**을 선택합니다.

1. 다음 필드를 지정합니다.
   + **열 이름(Column name)** - 필터링하는 열.
   + **조건(Condition)** - 필터링 조건.
   + **값(Value)** - 필터를 적용하는 열의 값 또는 범주.

1. (선택 사항) 생성한 필터에 따라 **\$1**를 선택합니다.

1. 필터를 구성합니다.

1. **Preview**(미리 보기)를 선택합니다.

1. **추가**를 선택합니다.

## Amazon Personalize용 행 매핑
<a name="data-wrangler-transform-personalize"></a>

Data Wrangler는 항목 추천과 사용자 세그먼트를 생성하는 완전 관리형 머신러닝 서비스 Amazon Personalize와 통합됩니다. 사용자는 **Amazon Personalize용 행 매핑(Map columns for Amazon Personalize)** 변환으로 Amazon Personalize가 해석할 수 있는 형식으로 데이터를 가져올 수 있습니다. Amazon Personalize 관련 변환에 대한 추가 정보는 [Amazon SageMaker Data Wrangler로 이미지 가져오기](https://docs.aws.amazon.com/personalize/latest/dg/preparing-importing-with-data-wrangler.html#dw-transform-data)에서 확인하세요. Amazon Personalize에 대한 추가 정보는 [Amazon Personalize가 무엇인가요?](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html)를 참조하세요.

# 분석 및 시각화
<a name="data-wrangler-analyses"></a>

Amazon SageMaker Data Wrangler에는 클릭 몇 번으로 시각화 및 데이터 분석을 생성하는 데 도움이 되는 분석 기능이 내장되어 있습니다. 자체 코드를 사용하여 사용자 지정 분석을 만들 수도 있습니다.

데이터 흐름에서 단계를 선택한 다음 **분석 추가**를 선택하여 데이터프레임에 분석을 추가할 수 있습니다. 생성한 분석에 액세스하려면 분석이 포함된 단계를 선택하고 분석을 선택합니다.

모든 분석은 데이터세트의 100,000개 행을 사용하여 생성됩니다.

데이터 프레임에 다음 분석을 추가할 수 있습니다.
+ 히스토그램 및 산점도를 포함한 데이터 시각화.
+ 항목 수, 최소값 및 최대값 (숫자 데이터용), 빈도가 가장 높은 범주와 가장 빈도가 낮은 범주(범주형 데이터용)를 포함하는 데이터세트의 간략한 요약.
+ 각 특징에 대한 중요도 점수를 생성하는 데 사용할 수 있는 데이터세트의 빠른 모델.
+ 대상 누출 보고서. 이는 하나 이상의 특징이 대상 특징과 강한 상관관계가 있는지 확인하는 데 사용할 수 있습니다.
+ 자체 코드를 사용한 사용자 지정 시각화.

다음 섹션을 통해 이런 옵션에 대해 자세히 알아보세요.

## 히스토그램(Histogram)
<a name="data-wrangler-visualize-histogram"></a>

히스토그램을 사용하면 각 특징의 특징 값 수를 확인할 수 있습니다. 사용자는 **색상 기준** 옵션을 사용하여 기능 간의 관계를 검사할 수 있습니다. 예를 들어, 다음 히스토그램은 2009년부터 2019년까지 Amazon에서 가장 많이 팔린 도서의 사용자 평점 분포를 장르별로 채색하여 차트로 보여줍니다.

![\[Data Wrangler 콘솔의 히스토그램 차트 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/histogram.png)


사용자는 **패싯** 기능을 사용하여 다른 열의 각 값에 대해 한 열의 히스토그램을 생성할 수 있습니다. 예를 들어, 다음 다이어그램은 Amazon에서 가장 많이 팔린 도서에 대한 사용자 리뷰 히스토그램을 연도별로 나누어 보여줍니다.

![\[Data Wrangler 콘솔의 히스토그램 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/review_by_year.png)


## 산점도
<a name="data-wrangler-visualize-scatter-plot"></a>

**산점도** 기능을 사용하여 특징 간의 관계를 검사할 수 있습니다. 산점도를 만들려면 **X축**과 **Y축**에 플롯할 기능을 선택합니다. 이 두 열 모두 숫자 형식의 열이어야 합니다.

추가 열을 기준으로 산점도에 색을 지정할 수 있습니다. 예를 들어, 다음 예제는 2009년과 2019년 사이에 Amazon에서 가장 많이 팔린 도서의 리뷰 수와 사용자 평점을 비교한 산점도를 보여줍니다. 산점도는 책 장르별로 색이 지정되어 있습니다.

![\[Data Wrangler 콘솔의 산점도 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/scatter-plot.png)


또한 특징별로 산점도를 패싯할 수 있습니다. 예를 들어, 다음 이미지는 동일한 리뷰와 사용자 평점을 비교한 산점도를 연도별로 나누어 보여주는 예입니다.

![\[Data Wrangler 콘솔의 패싯 산점도 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/scatter-plot-facet.png)


## 표 요약
<a name="data-wrangler-table-summary"></a>

**표 요약** 분석을 사용하면 데이터를 빠르게 요약할 수 있습니다.

로그 및 부동 데이터를 비롯한 수치 데이터가 있는 열의 경우 표 요약에 각 열의 항목 수(개수), 최소값(최소), 최대값(최대), 평균, 표준편차(stddev)가 표시됩니다.

문자열, 부울 또는 날짜/시간 데이터가 있는 열을 포함하는 숫자가 아닌 데이터가 있는 열의 경우 표 요약에는 항목 수(개수), 가장 빈도가 낮은 값(최소), 가장 빈도가 높은 값(최대)이 보고됩니다.

## 빠른 모델
<a name="data-wrangler-quick-model"></a>

**빠른 모델** 시각화를 사용하여 데이터를 빠르게 평가하고 각 특징에 대한 중요도 점수를 산출할 수 있습니다. [기능 중요도 점수](http://spark.apache.org/docs/2.1.0/api/python/pyspark.ml.html#pyspark.ml.classification.DecisionTreeClassificationModel.featureImportances)는 기능이 대상 레이블을 예측하는 데 얼마나 유용한지를 나타냅니다. 기능 중요도 점수는 [0, 1] 사이이며 숫자가 높을수록 해당 특징이 전체 데이터세트에서 더 중요하다는 것을 나타냅니다. 빠른 모델 차트의 상단에는 모델 점수가 있습니다. 분류 문제는 F1 점수를 나타냅니다. 회귀 문제에는 평균제곱오차(MSE) 점수가 있습니다.

빠른 모형 차트를 만들 때는 평가할 데이터세트와 기능 중요도를 비교할 대상 레이블을 선택합니다. Data Wrangler는 다음을 수행합니다.
+ 선택한 데이터세트의 대상 레이블 및 각 특징에 대한 데이터 형식을 유추합니다.
+ 문제 유형을 결정합니다. Data Wrangler는 레이블 열에 있는 고유 값의 수를 기반으로 이것이 회귀 문제 유형인지 분류 문제인지 판단합니다. Data Wrangler는 범주형 임곗값을 100으로 설정합니다. 레이블 열에 100개가 넘는 고유 값이 있는 경우 Data Wrangler는 이를 회귀 문제로 분류하고 그렇지 않으면 분류 문제로 분류합니다.
+ 훈련을 위해 특징 및 레이블 데이터를 사전 처리합니다. 알고리즘을 사용하려면 특징을 vector 유형으로 인코딩하고 레이블을 double 유형으로 인코딩해야 합니다.
+ 데이터의 70%를 사용하여 랜덤 포레스트(random forest) 알고리즘을 훈련시킵니다. Spark의 [RandomForestRegressor](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-regression)는 회귀 문제에 대한 모델을 훈련시키는 데 사용됩니다. [RandomForestRegressor](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-classifier)는 분류 문제에 대한 모델을 훈련시키는 데 사용됩니다.
+ 나머지 30% 의 데이터로 랜덤 포레스트 모델을 평가합니다. Data Wrangler는 F1 점수를 사용하여 분류 모델을 평가하고 MSE 점수를 사용하여 회귀 모델을 평가합니다.
+ Gini(지니) 중요도 방법을 사용하여 각 기능의 기능 중요도를 계산합니다.

다음 이미지는 빠른 모델 기능의 사용자 인터페이스를 보여줍니다.

![\[Data Wrangler 콘솔에서 빠른 모델 기능의 UI 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/quick-model.png)


## 대상 누출
<a name="data-wrangler-analysis-target-leakage"></a>

대상 누출은 기계 학습 훈련 데이터세트에 대상 레이블과 강한 상관 관계가 있지만 실제 데이터에서는 사용할 수 없는 데이터가 있을 때 발생합니다. 예를 들어 모델을 사용하여 예측하려는 열의 프록시 역할을 하는 열이 데이터세트에 있을 수 있습니다.

**대상 누출** 분석을 사용할 때는 다음을 지정합니다.
+ **대상**: ML 모델이 예측을 하려는 특징입니다.
+ **문제 유형**: 작업 중인 ML 문제 유형입니다. 문제 유형은 **분류** 또는 **회귀**일 수 있습니다.
+  (선택 사항) **최대 기능**: 시각화에 표시할 수 있는 최대 특징 수로, 특징을 대상 누출 위험을 기준으로 순위를 매겨 보여줍니다.

분류의 경우, 대상 누출 분석은 수신기 작동 특성 아래 영역 또는, 최고 **최대 특성**까지, 각 열에 대한 AUC-ROC 곡선을 사용합니다. 회귀 분석의 경우, 이는 결정 계수 또는 R2 지표를 사용합니다.

AUC - ROC 곡선은 최대 약 1000개 행의 표본에 대해 교차 검증을 사용하여 각 열에 대해 개별적으로 계산된 예측 지표를 제공합니다. 1점은 완벽한 예측 능력을 나타내며, 이는 종종 대상 누출을 나타냅니다. 점수가 0.5점 이하이면 열의 정보 자체로는 대상 예측에 유용한 정보를 제공하지 못함을 나타냅니다. 열 자체로는 정보를 제공하지 않지만 다른 기능과 함께 사용할 경우 대상을 예측하는 데 유용할 수 있지만 점수가 낮으면 기능이 중복되었음을 의미할 수 있습니다.

예를 들어, 다음 이미지는 당뇨병 분류 문제, 즉 사람이 당뇨병을 가지고 있는지의 여부 예측에 대한 대상 누출 보고서를 보여줍니다. AUC-ROC 곡선은 5가지 특징의 예측 능력을 계산하는 데 사용되며, 모두 대상 누 출로부터 안전한 것으로 확인됩니다.

![\[Data Wrangler 콘솔의 대상 누출 보고서의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/target-leakage.png)


## 다중 공선성
<a name="data-wrangler-multicollinearity"></a>

다중 공선성(Multicollinearity)은 두 개 이상의 예측 변수가 서로 관련되어 있는 상황입니다. 예측 변수는 대상 변수를 예측하는 데 사용하는 데이터세트의 특징입니다. 다중 공선성이 있는 경우 예측 변수는 대상 변수를 예측할 뿐만 아니라 서로를 예측할 수도 있습니다.

**분산 확대 지수**, **주성분 분석(Principal Component Analysis, PCA)** 또는 **올가미 기능 선택(Lasso feature selection)**을 데이터의 다중 공선성에 대한 측정값으로 사용할 수 있습니다. 추가 정보는 다음을 참조하세요.

------
#### [ Variance Inflation Factor (VIF) ]

분산 확대 지수(VIF)는 변수 쌍 간의 공선성을 측정한 것입니다. Data Wrangler는 변수가 서로 얼마나 밀접하게 관련되어 있는지를 나타내는 척도로 VIF 점수를 반환합니다. VIF 점수는 1보다 크거나 같은 양수입니다.

점수가 1이면 변수가 다른 변수와 상관관계가 없음을 의미합니다. 점수가 1보다 크면 상관관계가 높음을 나타냅니다.

이론적으로 VIF 점수는 무한대일 수 있습니다. Data Wrangler는 50점을 최고 점수로 사용합니다. VIF 점수가 50점을 초과하는 경우 Data Wrangler는 점수를 50으로 설정합니다.

다음 지침을 사용하여 VIF 점수를 해석할 수 있습니다.
+ VIF 점수가 5보다 작거나 같으면 변수가 다른 변수와 중간 정도의 상관관계가 있음을 나타냅니다.
+ VIF 점수가 5보다 크거나 같으면 변수가 다른 변수와 높은 상관관계가 있음을 나타냅니다.

------
#### [ Principle Component Analysis (PCA) ]

주성분 분석(PCA)은 특징 공간의 여러 방향에 따른 데이터의 분산을 측정합니다. 특징 공간은 데이터세트의 대상 변수를 예측하는 데 사용하는 모든 예측 변수로 구성됩니다.

예를 들어 타이타닉호가 빙산에 부딪힌 후 누가 살아남았는지 예측하려는 경우 특징 공간에 승객의 연령, 성별, 지불한 요금이 포함될 수 있습니다.**

PCA는 특징 공간에서 정렬된 분산 목록을 생성합니다. 이러한 분산을 특이값(singular value)이라고도 합니다. 분산 목록의 값은 0보다 크거나 같습니다. 이 값을 사용하여 데이터에 다중 공선성이 얼마나 있는지 확인할 수 있습니다.

숫자가 거의 균일한 경우 데이터는 다중 공선성이 거의 없습니다. 값 간에 변동성이 많으면 다중 공선성이 나타나는 경우가 많습니다. Data Wrangler는 PCA를 수행하기 전에 각 특성을 평균이 0이고 표준편차가 1이 되도록 정규화합니다.

**참고**  
이 상황에서의 PCA는 특이값 분해(Singular Value Decomposition, SVD)라고도 합니다.

------
#### [ Lasso feature selection ]

올가미 특징 선택은 L1 정규화 기법을 사용하여 데이터세트에 가장 예측 가능한 특징만 포함합니다.

분류와 회귀 분석 모두에서 정규화 기법은 각 특징에 대한 계수를 생성합니다. 계수의 절대값은 특징에 대한 중요도 점수를 제공합니다. 중요도 점수가 높을수록 대상 변수를 더 잘 예측할 수 있음을 의미입니다. 일반적인 특징 선택 방법은 올가미 계수가 0이 아닌 모든 특징을 사용하는 것입니다.

------

## 시계열 데이터에서 이상 항목 탐지
<a name="data-wrangler-time-series-anomaly-detection"></a>

이상 탐지 시각화를 사용하여 시계열 데이터의 이상치를 확인할 수 있습니다. 이상을 결정하는 요인을 이해하려면 시계열을 예측 항과 오차 항으로 분해한다는 점을 이해해야 합니다. 시계열의 계절성과 추세를 예측 항으로 취급합니다. 잔차(residual)를 오차항으로 취급합니다.

오차 항의 경우 임곗값을 표준 편차의 배수로 지정하면, 잔차가 평균에서 멀어질 때 이상으로 간주될 수 있습니다. 예를 들어, 임곗값을 표준편차의 3배로 지정할 수 있습니다. 평균에서 표준 편차의 3배보다 더 큰 잔차는 이상입니다.

다음 절차를 사용하여 **이상 탐지** 분석을 수행할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터 흐름의 **데이터 형식**에서 **\$1**를 선택하고 **분석 추가**를 선택합니다.

1. **분석 유형**에서 **시계열**을 선택합니다.

1. **시각화**에서는 **이상 탐지**를 선택합니다.

1. **이상 임곗값**에서 예외로 간주하는 임곗값을 선택합니다.

1. **미리 보기**를 선택하여 분석 미리 보기를 생성합니다.

1. **추가**를 선택하여 Data Wrangler 데이터 흐름에 변환을 추가합니다.

## 시계열 데이터의 계절적 추세 분해
<a name="data-wrangler-seasonal-trend-decomposition"></a>

Seasonal Trend Decomposition(계절적 추세 분해) 시각화를 사용하여 시계열 데이터에 계절성이 있는지 여부를 확인할 수 있습니다. 분해는 STL(LOESS를 사용한 계절적 추세 분해) 방법을 사용합니다. 시계열은 계절 요소, 추세 요소, 잔차 요소로 분해됩니다. 추세 요소는 시리즈의 장기적 진행 상황을 반영합니다. 계절 요소는 일정 기간 동안 반복되는 신호입니다. 시계열에서 추세와 계절 요소를 제거하면 잔차가 남습니다.

다음 절차를 사용하여 **계절-추세 분해** 분석을 수행할 수 있습니다.

1. Data Wrangler 데이터 흐름을 엽니다.

1. 데이터 흐름의 **데이터 형식**에서 **\$1**를 선택하고 **분석 추가**를 선택합니다.

1. **분석 유형**에서 **시계열**을 선택합니다.

1. **시각화**에서는 **계절-추세 분해**를 선택합니다.

1. **이상 임곗값**에서 예외로 간주하는 임곗값을 선택합니다.

1. **미리 보기**를 선택하여 분석 미리 보기를 생성합니다.

1. **추가**를 선택하여 Data Wrangler 데이터 흐름에 변환을 추가합니다.

## 바이어스 리포트
<a name="data-wrangler-bias-report"></a>

Data Wrangler의 바이어스 보고서를 사용하여 데이터의 잠재적 편향을 찾아낼 수 있습니다. 바이어스 보고서를 생성하려면 예측하려는 대상 열(**레이블**)과 **패싯**(편향 여부를 검사할 열)을 지정해야 합니다.

**레이블**: 모델이 예측하는 데 사용하려는 특징. 예를 들어 고객 전환율을 예측하는 경우 고객의 주문 여부에 대한 데이터가 포함된 열을 선택할 수 있습니다. 또한 이 특징이 레이블인지 임곗값인지도 지정해야 합니다. 레이블을 지정하는 경우 먼저 데이터에서 긍정적인 결과가 어떤 것인지 지정해야 합니다.** 고객 전환 예제에서 긍정적인 결과는 주문 열에서 1이 될 수 있으며, 이는 지난 3개월 이내에 주문한 고객의 긍정적인 결과를 나타냅니다. 임곗값을 지정하는 경우 긍정적인 결과를 정의하는 하한을 지정해야 합니다. 예를 들어 고객 주문 열이 작년의 주문 수를 표시하는 경우 1을 지정하는 것이 좋습니다.

**패싯**: 편견이 있는지 검사하려는 열입니다. 예를 들어, 고객 전환율을 예측하려는 경우 고객 연령으로 패싯할 수 있습니다. 데이터가 특정 연령대에 편향되어 있다고 생각하기 때문에 이 패싯을 선택할 수 있습니다. 패싯을 값으로 측정할지 임곗값으로 측정할지를 식별해야 합니다. 예를 들어, 하나 이상의 특정 연령을 검사하려면 **값**을 선택하고 해당 연령을 지정합니다. 연령 그룹을 살펴보려면 **임곗값**을 선택하고 검사하려는 연령의 임곗값을 지정합니다.

특징과 레이블을 선택한 후 계산하려는 편향 지표의 유형을 선택합니다.

자세한 내용은 [훈련 전 데이터의 편향에 대한 보고서 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/data-bias-reports.html)을 참조하세요.

## 사용자 지정 시각화 만들기
<a name="data-wrangler-visualize-custom"></a>

Data Wrangler 흐름에 분석을 추가하여 사용자 지정 시각화를 만들 수 있습니다. 적용한 모든 변환이 포함된 데이터세트는 [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)으로 제공됩니다. Data Wrangler는 `df` 변수를 사용하여 데이터프레임을 저장합니다. 변수를 호출하여 데이터프레임에 액세스할 수 있습니다.

[Altair](https://altair-viz.github.io/) 출력 차트를 `chart` 저장하려면 출력 변수 를 제공해야 합니다. 예를 들어, 다음 코드 블록을 사용하여 타이타닉 데이터세트에 대한 사용자 지정 히스토그램을 만들 수 있습니다.

```
import altair as alt
df = df.iloc[:30]
df = df.rename(columns={"Age": "value"})
df = df.assign(count=df.groupby('value').value.transform('count'))
df = df[["value", "count"]]
base = alt.Chart(df)
bar = base.mark_bar().encode(x=alt.X('value', bin=True, axis=None), y=alt.Y('count'))
rule = base.mark_rule(color='red').encode(
    x='mean(value):Q',
    size=alt.value(5))
chart = bar + rule
```

**사용자 지정 시각화를 만들려면:**

1. 시각화하려는 변환이 포함된 노드 옆의 **\$1**를 선택합니다.

1. **분석 추가**를 선택합니다.

1. **분석 유형**에서 **사용자 지정 시각화**를 선택합니다.

1. **분석 이름**에서 이름을 지정합니다.

1. 코드 상자에 코드를 입력합니다.

1. **미리보기**를 선택하여 시각화를 미리 볼 수 있습니다.

1. **저장**을 선택하여 시각화를 추가합니다.

![\[Data Wrangler 콘솔에서 시각화를 추가하는 방법의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/custom-visualization.png)


Python의 Altair 시각화 패키지 사용법을 모르는 경우, 사용자 지정 코드 조각을 사용하면 시작 시 도움이 됩니다.

Data Wrangler에는 검색 가능한 시각화 코드 조각 모음이 있습니다. 시각화 코드 조각을 사용하려면, **예제 조각 검색**을 선택하고 검색 창에서 쿼리를 지정합니다.

다음 예제에서는 **Binned 산점도** 코드 조각을 사용합니다. 2차원에 대한 히스토그램을 플롯합니다.

코드 조각에는 코드를 변경할 때 필요한 사항을 파악하는 데 도움이 되는 주석이 있습니다. 일반적으로 코드에 데이터세트의 열 이름을 지정해야 합니다.

```
import altair as alt

# Specify the number of top rows for plotting
rows_number = 1000
df = df.head(rows_number)  
# You can also choose bottom rows or randomly sampled rows
# df = df.tail(rows_number)
# df = df.sample(rows_number)


chart = (
    alt.Chart(df)
    .mark_circle()
    .encode(
        # Specify the column names for binning and number of bins for X and Y axis
        x=alt.X("col1:Q", bin=alt.Bin(maxbins=20)),
        y=alt.Y("col2:Q", bin=alt.Bin(maxbins=20)),
        size="count()",
    )
)

# :Q specifies that label column has quantitative type.
# For more details on Altair typing refer to
# https://altair-viz.github.io/user_guide/encoding.html#encoding-data-types
```

# 다양한 데이터세트에 데이터 흐름 재사용
<a name="data-wrangler-parameterize"></a>

Amazon Simple Service (Amazon S3) 데이터 소스의 경우 사용자는 파라미터를 생성하고 사용할 수 있습니다. 파라미터는 Data Wrangler 흐름에 저장한 변수입니다. 이 값은 데이터 소스 Amazon S3 경로의 어떤 부분에도 들어갈 수 있습니다. 파라미터를 사용하여 Data Wrangler 흐름으로 가져오거나 처리 작업으로 내보내는 데이터를 빠르게 변경할 수 있습니다. 또한 사용자는 파라미터를 사용하여 데이터의 특정 하위 집합을 선택하고 가져올 수 있습니다.

Data Wrangler 흐름을 만든 후에는 변환한 데이터를 기반으로 모델을 훈련시켰을 수 있습니다. 스키마가 동일한 데이터세트의 경우 사용자는 파라미터를 사용하여 다른 데이터세트에 동일한 변환을 적용하고 다른 모델을 훈련시킬 수 있습니다. 사용자는 새 데이터세트를 사용하여 모델을 추론하거나, 새 데이터세트를 사용하여 모델을 재훈련시킬 수 있습니다.

일반적으로 파라미터의 속성은 다음과 같습니다.
+ 이름 - 파라미터에 지정하는 이름
+ 유형 - 파라미터가 나타내는 값의 유형
+ 기본값 - 새 값을 지정하지 않은 경우의 파라미터 값

**참고**  
날짜시간 파라미터에는 기본값으로 사용하는 시간 범위 속성이 있습니다.

Data Wrangler는 중괄호(`{{}}`)를 사용하여 Amazon S3 경로에서 파라미터가 사용되고 있음을 나타냅니다. 예를 들어 사용자는 `s3://amzn-s3-demo-bucket1/{{example_parameter_name}}/example-dataset.csv`과 같은 URL을 사용할 수 있습니다.

가져온 Amazon S3 데이터 소스를 편집할 때 파라미터를 생성합니다. 사용자는 파일 경로의 어느 부분이든 파라미터 값으로 설정할 수 있습니다. 사용자는 파라미터 값을 값 또는 패턴으로 설정할 수 있습니다. 다음은 Data Wrangler 흐름에서 사용 가능한 파라미터 값 유형입니다.
+ 숫자
+ 문자열
+ 패턴
+ 날짜시간

**참고**  
Amazon S3 경로에는 버킷 이름에 대한 패턴 파라미터 또는 날짜시간 파라미터를 생성할 수 없습니다.

숫자를 숫자 파라미터의 기본값으로 설정해야 합니다. 사용자는 파라미터를 편집하거나 처리 작업을 시작할 때 파라미터 값을 다른 숫자로 변경할 수 있습니다. 예를 들어, S3 경로 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv`에서 사용자는 `1` 대신 `number_parameter`로 불리는 숫자 파라미터를 생성할 수 있습니다. 이제 S3 경로가 `s3://amzn-s3-demo-bucket/example-prefix/example-file-{{number_parameter}}.csv`로 표시됩니다. 파라미터 값을 변경할 때까지 경로는 계속해서 `example-file-1.csv` 데이터세트를 가리킵니다. `number_parameter`의 값을 `2`로 변경하면 경로는 `s3://amzn-s3-demo-bucket/example-prefix/example-file-2.csv`이/가 됩니다. Amazon S3 위치에 파일을 업로드한 경우 사용자는 Data Wrangler로 `example-file-2.csv`을/를 가져올 수 있습니다.

문자열 파라미터는 문자열을 기본값으로 저장합니다. 예를 들어, 사용자는 S3 경로 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv`에서 파일명 `example-file-1.csv` 대신 `string_parameter`로 불리는 문자열 파라미터를 생성할 수 있습니다. 이제 경로가 `s3://amzn-s3-demo-bucket/example-prefix/{{string_parameter}}`로 표시됩니다. 파라미터 값을 변경할 때까지 계속 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv`로 유지됩니다.

파일 이름을 문자열 파라미터로 지정하는 대신 사용자는 전체 Amazon S3 경로를 사용하여 문자열 파라미터를 생성할 수 있습니다. 사용자는 모든 Amazon S3 위치의 데이터세트를 문자열 파라미터로 지정할 수 있습니다.

패턴 파라미터는 정규 표현식(Python REGEX) 문자열을 기본값으로 저장합니다. 사용자는 패턴 파라미터를 사용하여 동시에 여러 데이터 파일을 가져올 수 있습니다. 한 번에 두 개 이상의 객체를 가져오려면 가져오려는 Amazon S3 객체와 일치하는 파라미터 값을 지정하세요.

사용자는 다음 데이터세트에 대한 패턴 파라미터를 생성할 수도 있습니다.
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-1.csv
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-2.csv
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-10.csv
+ s3://amzn-s3-demo-bucket/example-prefix/example-file-0123.csv

`s3://amzn-s3-demo-bucket1/example-prefix/example-file-1.csv`의 경우, 사용자는 `1` 대신 패턴 파라미터를 생성하고 파라미터의 기본값을 `\d+`로 설정할 수 있습니다. `\d+` REGEX 문자열은 하나 이상의 십진수와 매칭합니다. `pattern_parameter`이라는 패턴 파라미터를 생성하면 S3 경로가 `s3://amzn-s3-demo-bucket1/example-prefix/example-file-{{pattern_parameter}}.csv`로 표시됩니다.

사용자는 패턴 파라미터를 사용하여 버킷 내 모든 CSV 객체를 매칭시킬 수도 있습니다. 버킷의 모든 객체를 매칭시키려면 기본값이 `.*`인 패턴 파라미터를 생성하고 경로를 `s3://amzn-s3-demo-bucket/{{pattern_parameter}}.csv`로 설정합니다. `.*` 문자는 경로에 있는 모든 문자열 문자와 매칭합니다.

`s3://amzn-s3-demo-bucket/{{pattern_parameter}}.csv` 경로는 다음 데이터세트와 매칭할 수 있습니다.
+ `example-file-1.csv`
+ `other-example-file.csv`
+ `example-file-a.csv`

날짜시간 파라미터는 다음 정보를 포함하는 형식을 저장합니다.
+ Amazon S3 경로 내에서 문자열을 파싱하기 위한 형식.
+ 매칭하는 날짜시간 값을 제한하기 위한 상대 시간 범위

예를 들어, Amazon S3 파일 경로 `s3://amzn-s3-demo-bucket/2020/01/01/example-dataset.csv`에서 2020/01/01은 `year/month/day`의 형식으로 된 날짜시간을 나타냅니다. 사용자는 파라미터의 시간 범위를 `1 years` 또는 `24 hours`와/과 같은 간격으로 설정할 수 있습니다. `1 years`의 간격은 현재 시간과 현재 시간보다 정확히 1년 전 시간 사이에 해당하는 날짜시간을 가진 모든 S3 경로와 매칭합니다. 현재 시간은 데이터에 수행한 변환을 내보내기 시작하는 시간입니다. 데이터 내보내기에 대한 추가 정보는 [내보내기](data-wrangler-data-export.md) 섹션을 참조하세요. 현재 날짜가 2022/01/01이고 시간 범위가 `1 years`인 경우 S3 경로는 다음과 같은 데이터세트와 매칭합니다.
+ s3://amzn-s3-demo-bucket/2021/01/01/example-dataset.csv
+ s3://amzn-s3-demo-bucket/2021/06/30/example-dataset.csv
+ s3://amzn-s3-demo-bucket/2021/12/31/example-dataset.csv

상대 시간 범위 내의 날짜시간 값은 시간이 경과함에 따라 변경됩니다. 상대 시간 범위에 속하는 S3 경로도 다를 수 있습니다.

Amazon S3 파일 경로가 `s3://amzn-s3-demo-bucket1/20200101/example-dataset.csv`인 경우 `20220101`는 날짜시간 파라미터가 될 수 있는 경로의 예입니다.

Data Wrangler 흐름에서 생성한 모든 파라미터의 표를 보려면 Amazon S3 경로가 포함된 텍스트 상자 오른쪽에 있는 `\$1\$1\$1\$1'를 선택합니다. 생성한 파라미터가 더 이상 필요하지 않으면 사용자는 편집하거나 삭제할 수 있습니다. 파라미터를 편집하거나 삭제하려면 파라미터 오른쪽에 있는 아이콘을 선택합니다.

**중요**  
파라미터를 삭제하기 전에 Data Wrangler 흐름의 어느 곳에서도 이를 사용하지 않았음을 확인하세요. 흐름 내에 남아 있는 삭제된 파라미터는 오류를 발생시킬 수 있습니다.

사용자는 Data Wrangler 흐름의 모든 단계에 대한 파라미터를 만들 수 있습니다. 사용자는 생성한 파라미터를 편집하거나 삭제할 수 있습니다. 사용 사례와 더 이상 관련이 없는 데이터에 변환을 적용하는 경우 사용자는 파라미터 값을 수정할 수 있습니다. 파라미터의 값을 수정하면 가져오는 데이터가 변경됩니다.

다음 섹션에서는 파라미터 사용에 대한 추가 예제와 일반 지침을 제공합니다. 사용자는 이 섹션을 사용하여 자신에게 가장 적합한 파라미터를 이해할 수 있습니다.

**참고**  
다음 섹션에는 Data Wrangler 인터페이스를 사용하여 파라미터를 재정의하고 처리 작업을 생성하는 절차가 포함되어 있습니다.  
사용자는 다음 절차를 사용하여 파라미터를 재정의할 수도 있습니다.  
Data Wrangler 흐름을 내보내고 파라미터 값을 재정의하려면 다음을 수행하세요.  
내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.
**Export to(내보내기)**를 선택합니다.
데이터를 내보낼 위치를 선택합니다.
`parameter_overrides`에서 생성한 파라미터에 대해 다른 값을 지정합니다.
Jupyter notebook 실행.

## 패턴을 사용하여 파일에 Data Wrangler 흐름 적용
<a name="data-wrangler-pattern-parameters"></a>

사용자는 파라미터를 사용하여 Data Wrangler 흐름의 변환을 Amazon S3 URI 경로의 패턴과 매칭하는 여러 파일에 적용할 수 있습니다. 이를 통해 S3 버킷에서 매우 구체적으로 변환하려는 파일을 지정할 수 있습니다. 예를 들어 경로가 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv`인 데이터세트가 있을 수 있습니다. 이름이 `example-dataset.csv`인 여러 데이터세트가 다양한 예제 접두사 아래에 저장됩니다. 접두사에 순차적으로 번호가 매겨질 수도 있습니다. 사용자는 Amazon S3 URI에서 숫자 패턴을 생성할 수 있습니다. 패턴 파라미터는 REGEX를 사용하여 표현식의 패턴과 일치하는 파일을 원하는 수만큼 선택합니다. 다음은 유용할 수 있는 REGEX 패턴입니다.
+ `.*`- 개행 문자를 제외한 모든 문자를 0개 이상 매칭합니다
+ `.+`- 개행 문자를 제외한 모든 문자 중 하나 이상과 매칭합니다
+ `\d+`- 하나 이상의 십진수와 매칭합니다
+ `\w+`- 하나 이상의 영숫자 문자와 매칭합니다
+ `[abc-_]{2,4}`- 괄호 세트 내에 제공된 문자 세트로 구성된 문자열(2, 3 또는 4자)을 매칭합니다
+ `abc|def`- 한 문자열 또는 다른 문자열을 매칭합니다. 예를 들어, 연산은 `abc` 또는 `def`와 매칭합니다

사용자는 다음 경로의 각 숫자를 값이 `\d+`인 단일 파라미터로 바꿀 수 있습니다.
+ `s3://amzn-s3-demo-bucket1/example-prefix-3/example-prefix-4/example-prefix-5/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix-8/example-prefix-12/example-prefix-13/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix-4/example-prefix-9/example-prefix-137/example-dataset.csv`

다음 절차는 경로가 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv`인 데이터세트의 패턴 파라미터를 만듭니다.

패턴 파라미터를 생성하려면 다음을 수행합니다.

1. 가져온 데이터 세트 옆의 **Edit dataset(데이터 세트 편집)**를 선택합니다.

1. `example-prefix-0`에 있는 `0`을 강조 표시합니다.

1. 다음 필드에 값을 입력합니다.
   + **Name(이름)** - 파라미터의 이름
   + **Type(유형)** - **패턴**
   + **Value(값)** -**\$1d\$1** 하나 이상의 숫자에 해당하는 정규 표현식

1. **Create(생성)**을 선택합니다.

1. S3 URI 내 `1` 및 `2`를 파라미터로 바꿉니다. 경로는 다음과 같은 형식이어야 합니다: `s3://amzn-s3-demo-bucket1/example-prefix-{{example_parameter_name}}/example-prefix-{{example_parameter_name}}/example-prefix-{{example_parameter_name}}/example-dataset.csv`

다음은 패턴 파라미터를 만드는 일반적인 절차입니다.

1. Data Wrangler 흐름으로 이동합니다.

1. 가져온 데이터 세트 옆의 **Edit dataset(데이터 세트 편집)**를 선택합니다.

1. 패턴 파라미터 값으로 사용 중인 URI의 일부분을 강조 표시합니다.

1. **Create custom parameter(사용자 지정 파라미터 생성)**를 선택합니다.

1. 다음 필드에 값을 입력합니다.
   + **Name(이름)** - 파라미터의 이름
   + **Type(유형)** - **패턴**
   + **Value(값)** - 저장하려는 패턴이 포함된 정규 표현식.

1. **Create(생성)**을 선택합니다.

## 숫자 값을 사용하여 파일에 Data Wrangler 흐름 적용
<a name="data-wrangler-numeric-parameters"></a>

사용자는 파라미터를 사용하여 Data Wrangler 흐름의 변형을 경로가 비슷한 여러 파일에 적용할 수 있습니다. 예를 들어 경로가 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv`인 데이터 세트가 있을 수 있습니다.

`example-prefix-1`의 데이터세트에 적용한 Data Wrangler 흐름의 변환이 있을 수 있습니다. `example-prefix-10`또는 `example-prefix-20`의 `example-dataset.csv`에 동일한 변환을 적용하기를 원할 수도 있습니다.

사용자는 값 `1`을 저장하는 파라미터를 만들 수 있습니다. 변환을 다른 데이터세트에 적용하려는 경우 사용자는 파라미터 값을 다른 값으로 바꾸는 처리 작업을 만들 수 있습니다. 파라미터는 Data Wrangler 흐름의 변형을 새 데이터에 적용하려는 경우 변경할 수 있는 자리 표시자 역할을 합니다. 사용자는 Data Wrangler 처리 작업을 생성하여 Data Wrangler 흐름의 변환을 다른 데이터 세트에 적용할 때 파라미터 값을 재정의할 수 있습니다.

`s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv`을 위한 숫자 파라미터를 생성하려면 다음 절차에 따르세요.

이전 S3 URI 경로에 대한 파라미터를 생성하려면 다음과 같이 하세요.

1. Data Wrangler 흐름으로 이동합니다.

1. 가져온 데이터 세트 옆의 **Edit dataset(데이터 세트 편집)**를 선택합니다.

1. `example-prefix-number`의 예제 접두사에서 숫자를 강조 표시합니다.

1. **Create custom parameter(사용자 지정 파라미터 생성)**를 선택합니다.

1. **Name(이름)**에 파라미터의 이름을 입력합니다.

1. **Type(유형)**에서 **정수**를 선택합니다.

1. **Value(값)**에 숫자를 지정합니다.

1. 이 절차를 반복하여 나머지 숫자에 대한 파라미터를 생성합니다.

파라미터를 만든 후 데이터세트에 변환을 적용하고 해당 변환의 대상 노드를 만드세요. 대상 노드에 대한 추가 정보는 섹션 [내보내기](data-wrangler-data-export.md)을/를 참조하세요.

다음 절차를 사용하여 Data Wrangler 흐름의 변환을 다른 시간 범위에 적용하세요. 흐름의 변환을 위한 대상 노드를 이미 만들었다고 가정합니다.

Data Wrangler 처리 작업에서 숫자 파라미터 값을 변경하려면 다음과 같이 하세요.

1. Data Wrangler 흐름에서 **Create job(작업 생성)**을 선택합니다

1. 날짜시간 파라미터가 포함된 데이터세트에 대한 변환이 포함된 대상 노드만 선택합니다.

1. **Configure job(작업 구성)**을 선택합니다.

1. **Parameters(파라미터)**를 선택합니다.

1. 앞서 생성한 파라미터 이름을 선택합니다.

1. 파라미터 값을 변경합니다.

1. 다른 파라미터에 대해서도 이 절차를 반복합니다.

1. **Run(실행)**을 선택합니다.

## 문자열을 사용하여 파일에 Data Wrangler 흐름 적용
<a name="data-wrangler-string-parameters"></a>

사용자는 파라미터를 사용하여 Data Wrangler 흐름의 변형을 경로가 비슷한 여러 파일에 적용할 수 있습니다. 예를 들어 경로가 `s3://amzn-s3-demo-bucket1/example-prefix/example-dataset.csv`인 데이터세트가 있을 수 있습니다.

`example-prefix`의 데이터세트에 적용한 Data Wrangler 흐름의 변환이 있을 수 있습니다. `another-example-prefix`또는 `example-prefix-20`의 `example-dataset.csv`에 동일한 변환을 적용하기를 원할 수도 있습니다.

사용자는 값 `example-prefix`을 저장하는 파라미터를 만들 수 있습니다. 변환을 다른 데이터세트에 적용하려는 경우 사용자는 파라미터 값을 다른 값으로 바꾸는 처리 작업을 만들 수 있습니다. 파라미터는 Data Wrangler 흐름의 변형을 새 데이터에 적용하려는 경우 변경할 수 있는 자리 표시자 역할을 합니다. 사용자는 Data Wrangler 처리 작업을 생성하여 Data Wrangler 흐름의 변환을 다른 데이터세트에 적용할 때 파라미터 값을 재정의할 수 있습니다.

`s3://amzn-s3-demo-bucket1/example-prefix/example-dataset.csv`의 문자열 파라미터를 생성하려면 다음 절차에 따르세요.

이전 S3 URI 경로에 대한 파라미터를 생성하려면 다음과 같이 하세요.

1. Data Wrangler 흐름으로 이동합니다.

1. 가져온 데이터 세트 옆의 **Edit dataset(데이터 세트 편집)**를 선택합니다.

1. 예제 접두사 `example-prefix`을/를 강조 표시합니다.

1. **Create custom parameter(사용자 지정 파라미터 생성)**를 선택합니다.

1. **Name(이름)**에 파라미터의 이름을 입력합니다.

1. **Type(유형)**에서 **문자열**을 선택합니다.

1. **값**에 접두사를 지정합니다.

파라미터를 만든 후 데이터세트에 변환을 적용하고 해당 변환의 대상 노드를 만드세요. 대상 노드에 대한 추가 정보는 섹션 [내보내기](data-wrangler-data-export.md)을/를 참조하세요.

다음 절차를 사용하여 Data Wrangler 흐름의 변환을 다른 시간 범위에 적용하세요. 흐름의 변환을 위한 대상 노드를 이미 만들었다고 가정합니다.

Data Wrangler 처리 작업에서 숫자 파라미터 값을 변경하려면 다음과 같이 하세요.

1. Data Wrangler 흐름에서 **Create job(작업 생성)**을 선택합니다

1. 날짜시간 파라미터가 포함된 데이터세트에 대한 변환이 포함된 대상 노드만 선택합니다.

1. **Configure job(작업 구성)**을 선택합니다.

1. **Parameters(파라미터)**를 선택합니다.

1. 앞서 생성한 파라미터 이름을 선택합니다.

1. 파라미터 값을 변경합니다.

1. 다른 파라미터에 대해서도 이 절차를 반복합니다.

1. **Run(실행)**을 선택합니다.

## 다양한 날짜시간 범위에 Data Wrangler 흐름 적용
<a name="data-wrangler-datetime-parameters"></a>

날짜시간 파라미터를 사용하여 Data Wrangler 흐름의 변환을 다양한 시간 범위에 적용할 수 있습니다. Amazon S3 URI에서 타임스탬프가 있는 부분을 강조 표시하고 해당 부분에 대한 파라미터를 생성합니다. 파라미터를 생성할 때 현재 시간에서 과거 시간까지의 시간 범위를 지정합니다. 예를 들어 다음과 같은 Amazon S3 URI가 있을 수 있습니다: `s3://amzn-s3-demo-bucket1/example-prefix/2022/05/15/example-dataset.csv`. 사용자는 날짜시간 파라미터로 `2022/05/15`을/를 저장할 수 있습니다. 연도를 시간 범위로 지정하는 경우 시간 범위에는 날짜시간 파라미터가 포함된 처리 작업을 실행한 순간과 정확히 1년 전의 시간이 포함됩니다. 처리 작업을 실행하는 시점이 2022년 9월 6일이나 `2022/09/06`인 경우 시간 범위에는 다음이 포함될 수 있습니다:
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/03/15/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/01/08/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/07/31/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2021/09/07/example-dataset.csv`

Data Wrangler 흐름의 변환은 위의 모든 접두사에 적용됩니다. 처리 작업에서 파라미터 값을 변경해도 Data Wrangler 흐름의 파라미터 값은 변경되지 않습니다. 다른 시간 범위 내의 데이터세트에 변환을 적용하려면 다음을 수행합니다.

1. 사용하려는 모든 변환이 포함된 대상 노드를 생성합니다.

1. Data Wrangler 작업을 생성합니다.

1. 파라미터에 다른 시간 범위를 사용하도록 작업을 구성합니다. 처리 작업에서 파라미터 값을 변경해도 Data Wrangler 흐름의 파라미터 값은 변경되지 않습니다.

대상 노드 및 Data Wrangler 작업에 대한 추가 정보는 [내보내기](data-wrangler-data-export.md)를/을 참조하세요.

다음 절차는 Amazon S3 경로에 대한 날짜시간 파라미터를 생성합니다: `s3://amzn-s3-demo-bucket1/example-prefix/2022/05/15/example-dataset.csv`.

이전 S3 URI 경로에 대한 날짜시간 파라미터를 생성하려면 다음과 같이 하세요.

1. Data Wrangler 흐름으로 이동합니다.

1. 가져온 데이터세트 옆의 **Edit dataset(데이터세트 편집)**를 선택합니다.

1. 날짜시간 파라미터 값으로 사용 중인 URI 부분을 강조 표시합니다.

1. **Create custom parameter(사용자 지정 파라미터 생성)**를 선택합니다.

1. **Name(이름)**에 파라미터의 이름을 입력합니다.

1. **Type(유형)**에서 **날짜시간**을 선택합니다.
**참고**  
기본적으로 Data Wrangler는 날짜 형식을 선택할 수 있는 드롭다운 메뉴를 제공하는 **Predefined(사전 정의)**을 선택합니다. 하지만 사용 중인 타임스탬프 형식은 사용할 수 없을 수도 있습니다. **Predefined(사전 정의)**를 기본 옵션으로 사용하는 대신 사용자는 **Custom(사용자 지정)**을 선택하고 타임스탬프 형식을 수동으로 지정할 수 있습니다.

1. **Date format(날짜 형식)**의 경우 **Predefined(사전 정의)** 다음에 드롭다운 메뉴를 열고 **yyyy/MM/dd**를 선택합니다. **yyyy/MM/dd** 형식은 타임스탬프의 연도/월/일에 해당합니다.

1. **Time zone(표준 시간대)**에서 시간대를 선택합니다.
**참고**  
분석 중인 데이터에 사용자의 시간대와 다른 시간대에서 찍힌 타임스탬프가 있을 수 있습니다. 선택한 시간대가 데이터의 시간대와 일치하는지 확인하세요.

1. **Time range(시간 범위)**에 파라미터의 시간 범위를 지정합니다.

1. (선택 사항) 파라미터를 사용하는 방법을 설명하는 설명을 입력합니다.

1. **생성(Create)**을 선택합니다.

날짜시간 파라미터를 만든 후 데이터세트에 변환을 적용하고 해당 변환의 대상 노드를 만드세요. 대상 노드에 대한 추가 정보는 섹션 [내보내기](data-wrangler-data-export.md)을/를 참조하세요.

다음 절차를 사용하여 Data Wrangler 흐름의 변환을 다른 시간 범위에 적용하세요. 흐름의 변환을 위한 대상 노드를 이미 만들었다고 가정합니다.

Data Wrangler 처리 작업에서 날짜시간 파라미터의 값을 변경하려면 다음과 같이 하세요.

1. Data Wrangler 흐름에서 **Create job(작업 생성)**을 선택합니다

1. 날짜시간 파라미터가 포함된 데이터세트에 대한 변환이 포함된 대상 노드만 선택합니다.

1. **Configure job(작업 구성)**을 선택합니다.

1. **Parameters(파라미터)**를 선택합니다.

1. 앞서 생성한 날짜시간 파라미터 이름을 선택합니다.

1. **Time range(시간 범위)**에서 데이터세트의 시간 범위를 변경합니다.

1. **실행**을 선택합니다.

# 내보내기
<a name="data-wrangler-data-export"></a>

Data Wrangler 흐름에서 데이터 처리 파이프라인에 대해 수행한 변환 중 일부 또는 전부를 내보낼 수 있습니다.

Data Wrangler 흐름은 데이터에 대해 수행한 일련의 데이터 준비 단계입니다.** 데이터 준비 과정에서 데이터에 대한 변환을 한 번 이상 수행합니다. 각 변환은 변환 단계를 사용하여 이루어집니다. 흐름에는 데이터 가져오기와 자신이 수행한 변환을 나타내는 일련의 노드가 있습니다. 노드 예는 다음 이미지를 참조하세요.

![\[Data Wrangler 콘솔의 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-0.png)


앞서 나온 이미지는 두 개의 노드가 있는 Data Wrangler 흐름을 보여줍니다. **Source - sampled** 노드는 데이터를 가져온 데이터 소스를 보여줍니다. **Data types** 노드는 Data Wrangler가 데이터세트를 사용 가능한 형식으로 바꾸도록 변환했음을 나타냅니다.

Data Wrangler 흐름에 추가하는 각 변환은 추가 노드로 나타납니다. 추가할 수 있는 변환에 대한 자세한 내용은 [데이터 변환하기](data-wrangler-transform.md) 섹션을 참조하세요. 다음 이미지는 데이터세트의 열 이름을 변경하기 위해 **Rename-column** 노드가 있는 Data Wrangler 흐름을 보여줍니다.

데이터 변환을 다음으로 내보낼 수 있습니다.
+ Amazon S3
+ 파이프라인
+ Amazon SageMaker 특성 저장소
+ Python 코드

**중요**  
IAM `AmazonSageMakerFullAccess` 관리형 정책을 사용하여 Data Wrangler를 사용할 수 있는 AWS 권한을 부여하는 것이 좋습니다. 관리형 정책을 사용하지 않는 경우 Data Wrangler에 Amazon S3 버킷 액세스 권한을 부여하는 IAM 정책을 사용할 수 있습니다. 정책에 대한 자세한 정보는 [보안 및 권한](data-wrangler-security.md) 섹션을 참조하세요.

데이터 흐름을 내보내면 사용하는 AWS 리소스에 대한 요금이 부과됩니다. 비용 할당 태그를 사용하여 해당 리소스의 비용을 구성하고 관리할 수 있습니다. 사용자 프로필용으로 이러한 태그를 만들면 Data Wrangler가 데이터 흐름을 내보내는 데 사용되는 리소스에 해당 태그를 자동으로 적용합니다. 자세한 내용은 [비용 할당 태그 사용하기](https://docs.aws.amazon.com//awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)를 참조하세요.

## Amazon S3로 내보내기
<a name="data-wrangler-data-export-s3"></a>

Data Wrangler를 사용하면 Amazon S3 버킷 내 위치로 데이터를 내보낼 수 있습니다. 다음 방법 중 하나를 사용하여 위치를 지정할 수 있습니다.
+ 대상 노드 – Data Wrangler가 데이터를 처리한 후 저장하는 위치입니다.
+ 내보낼 위치 – Amazon S3로 변환한 결과 데이터를 내보냅니다.
+ 데이터 내보내기 – 작은 데이터세트의 경우 변환한 데이터를 빠르게 내보낼 수 있습니다.

다음 섹션을 통해 이런 각각의 옵션에 대해 자세히 알아보세요.

------
#### [ Destination Node ]

Amazon S3에 대해 수행한 일련의 데이터 처리 단계를 출력하려면 대상 노드를 생성합니다. 대상 노드는 데이터를 처리한 후 Data Wrangler에 데이터를 저장할 위치를 알려줍니다.** 대상 노드를 생성한 후 데이터를 출력하는 처리 작업을 생성합니다. 처리 작업은 Amazon SageMaker 처리 작업입니다.** 대상 노드를 사용 중인 경우 Amazon S3로 변환한 데이터를 출력하는 데 필요한 계산 리소스가 실행됩니다.

대상 노드를 사용하여 Data Wrangler 흐름에서 수행한 일부 변환 또는 모든 변환을 내보낼 수 있습니다.

여러 대상 노드를 사용하여 다양한 변환 또는 변환 세트를 내보낼 수 있습니다. 다음 예에서는 단일 Data Wrangler 흐름의 두 대상 노드를 보여줍니다.

![\[Data Wrangler 흐름의 두 대상 노드를 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-4.png)


다음 절차에 따라 대상 노드를 생성하고 Amazon S3 버킷으로 내보낼 수 있습니다.

데이터 흐름을 내보내려면 대상 노드와 데이터를 내보내는 Data Wrangler 작업을 생성합니다. Data Wrangler 작업을 생성하면 흐름을 내보내는 SageMaker Processing 작업이 시작됩니다. 대상 노드를 생성한 후 내보내려는 대상 노드를 선택할 수 있습니다.
**참고**  
Data Wrangler 흐름에서 **작업 생성**을 선택하여 처리 작업 사용 지침을 볼 수 있습니다.

대상 노드를 만들려면 다음 절차에 따르세요.

1. 내보내려는 변환을 나타내는 노드 옆의 **\$1**를 선택합니다.

1. **대상 추가**를 선택합니다.  
![\[Data Wrangler 콘솔에서 대상을 추가하는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-add-destination-0.png)

1. **Amazon S3**를 선택합니다.  
![\[Data Wrangler 콘솔에서 대상을 추가하는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-add-destination-S3-selected.png)

1. 다음 필드를 지정합니다.
   + **데이터세트 이름** – 내보내는 데이터세트에 대해 지정하는 이름입니다.
   + **파일 유형** – 내보내는 파일의 형식입니다.
   + **구분 기호**(CSV 및 Parquet 파일만 해당) – 다른 값을 구분하는 데 사용되는 값입니다.
   + **압축**(CSV 및 Parquet 파일만 해당) – 파일 크기를 줄이는 데 사용되는 압축 방법입니다. 다음 압축 방법을 사용할 수 있습니다.
     + bzip2
     + deflate
     + gzip
   + (선택 사항) **Amazon S3 위치** – 파일을 출력하는 데 사용하는 S3 위치입니다.
   + (선택 사항) **파티션 수** – 처리 작업의 출력으로 작성 중인 데이터세트의 수입니다.
   + (선택 사항) **열 기준 분할** – 열에서 동일한 고유 값을 사용하여 모든 데이터를 씁니다.
   + (선택 사항) **추론 파라미터** – **추론 아티팩트 생성**을 선택하면 Data Wrangler 흐름에서 사용한 모든 변환이 추론 파이프라인으로 들어오는 데이터에 적용됩니다. 파이프라인의 모델은 변환된 데이터에 대한 예측을 수행합니다.

1. **대상 추가**를 선택합니다.

다음 절차를 사용하여 처리 작업을 생성합니다.

**데이터 흐름** 페이지에서 작업을 만들고 내보내려는 대상 노드를 선택합니다.
**참고**  
Data Wrangler 흐름에서 **작업 생성**을 선택하여 처리 작업 생성 지침을 볼 수 있습니다.

1. **작업 생성**을 선택합니다. 다음 이미지는 **작업 생성**을 선택한 후 나타나는 창을 보여줍니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 만들기 작업 창의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-create-job.png)

1. **작업 이름**에는 내보내기 작업의 이름을 지정합니다.

1. 내보내려는 대상 노드를 선택합니다.

1. (선택 사항) AWS KMS 키 ARN을 지정합니다. AWS KMS 키는 데이터를 보호하는 데 사용할 수 있는 암호화 키입니다. AWS KMS 키에 대한 자세한 내용은 단원을 참조하십시오[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html).

1. (선택 사항) **훈련된 파라미터**에서 다음을 수행했다면 **재구성**을 선택하세요.
   + 샘플링된 데이터세트
   + 데이터를 사용하여 데이터세트에 새 열을 만드는 변환을 적용했습니다.

   전체 데이터 세트에 대해 수행한 변환을 재구성하는 방법에 대한 자세한 내용은 [변환을 전체 데이터세트로 재구성하고 내보내기](#data-wrangler-data-export-fit-transform) 단원을 참조하세요.
**참고**  
이미지 데이터의 경우 Data Wrangler는 사용자가 수행한 변환을 모든 이미지에 내보냅니다. 자신의 사용 사례에 변환 재구성을 적용할 수는 없습니다.

1. **작업 구성**을 선택합니다. 다음 이미지는 **작업 구성** 페이지를 보여줍니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 구성 작업 페이지의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-configure-job.png)

1. (선택 사항) Data Wrangler 작업을 구성합니다. 다음과 같이 구성할 수 있습니다.
   + **작업 구성**
   + **Spark 메모리 구성**
   + **네트워크 구성**
   + **Tags**
   + **파라미터**
   + **일정 연결**

1. **실행**을 선택합니다.

------
#### [ Export to ]

대상 노드를 사용하는 대신, **내보낼 위치** 옵션으로 Jupyter notebook을 사용하여 Data Wrangler 흐름을 Amazon S3로 내보낼 수 있습니다. Data Wrangler 흐름에서 원하는 데이터 노드를 선택하여 내보낼 수 있습니다. 데이터 노드를 내보내면 노드가 나타내는 변환과 그 이전의 변환이 내보내집니다.

다음 절차에 따라 Jupyter notebook을 생성하고 실행하여 Data Wrangler 흐름을 Amazon S3로 내보냅니다.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **내보낼 위치**를 선택합니다.

1. **(Jupyter notebook을 통해) Amazon S3**를 선택합니다.

1. Jupyter notebook을 실행합니다.  
![\[Data Wrangler 콘솔에서 Data Wrangler 흐름을 내보내는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)

노트북을 실행하면 Data Wrangler 흐름 AWS 리전 과 동일한에서 데이터 흐름(.flow 파일)을 내보냅니다.

노트북은 처리 작업과 처리 작업에서 출력하는 데이터를 구성하는 데 사용할 수 있는 옵션을 제공합니다.

**중요**  
데이터 출력을 구성하기 위한 작업 구성을 제공합니다. 파티셔닝 및 드라이버 메모리 옵션의 경우 이미 알고 있는 경우가 아니면 구성을 지정하지 않는 것이 좋습니다.

**작업 구성**에서 다음을 구성할 수 있습니다.
+ `output_content_type` – 출력 파일의 콘텐츠 유형. 기본 형식으로 `CSV`를 사용하지만 `Parquet`를 지정할 수 있습니다.
+ `delimiter` – CSV 파일에 쓸 때 데이터세트의 값을 구분하는 데 사용되는 문자.
+ `compression` – 설정된 경우 출력 파일을 압축합니다. gzip을 기본 압축 형식으로 사용합니다.
+ `num_partitions` – Data Wrangler가 출력으로 쓰는 파티션 또는 파일 수.
+ `partition_by` – 출력을 분할하는 데 사용하는 열의 이름.

출력 파일 형식을 CSV에서 Parquet로 변경하려면 값을 `"CSV"`에서 `"Parquet"`로 변경합니다. 나머지 선행 필드의 경우 지정하려는 필드가 포함된 줄의 주석 처리를 제거합니다.

**(선택 사항) Spark 클러스터 드라이버 메모리 구성**에서 `config` 사전의 Spark 드라이버 메모리와 같은 작업에 대한 Spark 속성을 구성할 수 있습니다.

다음은 `config` 사전을 보여줍니다.

```
config = json.dumps({
    "Classification": "spark-defaults",
    "Properties": {
        "spark.driver.memory": f"{driver_memory_in_mb}m",
    }
})
```

구성을 처리 작업에 적용하려면 다음 줄의 주석 처리를 제거하세요.

```
# data_sources.append(ProcessingInput(
#     source=config_s3_uri,
#     destination="/opt/ml/processing/input/conf",
#     input_name="spark-config",
#     s3_data_type="S3Prefix",
#     s3_input_mode="File",
#     s3_data_distribution_type="FullyReplicated"
# ))
```

------
#### [ Export data ]

작은 데이터세트에 빠르게 내보내려는 변환이 있는 경우 **데이터 내보내기** 메서드를 사용할 수 있습니다. **데이터 내보내기**를 선택하면 Data Wrangler가 동기식으로 작동하여 Amazon S3로 변환한 데이터를 내보냅니다. 데이터 내보내기를 완료하거나 작업을 취소할 때까지는 Data Wrangler를 사용할 수 없습니다.

Data Wrangler 흐름에서 **데이터 내보내기** 메서드를 사용하는 방법에 대한 자세한 내용은 다음 절차를 참조하세요.

**데이터 내보내기** 메서드를 사용하려면 다음을 수행하세요.

1. Data Wrangler 흐름에서 노드를 열어서(두 번 클릭) 선택합니다.  
![\[Data Wrangler 콘솔에서 데이터를 내보내는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/export-s3.png)

1. 데이터를 내보낼 방법을 구성합니다.

1. **데이터 내보내기**를 선택합니다.

------

데이터 흐름을 Amazon S3 버킷으로 내보낼 경우 Data Wrangler는 흐름 파일의 복사본을 S3 버킷에 저장합니다. 그러면 흐름 파일이 *data\$1wrangler\$1flow* 접두사 아래에 저장됩니다. 기본 Amazon S3 버킷을 사용하여 흐름 파일을 저장하는 경우 `sagemaker-region-account number` 명명 규칙을 사용합니다. 예를 들어, 계정 번호가 111122223333이고 us-east-1에서 Studio Classic을 사용하는 경우 가져온 데이터세트는 `sagemaker-us-east-1-111122223333`에 저장됩니다. 이 예에서는 us-east-1에서 생성된 .flow 파일이 `s3://sagemaker-region-account number/data_wrangler_flows/`에 저장됩니다.

## Pipelines으로 내보내기
<a name="data-wrangler-data-export-pipelines"></a>

대규모 기계 학습(ML) 워크플로를 구축하고 배포하려는 경우 Pipelines을 사용하여 SageMaker AI 작업을 관리하고 배포하는 워크플로를 만들 수 있습니다. Pipelines을 사용하면 SageMaker AI 데이터 준비, 모델 훈련 및 모델 배포 작업을 관리하는 워크플로를 구축할 수 있습니다. Pipelines을 사용하여 SageMaker AI가 제공하는 퍼스트 파티 알고리즘을 사용할 수 있습니다. Pipelines에 대한 자세한 내용은 [SageMaker Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines.html)을 참조하세요.

데이터 흐름에서 Pipelines으로 하나 이상의 단계를 내보내는 경우 Data Wrangler는 파이프라인을 정의, 인스턴스화, 실행, 관리하는 데 사용할 수 있는 Jupyter Notebook을 만듭니다.

### Jupyter notebook을 사용하여 파이프라인 생성하기
<a name="data-wrangler-pipelines-notebook"></a>

다음 절차를 사용하여 Jupyter Notebook을 만들어 Data Wrangler 흐름을 Pipelines으로 내보냅니다.

다음 절차를 사용하여 Jupyter notebook을 생성하고 이를 실행하여 Data Wrangler 흐름을 Pipelines으로 내보냅니다.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **Export to(내보내기)**를 선택합니다.

1. **(Jupyter Notebook을 통해) Pipelines**을 선택합니다.

1. Jupyter notebook을 실행합니다.

![\[Data Wrangler 콘솔에서 Data Wrangler 흐름을 내보내는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


Data Wrangler가 생성하는 Jupyter notebook을 사용하여 파이프라인을 정의할 수 있습니다. 파이프라인에는 Data Wrangler 흐름으로 정의되는 데이터 처리 단계가 포함됩니다.

노트북의 다음 코드에 있는 `steps` 목록에 단계를 추가하여 파이프라인에 다른 단계를 추가할 수 있습니다.

```
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[instance_type, instance_count],
    steps=[step_process], #Add more steps to this list to run in your Pipeline
)
```

파이프라인 정의에 대한 자세한 내용은 [Define SageMaker AI Pipeline](https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html)을 참조하세요.

## 추론 엔드포인트로 내보내기
<a name="data-wrangler-data-export-inference"></a>

Data Wrangler 흐름을 사용하여 Data Wrangler 흐름에서 SageMaker AI 직렬 추론 파이프라인을 생성함으로써 추론 시점에 데이터를 처리합니다. 추론 파이프라인은 훈련된 모델이 새 데이터에 대해 예측하도록 하는 일련의 단계입니다. Data Wrangler 내의 직렬 추론 파이프라인은 원시 데이터를 변환하여 예측을 위해 기계 학습 모델에 제공합니다. Studio Classic 내 Jupyter Notebook에서 추론 파이프라인을 만들고, 실행하고, 관리합니다. 노트북에 액세스하는 방법에 대한 자세한 내용은 [Jupyter notebook을 사용하여 추론 엔드포인트 생성하기](#data-wrangler-inference-notebook) 섹션을 참조하세요.

노트북 내에서 기계 학습 모델을 훈련시키거나 이미 훈련한 모델을 지정할 수 있습니다. Amazon SageMaker Autopilot 또는 XGBoost를 사용하여 Data Wrangler 흐름에서 변환한 데이터를 사용하여 모델을 훈련할 수 있습니다.

파이프라인은 배치 추론 또는 실시간 추론을 수행하는 기능을 제공합니다. SageMaker Model Registry에 Data Wrangler 흐름을 추가할 수도 있습니다. 호스팅 모델에 대한 자세한 내용은 [다중 모델 엔드포인트](multi-model-endpoints.md) 섹션을 참조하세요.

**중요**  
다음과 같은 변환이 있는 경우 Data Wrangler 흐름을 추론 엔드포인트로 내보낼 수 없습니다.  
조인
연결
그룹화 기준
이전 변환을 사용하여 데이터를 준비해야 하는 경우 다음 절차에 따르세요.  
Data Wrangler 흐름을 생성합니다.
지원되지 않는 이전 변환을 적용합니다.
Amazon S3 버킷으로 데이터를 내보냅니다.
별도의 Data Wrangler 흐름을 생성합니다.
이전 흐름에서 내보낸 데이터를 가져옵니다.
나머지 변환을 적용합니다.
당사에서 제공하는 Jupyter notebook을 사용하여 직렬 추론 파이프라인을 생성합니다.
Amazon S3 버킷으로 데이터를 내보내는 방법에 대한 자세한 내용은 [Amazon S3로 내보내기](#data-wrangler-data-export-s3) 섹션을 참조하세요. 직렬 추론 파이프라인을 생성하는 데 사용되는 Jupyter notebook을 여는 방법에 대한 자세한 내용은 [Jupyter notebook을 사용하여 추론 엔드포인트 생성하기](#data-wrangler-inference-notebook) 섹션을 참조하세요.

Data Wrangler는 추론 시 데이터를 제거하는 변환을 무시합니다. 예를 들어 **누락 삭제** 구성을 사용하는 경우 Data Wrangler는 [누락된 값 처리](data-wrangler-transform.md#data-wrangler-transform-handle-missing) 변환을 무시합니다.

변환을 전체 데이터세트에 재구성한 경우 변환은 추론 파이프라인으로 이어집니다. 예를 들어 중앙값을 사용하여 누락된 값을 대입한 경우 변환 재구성의 중앙값이 추론 요청에 적용됩니다. Jupyter notebook을 사용하거나 추론 파이프라인으로 데이터를 내보내는 경우 Data Wrangler 흐름에서 변환을 재구성할 수 있습니다. 변환 재구성에 대한 자세한 내용은 [변환을 전체 데이터세트로 재구성하고 내보내기](#data-wrangler-data-export-fit-transform) 섹션을 참조하세요.

직렬 추론 파이프라인은 입력 및 출력 문자열에 대해 다음 데이터 형식을 지원합니다. 각 데이터 형식에는 일련의 요구 사항이 있습니다.

**지원되는 데이터 형식**
+ `text/csv` – CSV 문자열의 데이터 형식
  + 문자열에는 헤더가 있을 수 없습니다.
  + 추론 파이프라인에 사용되는 특성은 훈련 데이터세트의 특성과 순서가 같아야 합니다.
  + 특성 간에는 쉼표 구분 기호가 있어야 합니다.
  + 레코드는 줄 바꿈 문자로 구분해야 합니다.

  다음은 추론 요청에 제공할 수 있는 유효한 형식의 CSV 문자열의 예입니다.

  ```
  abc,0.0,"Doe, John",12345\ndef,1.1,"Doe, Jane",67890                    
  ```
+ `application/json` – JSON 문자열의 데이터 형식
  + 추론 파이프라인용 데이터세트에 사용되는 특성은 훈련 데이터세트의 특성과 순서가 같아야 합니다.
  + 데이터에는 특정 스키마가 있어야 합니다. 스키마를 일련의 `features`이 있는 단일 `instances` 객체로 정의합니다. 각 `features` 객체는 관측치를 나타냅니다.

  다음은 추론 요청에서 제공할 수 있는 유효한 형식의 JSON 문자열의 예입니다.

  ```
  {
      "instances": [
          {
              "features": ["abc", 0.0, "Doe, John", 12345]
          },
          {
              "features": ["def", 1.1, "Doe, Jane", 67890]
          }
      ]
  }
  ```

### Jupyter notebook을 사용하여 추론 엔드포인트 생성하기
<a name="data-wrangler-inference-notebook"></a>

Data Wrangler 흐름을 내보내 추론 파이프라인을 생성하려면 다음 절차를 따르세요.

Jupyter notebook을 사용하여 추론 파이프라인을 만들려면 다음을 수행하세요.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **Export to(내보내기)**를 선택합니다.

1. **(Jupyter Notebook을 통해) SageMaker AI 추론 파이프라인**을 선택합니다.

1. Jupyter notebook을 실행합니다.

Jupyter notebook을 실행하면 추론 흐름 아티팩트가 생성됩니다. 추론 흐름 아티팩트는 직렬 추론 파이프라인을 생성하는 데 사용되는 추가 메타데이터가 포함된 Data Wrangler 흐름 파일입니다. 내보내는 노드에는 이전 노드의 모든 변환이 포함됩니다.

**중요**  
Data Wrangler가 추론 파이프라인을 실행하려면 추론 흐름 아티팩트가 필요합니다. 자체 흐름 파일을 아티팩트로 사용할 수 없습니다. 이전 절차를 사용하여 생성해야 합니다.

## Python 코드로 내보내기
<a name="data-wrangler-data-export-python-code"></a>

데이터 흐름의 모든 단계를 데이터 처리 워크흐름에 수동으로 통합할 수 있는 Python 파일로 내보내려면 다음 절차를 따르세요.

다음 절차에 따라 Jupyter notebook을 생성하고 실행하여 Data Wrangler 흐름을 Python Code로 내보냅니다.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **내보낼 위치**를 선택합니다.

1. **Python 코드**를 선택합니다.

1. Jupyter notebook을 실행합니다.

![\[Data Wrangler 콘솔에서 Data Wrangler 흐름을 내보내는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


파이프라인에서 실행되도록 Python 스크립트를 구성해야 할 수도 있습니다. 예를 들어 Spark 환경을 실행하는 경우 AWS 리소스에 액세스할 권한이 있는 환경에서 스크립트를 실행하고 있는지 확인합니다.

## Amazon SageMaker 특성 저장소로 내보내기
<a name="data-wrangler-data-export-feature-store"></a>

Data Wrangler를 사용하여 생성한 특성을 Amazon SageMaker 특성 저장소로 내보낼 수 있습니다. 특성은 데이터세트의 열입니다. 특성 저장소는 특성 및 관련 메타데이터를 위한 중앙 집중식 저장소입니다. 특성 저장소를 사용하여 기계 학습(ML) 개발을 위해 큐레이션된 데이터를 생성, 공유, 관리할 수 있습니다. 중앙 집중식 저장소를 사용하면 데이터를 더 쉽게 검색하고 재사용할 수 있습니다. 특성 저장소에 대한 자세한 내용은 [Amazon SageMaker 특성 저장소](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)를 참조하세요.

특성 저장소의 핵심 개념은 특성 그룹입니다. 특성 그룹은 특성, 특성 레코드(관측치), 관련 메타데이터의 모음입니다. 데이터베이스의 테이블과 유사합니다.

Data Wrangler를 사용하여 다음 중 하나를 수행할 수 있습니다.
+ 기존 특성 그룹을 새 레코드로 업데이트합니다. 레코드는 데이터세트의 관측치입니다.
+ Data Wrangler 흐름의 노드에서 새 특성 그룹을 생성합니다. Data Wrangler는 데이터세트의 관측치를 특성 그룹의 레코드로 추가합니다.

기존 특성 그룹을 업데이트하는 경우 데이터세트의 스키마가 특성 그룹의 스키마와 일치해야 합니다. 특성 그룹의 모든 레코드가 데이터세트의 관측치로 바뀝니다.

Jupyter notebook 또는 대상 노드를 사용하여 데이터세트의 관측치로 특성 그룹을 업데이트할 수 있습니다.

Iceberg 테이블 형식의 특성 그룹에 사용자 지정 오프라인 저장소 암호화 키가 있는 경우 이를 사용할 Amazon SageMaker Processing 작업 권한을 사용 중인 IAM에 부여해야 합니다. 최소한, Amazon S3에 쓰는 데이터를 암호화할 권한을 부여해야 합니다. 권한을 부여하려면 IAM 역할에 [GenerateDatakey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)를 사용할 권한을 부여하세요. IAM 역할에 AWS KMS 키 사용 권한을 부여하는 방법에 대한 자세한 내용은 섹션을 참조하세요. [https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) 

------
#### [ Destination Node ]

특성 그룹에 수행한 일련의 데이터 처리 단계를 출력하려는 경우 대상 노드를 생성할 수 있습니다. 대상 노드를 만들고 실행하면 Data Wrangler가 데이터로 특성 그룹을 업데이트합니다. 대상 노드 UI에서 새 특성 그룹을 생성할 수도 있습니다. 대상 노드를 생성한 후 데이터를 출력하는 처리 작업을 생성합니다. 처리 작업은 Amazon SageMaker 처리 작업입니다. 대상 노드를 사용 중인 경우 특성 그룹으로 변환한 데이터를 출력하는 데 필요한 계산 리소스가 실행됩니다.

대상 노드를 사용하여 Data Wrangler 흐름에서 수행한 일부 변환 또는 모든 변환을 내보낼 수 있습니다.

다음 절차에 따라 대상 노드를 만들어 데이터세트의 관측치로 특성 그룹을 업데이트하세요.

대상 노드를 사용하여 특성 그룹을 업데이트하려면 다음을 수행하세요.
**참고**  
Data Wrangler 흐름에서 **작업 생성**을 선택하여 처리 작업을 사용하여 특성 그룹을 업데이트하는 지침을 볼 수 있습니다.

1. 내보내려는 데이터 세트가 들어 있는 노드 옆의 **\$1** 기호를 선택합니다.

1. **대상 추가**에서 **SageMaker AI Feature Store**를 선택합니다.  
![\[Data Wrangler 콘솔에서 대상을 추가하는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/feature-store-destination-node-selection.png)

1. 특성 그룹을 선택(두 번 클릭)합니다. Data Wrangler는 특성 그룹의 스키마가 특성 그룹 업데이트에 사용하는 데이터의 스키마와 일치하는지 확인합니다.

1. (선택 사항) 온라인 저장소와 오프라인 저장소가 모두 있는 특성 그룹에 대해 **오프라인 저장소로만 내보내기**를 선택합니다. 이 옵션을 선택하면 데이터세트의 관측치로만 오프라인 저장소가 업데이트됩니다.

1. Data Wrangler가 데이터세트의 스키마를 검증한 후 **추가**를 선택합니다.

데이터세트의 데이터로 새 특성 그룹을 생성하려면 다음 절차에 따르세요.

다음 방법 중 하나로 특성 그룹을 저장할 수 있습니다.
+ 온라인 – 레코드를 실시간으로 조회할 수 있는 특성 그룹을 위한 지연 시간이 짧고 가용성이 높은 캐시입니다. 온라인 저장소를 사용하면 특성 그룹 내 레코드의 최신 값에 빠르게 액세스할 수 있습니다.
+ 오프라인 – Amazon S3 버킷에 특성 그룹의 데이터를 저장합니다. (1초 미만으로) 짧은 지연 시간의 읽기가 필요하지 않을 때는 데이터를 오프라인으로 저장할 수 있습니다. 데이터 탐색, 모델 훈련, 배치 추론에 사용되는 특성에는 오프라인 저장소를 사용하여 사용할 수 있습니다.
+ 온라인 및 오프라인 모두 – 온라인 저장소와 오프라인 저장소에 모두 데이터를 저장합니다.

대상 노드를 사용하여 특성 그룹을 생성하려면 다음을 수행하세요.

1. 내보내려는 데이터세트가 들어 있는 노드 옆의 **\$1** 기호를 선택합니다.

1. **대상 추가**에서 **SageMaker AI Feature Store**를 선택합니다.

1. **특성 그룹 생성**을 선택합니다.

1. 데이터세트에 이벤트 시간 열이 없는 경우 다음 대화 상자에서 **‘EventTime' 열 생성**을 선택합니다.

1. **다음**을 선택합니다.

1. **JSON 스키마 복사**를 선택합니다. 특성 그룹을 생성할 때 스키마를 특성 정의에 붙여넣습니다.

1. **생성(Create)**을 선택합니다.

1. **특성 그룹 이름**에는 특성 그룹의 이름을 지정합니다.

1. **설명(선택 사항)**에는 특성 그룹을 더 쉽게 검색할 수 있도록 설명을 지정합니다.

1. 온라인 저장소용 특성 그룹을 생성하려면 다음을 수행합니다.

   1. **온라인으로 스토리지 활성화**를 선택합니다.

   1. **온라인 스토어 암호화 키**에서 AWS 관리형 암호화 키 또는 자체 암호화 키를 지정합니다.

1. 오프라인 저장소의 특성 그룹을 생성하려면 다음을 수행합니다.

   1. **오프라인으로 스토리지 활성화**를 선택합니다. 다음 필드의 값을 지정합니다.
      + **S3 버킷 이름** – 특성 그룹을 저장하는 Amazon S3 버킷의 이름입니다.
      + (선택 사항) **데이터세트 디렉터리 이름** – 특성 그룹 저장에 사용하는 Amazon S3 접두사입니다.
      + **IAM 역할 ARN** – 특성 저장소에 대한 액세스 권한이 있는 IAM 역할입니다.
      + **테이블 형식** – 오프라인 저장소의 테이블 형식입니다. **Glue** 또는 **Iceberg**를 지정할 수 있습니다. 기본 형식은 **Glue**입니다.
      + **오프라인 저장소 암호화 키** – 기본적으로, 특성 저장소는 AWS Key Management Service 관리형 키를 사용하지만 이 필드를 사용하여 자체 키를 지정할 수 있습니다.

   1. 다음 필드의 값을 지정합니다.
      + **S3 버킷 이름** – 특성 그룹을 저장하는 버킷의 이름입니다.
      + **(선택 사항) 데이터세트 디렉터리 이름** – 특성 그룹을 저장하는 데 사용하는 Amazon S3 접두사입니다.
      + **IAM 역할 ARN** – 특성 저장소에 대한 액세스 권한이 있는 IAM 역할입니다.
      + **오프라인 저장소 암호화 키** – 기본적으로, 특성 저장소는 AWS 관리형 키를 사용하지만 이 필드를 사용하여 자체 키를 지정할 수 있습니다.

1. **계속**을 선택합니다.

1. **JSON**을 선택합니다.

1. 창에서 자리 표시자 대괄호를 제거합니다.

1. 6단계의 JSON 텍스트를 붙여넣습니다.

1. **계속**을 선택합니다.

1. **레코드 식별자 특성 이름**의 경우 데이터세트의 각 레코드에 대해 고유한 식별자가 있는 데이터세트의 열을 선택합니다.

1. **이벤트 시간 특성 이름**의 경우 타임스탬프 값이 있는 열을 선택합니다.

1. **계속**을 선택합니다.

1. (선택 사항) 특성 그룹을 더 쉽게 찾을 수 있도록 태그를 추가합니다.

1. **계속**을 선택합니다.

1. **특성 그룹 생성**을 선택합니다.

1. Data Wrangler 흐름으로 돌아가서 **특성 그룹** 검색창 옆에 있는 새로 고침 아이콘을 선택합니다.

**참고**  
흐름 내에서 특성 그룹의 대상 노드를 이미 생성한 경우에는 동일한 특성 그룹에 대해 다른 대상 노드를 생성할 수 없습니다. 동일한 특성 그룹에 대해 다른 대상 노드를 생성하려면 다른 흐름 파일을 생성해야 합니다.

Data Wrangler 작업을 생성하려면 다음 절차에 따르세요.

**데이터 흐름** 페이지에서 작업을 만들고 내보내려는 대상 노드를 선택합니다.

1. **작업 생성**을 선택합니다. 다음 이미지는 **작업 생성**을 선택한 후 나타나는 창을 보여줍니다.

1. **작업 이름**에는 내보내기 작업의 이름을 지정합니다.

1. 내보내려는 대상 노드를 선택합니다.

1. (선택 사항) **출력 KMS 키**에서 AWS KMS 키의 ARN, ID 또는 별칭을 지정합니다. KMS 키는 암호화 키입니다. 이 키를 사용하여 작업의 출력 데이터를 암호화할 수 있습니다. AWS KMS 키에 대한 자세한 내용은 단원을 참조하십시오[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html).

1. 다음 이미지는 **작업 구성** 탭이 열려 있는 **작업 구성** 페이지를 보여줍니다.  
![\[Data Wrangler 콘솔의 데이터 흐름 만들기 작업 페이지의 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-configure-job.png)

   (선택 사항) **훈련된 파라미터**에서 다음을 수행했다면 **재구성**을 선택하세요.
   + 샘플링된 데이터세트
   + 데이터를 사용하여 데이터세트에 새 열을 만드는 변환을 적용했습니다.

   전체 데이터세트에 대해 수행한 변환을 재구성하는 방법에 대한 자세한 내용은 [변환을 전체 데이터세트로 재구성하고 내보내기](#data-wrangler-data-export-fit-transform) 섹션을 참조하세요.

1. **작업 구성**을 선택합니다.

1. (선택 사항) Data Wrangler 작업을 구성합니다. 다음과 같이 구성할 수 있습니다.
   + **작업 구성**
   + **Spark 메모리 구성**
   + **네트워크 구성**
   + **Tags**
   + **파라미터**
   + **일정 연결**

1. **실행**을 선택합니다.

------
#### [ Jupyter notebook ]

Jupyter notebook에 대해 다음 절차에 따라 Amazon SageMaker 특성 저장소로 내보냅니다.

다음 절차에 따라 Jupyter notebook을 생성하고 실행하여 Data Wrangler 흐름을 특성 저장소로 내보냅니다.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **내보낼 위치**를 선택합니다.

1. **(Jupyter notebook을 통해) Amazon SageMaker 특성 저장소**를 선택합니다.

1. Jupyter notebook을 실행합니다.

![\[Data Wrangler 콘솔에서 Data Wrangler 흐름을 내보내는 방법을 보여주는 데이터 흐름 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


Jupyter notebook을 실행하면 Data Wrangler 작업이 실행됩니다. Data Wrangler 작업을 실행하면 SageMaker AI 처리 작업이 시작됩니다. 처리 작업에서는 흐름을 온라인 및 오프라인 특성 저장소에 수집합니다.

**중요**  
이 노트북을 실행하는 데 사용하는 IAM 역할에는 AWS 관리형 정책인 `AmazonSageMakerFullAccess` 및 `AmazonSageMakerFeatureStoreAccess`가 연결되어 있어야 합니다.

특성 그룹을 생성할 때 온라인 또는 오프라인 특성 저장소 하나만 활성화하면 됩니다. 둘 다 활성화할 수도 있습니다. 온라인 저장소 생성을 비활성화하려면 `EnableOnlineStore`를 `False`로 설정합니다.

```
# Online Store Configuration
online_store_config = {
    "EnableOnlineStore": False
}
```

노트북은 내보내는 데이터 프레임의 열 이름과 유형을 사용하여 특성 그룹을 생성하는 데 사용되는 특성 그룹 스키마를 생성합니다. 특성 그룹은 레코드를 설명하기 위해 특성 저장소에서 정의된 특성으로 구성된 그룹입니다. 특성 그룹은 특성 그룹에 포함된 스키마와 특성을 정의합니다. 특성 그룹 정의는 특성 목록, 레코드 식별자 특성 이름, 이벤트 시간 특성 이름, 온라인 저장소와 오프라인 저장소의 구성으로 이루어집니다.

특성 그룹의 각 특성은 문자열, 분수 또는 정수 유형 중 하나를 가질 수 있습니다.****** 내보낸 데이터 프레임의 열이 이러한 유형에 속하지 않는 경우 기본값은 `String`입니다.

다음은 특성 그룹 스키마 예제입니다.

```
column_schema = [
    {
        "name": "Height",
        "type": "long"
    },
    {
        "name": "Input",
        "type": "string"
    },
    {
        "name": "Output",
        "type": "string"
    },
    {
        "name": "Sum",
        "type": "string"
    },
    {
        "name": "Time",
        "type": "string"
    }
]
```

또한 레코드 식별자 이름과 이벤트 시간 특성 이름을 지정해야 합니다.
+ 레코드 식별자 이름은 특성 저장소에 정의된 레코드를 고유하게 식별하는 값을 가진 특성의 이름입니다.** 식별자 값마다 최신 레코드만 온라인 저장소에 저장됩니다. 레코드 식별자 특성 이름은 특성 정의 이름 중 하나여야 합니다.
+ 이벤트 시간 특성 이름은 특성 그룹에 레코드의 `EventTime`을 저장하는 특성의 이름입니다.** `EventTime`은 특성 내 레코드의 생성 또는 업데이트에 해당하는 새 이벤트가 발생한 시점을 나타냅니다. 특성 그룹의 모든 레코드에는 그에 해당하는 `EventTime`이 있어야 합니다.

노트북은 이러한 구성을 사용하여 특성 그룹을 생성하고 데이터를 대규모로 처리한 다음, 처리된 데이터를 온라인 및 오프라인 특성 저장소에 수집합니다. 자세히 알아보려면 [데이터 소스 및 수집](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-ingest-data.html)을 참조하세요.

------

노트북은 이러한 구성을 사용하여 특성 그룹을 생성하고 데이터를 대규모로 처리한 다음, 처리된 데이터를 온라인 및 오프라인 특성 저장소에 수집합니다. 자세히 알아보려면 [데이터 소스 및 수집](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-ingest-data.html)을 참조하세요.

## 변환을 전체 데이터세트로 재구성하고 내보내기
<a name="data-wrangler-data-export-fit-transform"></a>

데이터를 가져올 때 Data Wrangler는 데이터 샘플을 사용하여 인코딩을 적용합니다. 기본적으로, Data Wrangler는 처음 50,000개 행을 샘플로 사용하지만 전체 데이터세트를 가져오거나 다른 샘플링 방법을 사용할 수 있습니다. 자세한 내용은 [가져오기](data-wrangler-import.md) 단원을 참조하세요.

다음 변환은 데이터를 사용하여 데이터세트에 열을 생성합니다.
+ [카테고리 인코딩](data-wrangler-transform.md#data-wrangler-transform-cat-encode)
+ [텍스트 특성 추출](data-wrangler-transform.md#data-wrangler-transform-featurize-text)
+ [이상치 처리하기](data-wrangler-transform.md#data-wrangler-transform-handle-outlier)
+ [누락된 값 처리](data-wrangler-transform.md#data-wrangler-transform-handle-missing)

샘플링을 사용하여 데이터를 가져온 경우 이전 변환은 샘플의 데이터만 사용하여 열을 생성합니다. 변환에서 관련 데이터를 모두 사용하지는 않았을 수도 있습니다. 예를 들어 **카테고리 인코딩** 변환을 사용하는 경우 전체 데이터세트에 샘플에는 없는 카테고리가 있었을 수 있습니다.

대상 노드나 Jupyter notebook을 사용하여 변환을 전체 데이터세트에 맞춰 재구성할 수 있습니다. Data Wrangler는 흐름의 변환을 내보낼 때 SageMaker Processing 작업을 생성합니다. 처리 작업이 완료될 때 Data Wrangler는 기본 Amazon S3 위치 또는 사용자가 지정한 S3 위치에 다음 파일을 저장합니다.
+ 데이터세트에 맞게 재구성되는 변환을 지정하는 Data Wrangler 흐름 파일
+ 재구성 변환이 적용된 데이터세트

Data Wrangler 내에서 Data Wrangler 흐름 파일을 열고 변환을 다른 데이터세트에 적용할 수 있습니다. 예를 들어 훈련 데이터세트에 변환을 적용한 경우 Data Wrangler 흐름 파일을 열고 사용하여 추론에 사용되는 데이터세트에 변환을 적용할 수 있습니다.

대상 노드를 사용하여 변환을 재구성하고 내보내는 방법에 대한 자세한 내용은 다음 페이지를 참조하세요.
+ [Amazon S3로 내보내기](#data-wrangler-data-export-s3)
+ [Amazon SageMaker 특성 저장소로 내보내기](#data-wrangler-data-export-feature-store)

다음 절차에 따라 Jupyter notebook을 실행하여 변환을 재구성하고 데이터를 내보냅니다.

Jupyter notebook을 실행하고 변환을 재구성하고 Data Wrangler 흐름을 내보내려면 다음을 수행하세요.

1. 내보내고자 하는 노드 옆에 있는 **\$1**를 선택합니다.

1. **내보낼 위치**를 선택합니다.

1. 데이터를 내보낼 위치를 선택합니다.

1. `refit_trained_params` 객체의 경우 `refit`을 `True`로 설정합니다.

1. `output_flow` 필드의 경우 재구성 변환이 포함된 출력 흐름 파일의 이름을 지정합니다.

1. Jupyter notebook을 실행합니다.

## 새 데이터를 자동으로 처리하는 일정을 생성합니다.
<a name="data-wrangler-data-export-schedule-job"></a>

데이터를 주기적으로 처리하는 경우 처리 작업을 자동으로 실행하는 일정을 생성할 수 있습니다. 예를 들어 새 데이터를 받을 때 처리 작업을 자동으로 실행하는 일정을 생성할 수 있습니다. 처리 작업에 대한 자세한 내용은 [Amazon S3로 내보내기](#data-wrangler-data-export-s3) 및 [Amazon SageMaker 특성 저장소로 내보내기](#data-wrangler-data-export-feature-store) 섹션을 참조하세요.

작업을 생성할 때는 작업을 생성할 권한이 있는 IAM 역할을 지정해야 합니다. 기본적으로 Data Wrangler에 액세스하는 데 사용하는 IAM 역할은 `SageMakerExecutionRole`입니다.

다음 권한을 통해 Data Wrangler가 EventBridge에 액세스하고 EventBridge가 처리 작업을 실행하도록 할 수 있습니다.
+ Data Wrangler에 EventBridge 사용 권한을 제공하는 Amazon SageMaker Studio Classic 실행 역할에 다음 AWS 관리형 정책을 추가합니다.

  ```
  arn:aws:iam::aws:policy/AmazonEventBridgeFullAccess
  ```

  정책에 대한 자세한 내용은 [EventBridge의AWS 관리형 정책](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-identity-based.html#eb-full-access-policy)을 참조하세요.
+ Data Wrangler에서 작업을 생성할 때 지정하는 IAM 역할에 다음 정책을 추가합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "sagemaker:StartPipelineExecution",
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:pipeline/data-wrangler-*"
          }
      ]
  }
  ```

------

  기본 IAM 역할을 사용하는 경우 Amazon SageMaker Studio Classic 실행 역할에 이전 정책을 추가합니다.

  다음 신뢰 정책을 이 역할에 추가하여 EventBridge가 신뢰 정책을 받아들이도록 합니다.

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
  }
  ```

**중요**  
일정을 생성하면 Data Wrangler는 EventBridge에 `eventRule`을 생성합니다. 생성한 이벤트 규칙과 처리 작업 실행에 사용되는 인스턴스에 모두 요금이 부과됩니다.  
EventBridge 요금에 대한 자세한 내용은 [Amazon EventBridge 요금](https://aws.amazon.com/eventbridge/pricing/)을 참조하세요. 처리 작업 요금에 대한 자세한 내용은 [Amazon SageMaker 요금](https://aws.amazon.com/sagemaker/pricing/)을 참조하세요.

다음 방법 중 하나를 사용하여 일정을 설정할 수 있습니다.
+ [CRON 표현식](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html)
**참고**  
Data Wrangler는 다음 표현식을 지원하지 않습니다.  
LW\$1
요일 약어
월 약어
+ [RATE 표현식](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html#eb-rate-expressions)
+ 반복 – 작업을 실행할 시간당 또는 일별 간격을 설정합니다.
+ 특정 시간 – 작업을 실행할 특정한 날과 시간을 설정합니다.

다음 섹션에는 작업 생성 절차가 나와 있습니다.

------
#### [ CRON ]

다음 절차에 따라 CRON 표현식으로 일정을 생성합니다.

CRON 표현식으로 일정을 지정하려면 다음을 수행하세요.

1. Data Wrangler 흐름을 엽니다.

1. **작업 생성**을 선택합니다.

1. (선택 사항) **출력 KMS 키**에서 작업의 출력을 구성할 AWS KMS 키를 지정합니다.

1. **다음, 2. 작업 구성**을 선택합니다.

1. **일정 연결**을 선택합니다.

1. **새 예약 생성**을 선택합니다.

1. **일정 이름**에는 일정의 이름을 지정합니다.

1. **실행 빈도**에는 **CRON**을 선택합니다.

1. 유효한 CRON 표현식을 지정합니다.

1. **생성(Create)**을 선택합니다.

1. (선택 사항) 추가 일정에 따라 작업을 실행하려면 **다른 일정 추가**를 선택합니다.
**참고**  
최대 두 개의 일정을 연결할 수 있습니다. 일정은 독립적이며 시간이 겹치지 않는 한 서로 영향을 주지 않습니다.

1. 다음 중 하나를 선택합니다.
   + **지금 예약 및 실행** – Data Wrangler를 사용하면 작업이 즉시 실행되고 이후에 일정에 따라 실행됩니다.
   + **일정만** – Data Wrangler를 사용하면 지정한 일정에 따라서만 작업이 실행됩니다.

1. **실행**을 선택합니다.

------
#### [ RATE ]

다음 절차에 따라 RATE 표현식으로 일정을 생성합니다.

RATE 표현식으로 일정을 지정하려면 다음을 수행하세요.

1. Data Wrangler 흐름을 엽니다.

1. **작업 생성**을 선택합니다.

1. (선택 사항) **출력 KMS 키**에서 작업의 출력을 구성할 AWS KMS 키를 지정합니다.

1. **다음, 2. 작업 구성**을 선택합니다.

1. **일정 연결**을 선택합니다.

1. **새 예약 생성**을 선택합니다.

1. **일정 이름**에는 일정의 이름을 지정합니다.

1. **실행 빈도**에는 **속도**를 선택합니다.

1. **값**에는 정수를 지정합니다.

1. **단위**에는 다음 중 하나를 선택합니다.
   + **분**
   + **시간**
   + **일**

1. **생성(Create)**을 선택합니다.

1. (선택 사항) 추가 일정에 따라 작업을 실행하려면 **다른 일정 추가**를 선택합니다.
**참고**  
최대 두 개의 일정을 연결할 수 있습니다. 일정은 독립적이며 시간이 겹치지 않는 한 서로 영향을 주지 않습니다.

1. 다음 중 하나를 선택합니다.
   + **지금 예약 및 실행** – Data Wrangler를 사용하면 작업이 즉시 실행되고 이후에 일정에 따라 실행됩니다.
   + **일정만** – Data Wrangler를 사용하면 지정한 일정에 따라서만 작업이 실행됩니다.

1. **실행**을 선택합니다.

------
#### [ Recurring ]

작업을 반복적으로 실행하는 일정을 만들려면 다음 절차에 따르세요.

CRON 표현식으로 일정을 지정하려면 다음을 수행하세요.

1. Data Wrangler 흐름을 엽니다.

1. **작업 생성**을 선택합니다.

1. (선택 사항) **출력 KMS 키**에서 작업의 출력을 구성할 AWS KMS 키를 지정합니다.

1. **다음, 2. 작업 구성**을 선택합니다.

1. **일정 연결**을 선택합니다.

1. **새 예약 생성**을 선택합니다.

1. **일정 이름**에는 일정의 이름을 지정합니다.

1. **실행 빈도**의 경우 **반복**이 기본적으로 선택되어 있는지 확인하세요.

1. **x시간마다** 하루 동안 작업이 실행되는 시간당 빈도를 지정합니다. 유효한 값은 **1** 및 **23**을 포함한 범위의 정수입니다.

1. **지정일**에는 다음 옵션 중 하나를 선택합니다.
   + **매일**
   + **주말**
   + **평일**
   + **요일 선택**

   1. (선택 사항) **요일 선택**을 선택한 경우 작업을 실행할 요일을 선택합니다.
**참고**  
일정이 매일 재설정됩니다. 작업이 5시간마다 실행되도록 예약하면 하루 중 다음 시간에 작업이 실행됩니다.  
00:00
05:00
10:00
15:00
20:00

1. **생성(Create)**을 선택합니다.

1. (선택 사항) 추가 일정에 따라 작업을 실행하려면 **다른 일정 추가**를 선택합니다.
**참고**  
최대 두 개의 일정을 연결할 수 있습니다. 일정은 독립적이며 시간이 겹치지 않는 한 서로 영향을 주지 않습니다.

1. 다음 중 하나를 선택합니다.
   + **지금 예약 및 실행** – Data Wrangler를 사용하면 작업이 즉시 실행되고 이후에 일정에 따라 실행됩니다.
   + **일정만** – Data Wrangler를 사용하면 지정한 일정에 따라서만 작업이 실행됩니다.

1. **실행**을 선택합니다.

------
#### [ Specific time ]

특정 시간에 작업을 실행하는 일정을 생성하려면 다음 절차에 따르세요.

CRON 표현식으로 일정을 지정하려면 다음을 수행하세요.

1. Data Wrangler 흐름을 엽니다.

1. **작업 생성**을 선택합니다.

1. (선택 사항) **출력 KMS 키**에서 작업의 출력을 구성할 AWS KMS 키를 지정합니다.

1. **다음, 2. 작업 구성**을 선택합니다.

1. **일정 연결**을 선택합니다.

1. **새 예약 생성**을 선택합니다.

1. **일정 이름**에는 일정의 이름을 지정합니다.

1. **생성(Create)**을 선택합니다.

1. (선택 사항) 추가 일정에 따라 작업을 실행하려면 **다른 일정 추가**를 선택합니다.
**참고**  
최대 두 개의 일정을 연결할 수 있습니다. 일정은 독립적이며 시간이 겹치지 않는 한 서로 영향을 주지 않습니다.

1. 다음 중 하나를 선택합니다.
   + **지금 예약 및 실행** – Data Wrangler를 사용하면 작업이 즉시 실행되고 이후에 일정에 따라 실행됩니다.
   + **일정만** – Data Wrangler를 사용하면 지정한 일정에 따라서만 작업이 실행됩니다.

1. **실행**을 선택합니다.

------

Amazon SageMaker Studio Classic을 사용하여 실행하도록 예약된 작업을 볼 수 있습니다. 처리 작업은 Pipelines 내에서 실행됩니다. 각 처리 작업에는 자체적인 파이프라인이 있습니다. 파이프라인 내에서 처리 단계로 실행됩니다. 파이프라인 내에서 생성한 일정을 볼 수 있습니다. 파이프라인을 보는 방법에 대한 자세한 내용은 [파이프라인 세부 정보 보기](pipelines-studio-list.md) 섹션을 참조하세요.

예약한 작업을 보려면 다음 절차를 따르세요.

예약한 작업을 보려면 다음을 수행하세요.

1. Amazon SageMaker Studio Classic을 엽니다.

1. Pipelines 열기

1. 생성한 작업의 파이프라인을 확인합니다.

   작업을 실행 중인 파이프라인은 작업 이름을 접두사로 사용합니다. 예를 들어 `housing-data-feature-enginnering`이라는 작업을 생성한 경우 파이프라인의 이름은 `data-wrangler-housing-data-feature-engineering`입니다.

1. 작업이 포함된 파이프라인을 선택합니다.

1. 파이프라인의 상태를 확인합니다. **성공** **상태**인 파이프라인이 처리 작업을 성공적으로 실행했습니다.

처리 작업의 실행을 중지하려면 다음을 수행하세요.

처리 작업의 실행을 중지하려면 일정을 지정하는 이벤트 규칙을 삭제하세요. 이벤트 규칙을 삭제하면 일정과 관련된 모든 작업의 실행이 중지됩니다. 규칙 삭제에 대한 자세한 내용은 [Amazon EventBridge 규칙 비활성화 또는 삭제](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-delete-rule.html)를 참조하세요.

일정과 관련된 파이프라인도 중지하고 삭제할 수 있습니다. 파이프라인 중지에 대한 자세한 내용은 [StopPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html)을 참조하세요. 파이프라인 삭제에 대한 자세한 내용은 [DeletePipeline](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeletePipeline.html#API_DeletePipeline_RequestSyntax)을 참조하세요.

# 데이터 인사이트를 얻기 위해 Amazon SageMaker Studio Classic 노트북의 대화형 데이터 준비 위젯 사용
<a name="data-wrangler-interactively-prepare-data-notebook"></a>

Data Wrangler 데이터 준비 위젯을 사용하여 데이터와 상호 작용하고, 시각화하고, 실행 가능한 인사이트를 탐색하고, 데이터 품질 문제를 해결할 수 있습니다.

Amazon SageMaker Studio Classic 노트북에서 데이터 준비 위젯에 액세스할 수 있습니다. 각 열에 대해 위젯은 분산을 더 잘 이해하는 데 도움이 되는 시각화를 생성합니다. 열에 데이터 품질 문제가 있는 경우 헤더에 경고가 표시됩니다.

데이터 품질 문제를 보려면 경고가 표시된 열 헤더를 선택합니다. 인사이트와 시각화에서 얻은 정보를 사용하여 위젯에 내장된 변환을 적용하여 문제를 해결하는 데 도움이 될 수 있습니다.

예를 들어 위젯은 고유한 값이 하나뿐인 열이 있음을 감지하여 경고를 표시할 수 있습니다. 경고에는 데이터세트에서 열을 삭제할 수 있는 옵션이 제공됩니다.

## 위젯 실행 시작하기
<a name="data-wrangler-interactively-prepare-data-notebook-getting-started"></a>

다음 정보를 이용하여 노트북 실행을 시작하는 데 도움이 될 수 있습니다.

Amazon SageMaker Studio Classic에서 노트북을 엽니다. 노트북을 여는 방법에 대한 자세한 내용은 [Amazon SageMaker Studio Classic 노트북 만들기 또는 열기](notebooks-create-open.md) 섹션을 참조하세요.

**중요**  
위젯을 실행하기 위해 노트북은 다음 이미지 중 하나를 사용해야 합니다.  
Python 3(데이터 과학)와 Python 3.7
Python 3(데이터 과학 2.0)와 Python 3.8
Python 3(데이터 과학 3.0)와 Python 3.10
SparkAnalytics 1.0
SparkAnalytics 2.0
기본 이미지에 대한 자세한 내용은 [Studio Classic 노트북에 사용할 수 있는 Amazon SageMaker 이미지](notebooks-available-images.md) 섹션을 참조하세요.

다음 코드를 사용하여 데이터 준비 위젯과 panda를 가져옵니다. 위젯은 pandas 데이터프레임을 사용하여 데이터를 분석합니다.

```
import pandas as pd
import sagemaker_datawrangler
```

다음 예제 코드는 `df`라는 데이터프레임에 파일을 로드합니다.

```
df = pd.read_csv("example-dataset.csv")
```

pandas 데이터프레임 객체로 로드할 수 있는 모든 형식의 데이터세트를 사용할 수 있습니다. pandas 형식에 대한 자세한 내용은 [IO 도구(텍스트, CSV, HDF5 등)](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)를 참조하세요.

다음 셀은 `df` 변수를 실행하여 위젯을 시작합니다.

```
df
```

데이터프레임 상단에는 다음과 같은 옵션이 있습니다.
+ **Pandas 테이블 보기** - 대화형 시각화와 pandas 테이블 사이를 전환합니다.
+ **데이터세트의 모든 행을 사용하여 인사이트를 계산하세요. 전체 데이터세트를 사용하면 인사이트를 생성하는 데 걸리는 시간이 늘어날 수 있습니다.** - 옵션을 선택하지 않으면 Data Wrangler는 데이터세트의 처음 10,000개 행에 대한 인사이트를 계산합니다.

데이터프레임에는 데이터세트의 처음 1000개 행이 표시됩니다. 각 열 헤더에는 열의 특성을 보여주는 누적 막대 차트가 있습니다. 유효한 값, 잘못된 값, 누락된 값의 비율을 보여줍니다. 누적 막대 차트의 여러 부분을 마우스로 가리키면 계산된 백분율을 확인할 수 있습니다.

각 열의 헤더에는 시각화가 있습니다. 다음은 열에 포함할 수 있는 시각화 유형을 보여줍니다.
+ 카테고리 - 막대 차트
+ 숫자 - 히스토그램
+ 날짜시간 - 막대 차트
+ 텍스트 - 막대 차트

데이터 준비 위젯은 각 시각화에 대해 이상치를 주황색으로 강조 표시합니다.

열을 선택하면 측면 패널이 열립니다. 측면 패널에는 **인사이트** 탭이 표시됩니다. 이 패널에는 다음 유형의 값에 대한 개수가 표시됩니다.
+ 잘못된 값 - 유형이 열 유형과 일치하지 않는 값.
+ 누락된 값 - 누락된 값(예: `NaN` 또는 `None`).
+ 유효한 값 - 누락되거나 무효하지 않은 값.

숫자 열의 경우 **인사이트** 탭에는 다음과 같은 요약 통계가 표시됩니다.
+ 최소값 - 가장 작은 값입니다.
+ 최대값 - 가장 큰 값입니다.
+ 평균 - 값의 평균입니다.
+ 모드 - 가장 자주 나타나는 값입니다.
+ 표준 편차 - 값의 표준 편차입니다.

카테고리 열의 경우 **인사이트** 탭에는 다음과 같은 요약 통계가 표시됩니다.
+ 고유한 값 - 열에서 고유한 값의 수입니다.
+ 최고 - 가장 자주 나타나는 값입니다.

헤더에 경고 아이콘이 있는 열에는 데이터 품질 문제가 있습니다. 열을 선택하면 **데이터 품질** 탭이 열리고 이 탭을 사용하여 문제를 해결하는 데 도움이 되는 변환을 찾을 수 있습니다. 경고는 다음 심각도 수준 중 하나를 가집니다.
+ 낮음 - 분석에 영향을 미치지 않을 수도 있지만 해결하는 데 유용할 수 있는 문제입니다.
+ 보통 - 분석에 영향을 미칠 수 있지만 해결해야 할 중요성은 없는 문제입니다.
+ 높음 - 수정이 강력히 권장되는 심각한 문제입니다.

**참고**  
위젯은 열을 정렬하여 데이터프레임 상단에 데이터 품질 문제가 있는 값을 표시합니다. 또한 문제를 일으키는 값을 강조 표시합니다. 강조 표시의 색상은 심각도 수준에 해당합니다.

**제안된 변환**에서 데이터 품질 문제를 해결할 변환을 선택할 수 있습니다. 위젯은 문제를 해결할 수 있는 여러 변환을 제공할 수 있습니다. 문제에 가장 적합한 변환에 대한 권장 사항을 제공할 수 있습니다. 커서를 변환 위로 가져가면 해당 변환에 대한 자세한 정보를 얻을 수 있습니다.

데이터세트에 변환을 적용하려면 **적용 및 코드 내보내기를** 선택합니다. 변환은 데이터세트를 수정하고 수정된 값으로 시각화를 업데이트합니다. 변환 코드는 노트북의 다음 셀에 표시됩니다. 데이터세트에 추가 변환을 적용하는 경우 위젯은 변환을 셀에 추가합니다. 위젯이 생성하는 코드를 사용하여 다음을 수행할 수 있습니다.
+ 요구 사항에 더 잘 맞도록 사용자 지정하세요.
+ 자체 워크플로에서 사용하세요.

노트북의 모든 셀을 다시 실행하여 수행한 모든 변형을 재현할 수 있습니다.

위젯은 대상 열에 대한 인사이트와 경고를 제공할 수 있습니다. 대상 열은 예측하려는 열입니다. 다음 절차에 따라 대상 열 인사이트를 얻을 수 있습니다.

대상 열 인사이트를 얻으려면 다음을 수행하세요.

1. 대상 열로 사용할 열을 선택합니다.

1. **대상 열로 선택**을 선택합니다.

1. 문제 유형을 선택합니다. 위젯의 인사이트와 경고는 문제 유형에 맞게 조정됩니다. 문제 유형은 다음과 같습니다.
   + **분류** - 대상 열에 카테고리 데이터가 있습니다.
   + **회귀** - 대상 열에 숫자 데이터가 있습니다.

1. **실행**을 선택합니다.

1. (선택 사항) **대상 열 인사이트**에서 제안된 변환 중 하나를 선택합니다.

## 위젯의 인사이트 및 변환에 대한 참조
<a name="data-wrangler-notebook-dataprep-assistant-reference"></a>

기능 열(대상 열이 아닌 열)의 경우 다음과 같은 인사이트를 얻어 데이터세트 관련 문제를 경고할 수 있습니다.
+ **누락된 값** - 열에 `None`, `NaN`(숫자가 아님) 또는 `NaT`(타임스탬프가 아님)와 같은 누락된 값이 있습니다. 많은 기계 학습 알고리즘은 입력 데이터에 누락된 값을 지원하지 않습니다. 따라서 누락된 데이터를 채우거나 행을 삭제하는 것은 중요한 데이터 준비 단계입니다. 누락된 값 경고가 표시되는 경우 다음 변환 중 하나를 사용하여 문제를 해결할 수 있습니다.
  + **누락 삭제** - 누락된 값이 있는 행을 삭제합니다. 누락된 데이터가 있는 행의 비율이 적고 누락된 값을 산입하는 것이 적절하지 않은 경우에는 행을 삭제하는 것이 좋습니다.
  + **새 값으로 바꾸기** - 텍스트로 된 누락된 값을 `Other`로 바꿉니다. 출력 코드에서 `Other`를 다른 값으로 변경할 수 있습니다. 숫자로 된 누락된 값을 0으로 바꿉니다.
  + **평균으로 바꾸기** - 누락된 값을 열의 평균으로 바꿉니다.
  + **중앙값으로 바꾸기** - 누락된 값을 열의 중앙값으로 바꿉니다.
  + **열 삭제** - 데이터세트에서 누락된 값이 있는 열을 삭제합니다. 누락된 데이터가 있는 행의 비율이 높으면 열 전체를 삭제하는 것이 좋습니다.
+ **위장된 누락된 값** - 열에 위장된 누락된 값이 있습니다. 위장된 누락된 값은 누락된 값으로 명시적으로 인코딩되지 않은 값입니다. 예를 들어 누락된 값을 나타내는 데 `NaN`을 사용하는 대신 값은 `Placeholder`가 될 수 있습니다. 다음 변환 중 하나를 사용하여 누락된 값을 처리할 수 있습니다.
  + **누락 삭제** - 누락된 값이 있는 행을 삭제합니다.
  + **새 값으로 바꾸기** - 텍스트로 된 누락된 값을 `Other`로 바꿉니다. 출력 코드에서 `Other`를 다른 값으로 변경할 수 있습니다. 숫자로 된 누락된 값을 0으로 바꿉니다.
+ **상수 열** - 열에는 값이 하나뿐입니다. 따라서 예측력이 없습니다. **열 삭제** 변환을 사용하여 데이터 세트에서 열을 삭제하는 것이 좋습니다.
+ **ID 열** - 열에 반복되는 값이 없습니다. 열의 모든 값은 고유합니다. ID 또는 데이터베이스 키일 수 있습니다. 추가 정보가 없으면 열에 예측력이 없습니다. **열 삭제** 변환을 사용하여 데이터세트에서 열을 삭제하는 것이 좋습니다.
+ **높은 카디널리티** - 열의 고유한 값 비율이 높습니다. 카디널리티가 높으면 카테고리 열의 예측력이 제한됩니다. 분석에서 열의 중요도를 살펴보고 **열 삭제** 변환을 사용하여 열을 삭제하는 방법을 고려해 보세요.

대상 열에 대해 다음과 같은 인사이트를 얻어 데이터세트 관련 문제를 경고할 수 있습니다. 경고와 함께 제공된 제안된 변환을 사용하여 문제를 해결할 수 있습니다.
+ **대상의 혼합 데이터 유형(회귀)** - 대상 열에 숫자가 아닌 값이 있습니다. 데이터 입력 오류가 있을 수 있습니다. 변환할 수 없는 값이 있는 행은 제거하는 것이 좋습니다.
+ **빈번한 레이블** - 대상 열의 특정 값이 회귀 상황에서 일반적인 값보다 더 자주 나타납니다. 데이터 수집 또는 처리에 오류가 있을 수 있습니다. 자주 나타나는 카테고리는 해당 값이 기본값으로 사용되거나 누락된 값을 나타내는 자리 표시자임을 의미할 수 있습니다. 누락된 값을 `Other`로 바꾸려면 **새 값으로 바꾸기** 변환을 사용하는 것이 좋습니다.
+ **클래스당 인스턴스가 너무 적음** - 대상 열에 드물게 나타나는 카테고리가 있습니다. 일부 카테고리에는 대상 열을 유용하게 사용할 수 있을 만큼 행이 충분하지 않습니다. 다음과 같은 변환 중 하나를 사용할 수 있습니다.
  + **희귀 대상 삭제** - 관찰이 10개 미만인 고유한 값을 삭제합니다. 예를 들어, 값이 열에 9번 나타나면 `cat` 값을 삭제합니다.
  + **희귀 대상 바꾸기** - 데이터세트에 거의 나타나지 않는 카테고리를 `Other` 값으로 바꿉니다.
+ **클래스가 너무 불균형함(다중 클래스 분류)** - 데이터세트에 다른 카테고리보다 훨씬 더 자주 나타나는 범주가 있습니다. 클래스 불균형은 예측 정확도에 영향을 미칠 수 있습니다. 가장 정확한 예측을 위해서는 현재 자주 나타나지 않는 카테고리가 있는 행으로 데이터세트를 업데이트하는 것이 좋습니다.
+ **많은 클래스/너무 많은 클래스** - 대상 열에 많은 클래스가 있습니다. 클래스가 많으면 훈련 시간이 길어지거나 예측 품질이 떨어질 수 있습니다. 다음 중 하나를 수행하는 것이 좋습니다.
  + 일부 카테고리를 자체 카테고리로 그룹화. 예를 들어 6개의 카테고리가 밀접하게 관련되어 있는 경우 단일 카테고리를 사용하는 것이 좋습니다.
  + 여러 카테고리에 적용할 수 있는 ML 알고리즘 사용.

# 보안 및 권한
<a name="data-wrangler-security"></a>

Athena 또는 Amazon Redshift에서 데이터를 쿼리하면 쿼리된 데이터 세트가 Studio Classic을 사용하는 AWS 리전의 기본 SageMaker AI S3 버킷에 자동으로 저장됩니다. 또한 Amazon SageMaker Data Wrangler에서 Jupyter notebook을 내보내고 실행하면 데이터 흐름 또는 .flow 파일이 *data\$1wrangler\$1flows*라는 접두사 아래에 동일한 기본 버킷에 저장됩니다.

높은 수준의 보안 요건을 위해 사용자는 이 기본 SageMaker AI S3 버킷에 액세스할 수 있는 AWS 역할을 제한하는 버킷 정책을 구성할 수 있습니다. 다음 섹션을 사용하여 S3 버킷에 이 정책 유형을 추가합니다. 이 페이지의 지침을 따르려면 AWS Command Line Interface ()를 사용합니다AWS CLI. 방법을 알아보려면 IAM 사용 설명서[의 AWS CLI 구성을](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 참조하세요.

또한 Data Wrangler를 사용하는 각 IAM 역할에 필요한 리소스에 액세스할 수 있는 권한을 부여해야 합니다. Data Wrangler에 액세스하는 데 사용하는 IAM 역할에 대한 세분화된 권한이 필요하지 않은 경우, 사용자는 Studio Classic 사용자를 만드는 데 사용하는 IAM 역할에 IAM 관리 정책([https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess))을 추가할 수 있습니다. 이 정책은 Data Wrangler를 사용할 수 있는 모든 권한을 부여합니다. 더 세분화된 권한이 필요한 경우 [Data Wrangler를 사용할 수 있는 IAM 역할 권한 부여](#data-wrangler-security-iam-policy) 섹션을 참조하세요.

## Data Wrangler로 가져온 데이터세트에 대한 액세스를 제한하는 버킷 정책 추가
<a name="data-wrangler-security-bucket-policy"></a>

사용자는 Amazon S3 버킷 정책을 사용하여 Data Wrangler 리소스가 포함된 S3 버킷에 정책을 추가할 수 있습니다. 에서 Studio Classic을 사용하는 AWS 리전의 기본 SageMaker AI S3 버킷에 Data Wrangler가 업로드하는 리소스에는 다음이 포함됩니다.
+ 쿼리한 Amazon Redshift 결과. 이들은 *redshift/* 접두사 아래에 저장됩니다.
+ 쿼리한 Athena 결과. 이들은 *Athena/* 접두사 아래에 저장됩니다.
+ 내보낸 Jupyter notebook Data Wrangler를 실행할 때 Amazon S3에 업로드된 .flow 파일이 생성됩니다. 이러한 파일은 *data\$1wrangler\$1flows/* 접두사 아래에 저장됩니다.

다음 절차를 사용하여 사용자가 해당 버킷에 대한 IAM 역할 액세스를 제한하기 위해 추가할 수 있는 S3 버킷 정책을 생성합니다. S3 버킷에 정책을 추가하는 방법을 알아보려면 [S3 버킷 정책을 추가하려면 어떻게 해야 하나요?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)를 참조합니다.

**Data Wrangler 리소스를 저장하는 S3 버킷에 버킷 정책을 설정하려면:**

1. Data Wrangler에 액세스할 수 있도록 하려는 IAM 역할을 하나 이상 구성합니다.

1. 명령 프롬프트나 쉘을 엽니다. 생성하는 각 역할에 대해 *role-name*을 역할 이름으로 바꾸고 다음을 실행합니다.

   ```
   $ aws iam get-role --role-name role-name
   ```

   응답에는 `AROA`로 시작하는 `RoleId` 문자열이 표시됩니다. 이 문자열을 복사합니다.

1. Data Wrangler를 사용하는 AWS 리전의 SageMaker AI 기본 버킷에 다음 정책을 추가합니다. *region*을 버킷이 위치한 AWS 리전으로 바꾸고 *account-id*를 AWS 계정 ID로 바꿉니다. *AROAEXAMPLEID*로 시작하는 `userId`를 Data Wrangler 사용 권한을 부여하려는 AWS 역할의 IDs로 바꿉니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:*",
         "Resource": [
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/*",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena/*",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift/*"
           
         ],
         "Condition": {
           "StringNotLike": {
             "aws:userId": [
               "AROAEXAMPLEID_1:*",
               "AROAEXAMPLEID_2:*"
             ]
           }
         }
       }
     ]
   }
   ```

------

## Data Wrangler에 대한 허용 목록 만들기
<a name="data-wrangler-security-allowlist"></a>

사용자는 Amazon SageMaker Studio Classic 사용자 인터페이스에서 Data Wrangler를 실행하기 시작할 때마다 SageMaker AI 애플리케이션 프로그래밍 인터페이스(API)를 직접적으로 호출하여 Data Wrangler 애플리케이션을 만듭니다.

조직에서는 기본적으로 사용자에게 이러한 API 직접 호출을 수행할 권한을 제공하지 않을 수 있습니다. 권한을 제공하려면 먼저 [Data Wrangler 허용 목록 예제](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/DataWranglerAllowListExample.txt)의 정책 템플릿을 사용하여 사용자 IAM 역할에 대한 정책을 생성하여 연결해야 합니다.

**참고**  
위의 정책 예제는 사용자에게 Data Wrangler 애플리케이션에 대한 액세스 권한만 제공합니다.

정책 생성에 대한 자세한 내용은 [JSON의 탭에서 정책 생성하기](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)를 참조하세요. 정책을 생성할 때는 [Data Wrangler 허용 목록 예제](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/DataWranglerAllowListExample.txt)에서 JSON 정책을 복사하여 **JSON** 탭에 붙여 넣습니다.

**중요**  
사용자가 다음 작업을 실행하지 못하도록 하는 IAM 정책을 모두 삭제하세요.  
[CreateApp](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateApp.html)
[DescribeApp](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeApp.html)
정책을 삭제하지 않아도 사용자는 여전히 정책의 영향을 받을 수 있습니다.

템플릿을 사용하여 정책을 생성한 후 사용자의 IAM 역할에 정책을 연결하세요. 정책을 연결하는 방법에 대한 자세한 내용은 [IAM 자격 증명 권한 추가(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)를 참조하세요.

## Data Wrangler를 사용할 수 있는 IAM 역할 권한 부여
<a name="data-wrangler-security-iam-policy"></a>

사용자는 일반 IAM 관리 정책 [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)와 함께 IAM 역할에 Data Wrangler를 사용할 권한을 부여할 수 있습니다. 이는 모든 SageMaker AI 서비스를 사용하는 데 필요한 [권한](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-AmazonSageMakerFullAccess.html)을 포함하는 일반 정책입니다. 이 정책은 IAM 역할에 Data Wrangler에 대한 전체 액세스 권한을 부여합니다. `AmazonSageMakerFullAccess`를 사용하여 Data Wrangler에 대한 액세스 권한을 부여할 때 다음 사항을 반드시 숙지해야 합니다.
+ Amazon Redshift에서 데이터를 가져오는 경우 **데이터베이스 사용자 이름**의 접두사는 `sagemaker_access`이어야 합니다.
+ 이 관리 정책은 이름에 `SageMaker AI`,`SageMaker AI`, `sagemaker` 또는 `aws-glue` 중 하나가 포함된 버킷에 대한 액세스 권한만 부여합니다. Data Wrangler를 사용하여 이름에 이러한 구문을 사용하지 않고 S3 버킷에서 가져오려면 이 페이지의 마지막 섹션을 참조하여 IAM 개체에 S3 버킷에 액세스할 수 있는 권한을 부여하는 방법을 알아보세요.

엄격한 보안이 필요한 경우 사용자는 이 섹션의 정책을 IAM 엔티티에 연결하여 Data Wrangler를 사용하는 데 필요한 권한을 부여할 수 있습니다.

Amazon Redshift 또는 Athena에 IAM 역할이 Data Wrangler로부터 가져와야 하는 데이터세트가 있는 경우, 이러한 리소스에 액세스하려면 먼저 해당 엔티티에 정책을 추가해야 합니다. 다음 정책은 사용자가 Amazon Redshift 및 Athena에서 데이터를 가져올 수 있는 권한을 IAM 역할에 부여하는 데 사용할 수 있는 가장 제한적인 정책입니다.

IAM 역할에 사용자 지정 정책을 연결하는 방법을 알아보려면 IAM 사용 설명서의 [IAM 정책 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html#create-managed-policy-console)를 참조합니다.

**Athena 데이터세트 가져오기에 대한 액세스 권한을 부여하는 정책 예제**

다음 정책은 IAM 역할에 별도의 IAM 정책을 통해 데이터가 저장되는 기본 S3 버킷에 액세스할 권한이 있다고 가정합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateTable"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*/sagemaker_tmp_*",
                "arn:aws:glue:*:*:table/sagemaker_featurestore/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:DeleteTable"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*/sagemaker_tmp_*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetTables"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:GetDatabase"
            ],
            "Resource": [
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/sagemaker_featurestore",
                "arn:aws:glue:*:*:database/sagemaker_processing",
                "arn:aws:glue:*:*:database/default",
                "arn:aws:glue:*:*:database/sagemaker_data_wrangler"
            ]
        }
    ]
}
```

------

****Amazon Redshift 데이터세트 가져오기에 대한 액세스 권한을 부여하는 정책 예제****

다음 정책은 이름에 `sagemaker_access` 접두사가 있는 데이터베이스 사용자를 사용하여 Data Wrangler에 Amazon Redshift 연결을 설정할 수 있는 권한을 부여합니다. 추가 데이터베이스 사용자를 사용하여 연결할 수 있는 권한을 부여하려면 다음 정책의 `"Resources"` 아래에 항목을 추가하세요. 다음 정책은 해당되는 경우 IAM 역할에 별도의 IAM 정책을 통해 데이터가 저장되는 기본 S3 버킷에 액세스할 권한이 있다고 가정합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift-data:ExecuteStatement",
                "redshift-data:DescribeStatement",
                "redshift-data:CancelStatement",
                "redshift-data:GetStatementResult",
                "redshift-data:ListSchemas",
                "redshift-data:ListTables"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:*:*:dbuser:*/sagemaker_access*",
                "arn:aws:redshift:*:*:dbname:*"
            ]
        }
    ]
}
```

------

**S3 버킷에 대한 액세스 권한을 부여하기 위한 정책**

데이터세트가 Amazon S3에 저장되어 있는 경우 사용자는 다음과 유사한 정책으로 IAM 역할에 이 버킷에 액세스할 수 있는 권한을 부여할 수 있습니다. 이 예제에서는 *test*라는 이름의 버킷에 프로그램 차원의 읽기-쓰기 액세스 권한을 부여합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}
```

------

Athena 및 Amazon Redshift에서 데이터를 가져오려면 사용 중인 AWS 리전 Data Wrangler의 기본 Amazon S3 버킷에서 다음 접두사에 액세스할 수 있는 IAM 역할 권한을 부여해야 합니다. `athena/`, `redshift/`. 리전에 기본 Amazon S3 버킷이 아직 없는 AWS 경우 IAM 역할에도이 리전에 버킷을 생성할 수 있는 권한을 부여해야 합니다.

또한 IAM 역할이 Amazon SageMaker Feature Store, Pipelines, Data Wrangler 작업 내보내기 옵션을 사용할 수 있게 하려면 먼저 이 버킷의 `data_wrangler_flows/` 접두사에 대한 액세스 권한을 부여해야 합니다.

 Data Wrangler는 `athena/` 및 `redshift/` 접두사를 사용하여 미리 보기 파일과 가져온 데이터세트를 저장합니다. 자세한 내용은 [가져온 데이터 스토리지](data-wrangler-import.md#data-wrangler-import-storage) 단원을 참조하세요.

Data Wrangler는 Data Wrangler에서 내보낸 Jupyter notebook을 실행할 때 `data_wrangler_flows/` 접두사를 사용하여 .flow 파일을 저장합니다. 자세한 내용은 [내보내기](data-wrangler-data-export.md) 단원을 참조하세요.

다음과 유사한 정책을 사용하여 이전 단락에 설명된 권한을 부여하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/*",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena/*",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::sagemaker-us-east-1-111122223333"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Amazon S3 버킷 URI를 지정하여 다른 AWS 계정에서 Amazon S3 버킷의 데이터에 액세스할 수도 있습니다. 이렇게 하려면 다른 계정의 Amazon S3 버킷에 대한 액세스 권한을 부여하는 IAM 정책은 다음 예와 비슷한 정책을 사용해야 합니다. 여기서 `BucketFolder`는 사용자 버킷 `UserBucket`에 있는 특정 디렉터리입니다. 다른 사용자에게 버킷에 대한 액세스 권한을 부여하는 사용자에게 이 정책을 추가해야 합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::UserBucket/BucketFolder/*"
            },
                {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": "arn:aws:s3:::UserBucket",
                "Condition": {
                "StringLike": {
                    "s3:prefix": [
                    "BucketFolder/*"
                    ]
                }
            }
        } 
    ]
}
```

------

버킷 소유자가 아닌 버킷에 액세스하는 사용자는 다음 예제와 비슷한 정책을 사용자에게 추가해야 합니다. 참고로 아래의 `AccountX` 및 `TestUser`는/은 각각 버킷 소유자와 해당 사용자를 가리킵니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/TestUser"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::UserBucket/BucketFolder/*"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/TestUser"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::UserBucket"
            ]
        }
    ]
}
```

------

**SageMaker AI Studio 사용에 대한 액세스 권한을 부여하는 정책 예시**

다음과 같은 정책을 사용하여 Studio Classic 인스턴스를 설정하는 데 사용할 수 있는 IAM 실행 역할을 만듭니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:DescribeUserProfile",
                "sagemaker:ListUserProfiles",
                "sagemaker:*App",
                "sagemaker:ListApps"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Snowflake 및 Data Wrangler
<a name="data-wrangler-security-snowflake"></a>

 AWS 리소스에 대한 모든 권한은 Studio Classic 인스턴스에 연결된 IAM 역할을 통해 관리됩니다. Snowflake 관리자는 각 Snowflake 사용자에게 세분화된 권한과 허가를 부여할 수 있으므로 Snowflake 관련 권한을 관리합니다. 여기에는 데이터베이스, 스키마, 테이블, 웨어하우스 및 스토리지 통합 객체가 포함됩니다. 먼저 Data Wrangler 외부에서 올바른 권한이 설정되었는지 확인해야 합니다.

참고로 Snowflake `COPY INTO Amazon S3` 명령은 기본적으로 공용 인터넷을 통해 Snowflake에서 Amazon S3로 데이터를 이동하지만 전송 중인 데이터는 SSL을 사용하여 보호됩니다. Amazon S3에 저장된 데이터는 기본값 AWS KMS key을 사용하여 SSE-KMS로 암호화됩니다.

Snowflake 자격 증명 스토리지와 관련하여 Data Wrangler는 고객 자격 증명을 저장하지 않습니다. Data Wrangler는 Secrets Manager를 사용하여 자격 증명을 비밀로 저장하고 모범 사례 보안 계획의 일환으로 보안 암호를 교체합니다. Snowflake 또는 Studio Classic 관리자는 데이터 과학자의 Studio Classic 실행 역할에 자격 증명을 저장하는 보안 암호에 `GetSecretValue`를 수행할 권한이 부여되었는지 확인해야 합니다. Studio Classic 실행 역할에 이미 연결되어 있는 경우 `AmazonSageMakerFullAccess` 정책에는 Data Wrangler가 만든 보안 암호와 위 지침의 이름 지정 및 태그 지정 규칙에 따라 만든 암호를 읽을 수 있는 필수 권한이 있습니다. 규칙을 따르지 않는 보안 암호에는 별도로 액세스 권한을 부여해야 합니다. 보안되지 않은 채널을 통한 자격 증명 공유를 방지하려면 Secrets Manager를 사용하는 것이 좋습니다. 하지만 로그인한 사용자는 Studio Classic에서 터미널 또는 Python 노트북을 실행한 다음 Secrets Manager API에서 API 직접 호출을 실행하여 일반 텍스트 암호를 검색할 수 있습니다.

## 를 사용한 데이터 암호화 AWS KMS
<a name="data-wrangler-security-kms"></a>

Data Wrangler 내에서 사용자는 암호화된 파일을 해독하여 Data Wrangler 흐름에 추가할 수 있습니다. 기본 AWS KMS 키 또는 제공한 키를 사용하여 변환의 출력을 암호화할 수도 있습니다.

사용자는 다음과 같은 경우 파일을 가져올 수 있습니다.
+ 서버 측 암호화
+ SSE-KMS를 암호화 유형으로 사용

파일을 해독하고 Data Wrangler 흐름으로 가져오려면 먼저 사용 중인 SageMaker Studio Classic 사용자를 주요 사용자로 추가해야 합니다.

다음 스크린샷은 주요 사용자로 추가된 Studio Classic 사용자 역할을 보여줍니다. 왼쪽 패널 아래에 있는 사용자에 액세스하여 변경하려면 [IAM 역할](https://console.aws.amazon.com/iam/home#/roles)을 참조하세요.

![\[콘솔의 키 사용자 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/data-wrangler-kms.png)


### Data Wrangler에서 가져온 데이터 스토리지를 위한 Amazon S3 고객 관리형 키 설정
<a name="data-wrangler-s3-cmk-setup"></a>

 기본적으로 Data Wrangler는 다음과 같은 명명 규칙을 가진 Amazon S3 버킷을 사용합니다: `sagemaker-region-account number`. 예를 들어, 계정 번호가 `111122223333`이고 us-east-1에서 Studio Classic을 사용하는 경우 가져온 데이터세트는 `sagemaker-us-east-1-111122223333`과 같은 명명 규칙에 따라 저장됩니다.

다음 지침은 기본 Amazon S3 버킷의 고객 관리형 키를 설정하는 방법을 설명합니다.

1. 서버 측 암호화를 활성화하고 기본 S3 버킷의 고객 관리형 키를 설정하려면 [KMS 암호화 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)을 참조하세요.

1. 1단계를 수행한 후 AWS KMS 에서 로 이동합니다 AWS Management Console. 이전 단계의 1단계에서 선택한 고객 관리형 키를 찾아 키 사용자로서 Studio Classic 역할을 추가합니다. 이렇게 하려면 [주요 사용자에게 고객 관리형 키를 사용할 수 있도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users) 지침을 따릅니다.

### 내보내는 데이터 암호화
<a name="data-wrangler-export-kms"></a>

사용자는 다음 방법 중 하나를 사용하여 내보내는 데이터를 암호화할 수 있습니다.
+ Amazon S3 버킷에 객체 사용 SSE-KMS 암호화가 포함되도록 지정합니다.
+ Data Wrangler에서 내보내는 데이터를 암호화할 AWS KMS 키를 지정합니다.

**데이터 내보내기** 페이지에서 **AWS KMS 키 ID 또는 ARN** 값을 지정합니다.

 AWS KMS 키 사용에 대한 자세한 내용은 [(SSE-KMS)에 AWSAWS Key Management Service 저장된 AWS KMS 키를 사용한 서버 측 암호화를 사용하여 데이터 보호를 참조하세요](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingKMSEncryption.html).

## Amazon AppFlow 권한
<a name="data-wrangler-appflow-permissions"></a>

전송할 때는 먼저 전송을 수행할 권한이 있는 IAM 역할을 지정해야 합니다. 사용자는 Data Wrangler를 사용할 권한이 있는 동일한 IAM 역할을 사용할 수 있습니다. 기본적으로 Data Wrangler에 액세스하는 데 사용하는 IAM 역할은 `SageMakerExecutionRole`입니다.

또한 IAM 역할에는 다음과 같은 권한이 있어야 합니다.
+ Amazon AppFlow 권한
+  AWS Glue 데이터 카탈로그에 대한 권한
+ 가 사용 가능한 데이터 소스를 AWS Glue 검색할 수 있는 권한

전송을 실행하면 Amazon AppFlow는 전송의 메타데이터를 AWS Glue 데이터 카탈로그에 저장합니다. Data Wrangler는 카탈로그의 메타데이터를 사용하여 사용자가 해당 데이터를 쿼리하고 가져올 수 있는지 여부를 결정합니다.

Amazon AppFlow에 권한을 추가하려면 `AmazonAppFlowFullAccess` AWS 관리형 정책을 IAM 역할에 추가합니다. 정책을 추가하는데 대한 추가 정보는 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

Amazon S3로 데이터를 전송하는 경우 먼저 다음 정책도 첨부해야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketTagging",
        "s3:ListBucketVersions",
        "s3:CreateBucket",
        "s3:ListBucket",
        "s3:GetBucketPolicy",
        "s3:PutEncryptionConfiguration",
        "s3:GetEncryptionConfiguration",
        "s3:PutBucketTagging",
        "s3:GetObjectTagging",
        "s3:GetBucketOwnershipControls",
        "s3:PutObjectTagging",
        "s3:DeleteObject",
        "s3:DeleteBucket",
        "s3:DeleteObjectTagging",
        "s3:GetBucketPublicAccessBlock",
        "s3:GetBucketPolicyStatus",
        "s3:PutBucketPublicAccessBlock",
        "s3:PutAccountPublicAccessBlock",
        "s3:ListAccessPoints",
        "s3:PutBucketOwnershipControls",
        "s3:PutObjectVersionTagging",
        "s3:DeleteObjectVersionTagging",
        "s3:GetBucketVersioning",
        "s3:GetBucketAcl",
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetAccountPublicAccessBlock",
        "s3:ListAllMyBuckets",
        "s3:GetAnalyticsConfiguration",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

 AWS Glue 권한을 추가하려면 `AWSGlueConsoleFullAccess` 관리형 정책을 IAM 역할에 추가합니다. Amazon AppFlow AWS Glue 권한에 대한 자세한 내용은 [link-to-appflow-page]를 참조하세요.

전송한 데이터를 가져오려면 Amazon AppFlow에서 AWS Glue 및 Data Wrangler에 액세스해야 합니다. Amazon AppFlow 액세스 권한을 부여하려면 IAM 역할에 다음 신뢰 정책을 추가합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root",
                "Service": [
                    "appflow.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

Data Wrangler에 Amazon AppFlow 데이터를 표시하려면 IAM 역할에 다음 정책을 추가하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:SearchTables",
            "Resource": [
                "arn:aws:glue:*:*:table/*/*",
                "arn:aws:glue:*:*:database/*",
                "arn:aws:glue:*:*:catalog"
            ]
        }
    ]
}
```

------

## Data Wrangler에서 수명 주기 구성 사용하기
<a name="data-wrangler-lifecycle-configuration"></a>

커널 게이트웨이 애플리케이션을 실행하도록 구성된 Amazon EC2 인스턴스는 있지만 Data Wrangler 애플리케이션은 없을 수 있습니다. 커널 게이트웨이 애플리케이션은 Studio Classic 노트북 및 터미널을 실행하는 데 사용하는 환경 및 커널에 대한 액세스를 제공합니다. Data Wrangler 애플리케이션은 Data Wrangler를 실행하는 UI 애플리케이션입니다. Data Wrangler 인스턴스가 아닌 Amazon EC2 인스턴스는 Data Wrangler를 실행하려면 수명 주기 구성을 수정해야 합니다. 수명 주기 구성은 Amazon SageMaker Studio Classic 환경의 사용자 지정을 자동화하는 쉘 스크립트입니다.

수명 주기 구성에 대한 추가 정보는 [수명 주기 구성을 사용하여 Amazon SageMaker Studio Classic 사용자 지정](studio-lcc.md) 섹션을 참조하세요.

인스턴스의 기본 수명 주기 구성은 Data Wrangler 사용을 지원하지 않습니다. 인스턴스에서 Data Wrangler를 사용하도록 사용자는 기본 구성을 다음과 같이 수정할 수 있습니다.

```
#!/bin/bash
set -eux
STATUS=$(
python3 -c "import sagemaker_dataprep"
echo $?
)
if [ "$STATUS" -eq 0 ]; then
echo 'Instance is of Type Data Wrangler'
else
echo 'Instance is not of Type Data Wrangler'

# Replace this with the URL of your git repository
export REPOSITORY_URL="https://github.com/aws-samples/sagemaker-studio-lifecycle-config-examples.git"

git -C /root clone $REPOSTIORY_URL

fi
```

사용자는 스크립트를 `lifecycle_configuration.sh`로 저장할 수 있습니다.

수명 주기 구성을 Studio Classic 도메인 또는 사용자 프로필에 연결합니다. 수명 주기 구성 생성 및 연결에 대한 추가 정보는 [수명 주기 구성 생성 및 Amazon SageMaker Studio Classic과 연결](studio-lcc-create.md) 섹션을 참조합니다.

다음 지침은 Studio Classic 도메인 또는 사용자 프로필에 수명 주기 구성을 연결하는 방법을 보여줍니다.

수명 주기 구성을 만들거나 연결할 때 오류가 발생할 수 있습니다. 수명 주기 구성 오류 디버깅에 대해서는 [KernelGateway 앱 실패](studio-lcc-debug.md#studio-lcc-debug-kernel) 섹션을 참조하세요.

# 릴리스 정보
<a name="data-wrangler-release-notes"></a>

Data Wrangler는 새 기능과 버그 수정으로 정기적으로 업데이트됩니다. Studio Classic에서 사용 중인 Data Wrangler 버전을 업그레이드하려면 [Amazon SageMaker Studio Classic 앱 종료 및 업데이트](studio-tasks-update-apps.md)의 지침을 따르세요.


****  

| 릴리스 정보 | 
| --- | 
|  **8/31/2023** 새로운 기능: 이제 전체 데이터세트에 대한 데이터 품질 및 인사이트 보고서를 만들 수 있습니다. 자세한 내용은 [데이터 및 데이터 품질에 대한 인사이트 확보](data-wrangler-data-insights.md) 단원을 참조하십시오. **5/20/2023** 새로운 기능: 이제 Salesforce 데이터 클라우드에서 데이터를 가져올 수 있습니다. 자세한 내용은 [Salesforce 데이터 클라우드에서 데이터를 가져옵니다.](data-wrangler-import.md#data-wrangler-import-salesforce-data-cloud) 단원을 참조하십시오. **4/18/2023** 새로운 기능: 이제 Amazon Personalize가 해석할 수 있는 형식으로 데이터를 가져올 수 있습니다. 자세한 내용은 [Amazon Personalize용 행 매핑](data-wrangler-transform.md#data-wrangler-transform-personalize) 단원을 참조하십시오. **3/1/2023** 새로운 기능: 이제 Hive를 사용하여 Amazon EMR에서 데이터를 가져올 수 있습니다. 자세한 내용은 [Amazon EMR에서 데이터 가져오기](data-wrangler-import.md#data-wrangler-emr) 단원을 참조하십시오. **12/10/2022** 새로운 기능: 이제 Data Wrangler 플로우를 추론 엔드포인트로 내보낼 수 있습니다. 자세한 내용은 [추론 엔드포인트로 내보내기](data-wrangler-data-export.md#data-wrangler-data-export-inference) 단원을 참조하십시오. 새로운 기능: 이제 대화형 노트북 위젯을 사용하여 데이터를 준비할 수 있습니다. 자세한 내용은 [데이터 인사이트를 얻기 위해 Amazon SageMaker Studio Classic 노트북의 대화형 데이터 준비 위젯 사용](data-wrangler-interactively-prepare-data-notebook.md) 단원을 참조하십시오. 새로운 기능: 이제 SaaS 플랫폼에서 데이터를 가져올 수 있습니다. 자세한 내용은 [서비스형 소프트웨어(SaaS) 플랫폼에서 데이터 가져오기](data-wrangler-import.md#data-wrangler-import-saas) 단원을 참조하십시오. **10/12/2022** 새로운 기능: 이제 다양한 데이터세트에 대해 데이터 플로우를 재사용할 수 있습니다. 자세한 내용은 [다양한 데이터세트에 데이터 흐름 재사용](data-wrangler-parameterize.md) 단원을 참조하십시오. **10/05/2022** 새로운 기능: 이제 보안 주체 구성 요소 분석(PCA)을 변환으로 사용할 수 있습니다. 자세한 내용은 [데이터세트 내 차원 축소](data-wrangler-transform.md#data-wrangler-transform-dimensionality-reduction) 단원을 참조하십시오. **10/05/2022** 새로운 기능: 이제 Data Wrangler 플로우에서 파라미터를 재구성할 수 있습니다. 자세한 내용은 [내보내기](data-wrangler-data-export.md) 단원을 참조하십시오. **10/03/2022** 새로운 기능: 이제 Data Wrangler 플로우에서 모델을 배포할 수 있습니다. 자세한 내용은 [데이터 플로우에서 모델 자동 훈련하기](data-wrangler-autopilot.md) 단원을 참조하십시오. **9/20/2022** 새로운 기능: 이제 Athena에서 데이터 보존 기간을 설정할 수 있습니다. 자세한 내용은 [Athena에서 데이터 가져오기](data-wrangler-import.md#data-wrangler-import-athena) 단원을 참조하십시오. **6/9/2022** 새로운 기능: 이제 Amazon SageMaker Autopilot을 사용하여 Data Wrangler 플로우에서 직접 모델을 훈련할 수 있습니다. 자세한 내용은 [데이터 플로우에서 모델 자동 훈련하기](data-wrangler-autopilot.md) 단원을 참조하십시오. **5/6/2022** 새로운 기능: 이제 m5 및 r5 인스턴스를 추가로 사용할 수 있습니다. 자세한 내용은 [인스턴스](data-wrangler-data-flow.md#data-wrangler-data-flow-instances) 단원을 참조하십시오. **4/27/2022** 새로운 기능: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) **4/1/2022** 새로운 기능: 이제 Databricks를 데이터 소스로 사용할 수 있습니다. 자세한 내용은 [Data Bricks에서 데이터 가져오기(JDBC)](data-wrangler-import.md#data-wrangler-databricks) 단원을 참조하십시오. **2/2/2022** 새로운 기능: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) **10/16/2021** 새로운 기능: Data Wrangler는 이제 Athena 워크그룹을 지원합니다. 자세한 내용은 [Athena에서 데이터 가져오기](data-wrangler-import.md#data-wrangler-import-athena) 단원을 참조하십시오. **10/6/2021** 새로운 기능: Data Wrangler는 이제 시계열 데이터 변환을 지원합니다. 자세한 내용은 [시계열 변환](data-wrangler-transform.md#data-wrangler-transform-time-series) 단원을 참조하십시오. **7/15/2021** 새로운 기능: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) 개선 사항: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html)  버그 수정: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) **4/26/2021**  개선 사항: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) 버그 수정: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) **2/8/2021**  새로운 기능: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) 개선 사항: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html) 버그 수정: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/data-wrangler-release-notes.html)  | 

# 문제 해결
<a name="data-wrangler-trouble-shooting"></a>

Amazon SageMaker Data Wrangler를 사용할 때 문제가 발생하면 다음을 수행하는 것이 좋습니다.
+ 오류 메시지가 제공되면 메시지를 읽고 가능한 경우 보고된 문제를 해결하세요.
+ Studio Classic 사용자의 IAM 역할에 작업을 수행하는 데 필요한 권한이 있는지 확인하세요. 자세한 내용은 [보안 및 권한](data-wrangler-security.md) 단원을 참조하십시오.
+ Amazon Redshift 또는 Athena와 같은 다른 AWS 서비스에서 가져오려고 할 때 문제가 발생하면 데이터 가져오기를 수행하는 데 필요한 권한과 리소스를 구성했는지 확인합니다. 자세한 내용은 [가져오기](data-wrangler-import.md) 단원을 참조하십시오.
+ 그래도 문제가 지속되면 화면 오른쪽 상단에서 **도움 받기**를 선택하여 Data Wrangler 팀에 문의하세요. 자세한 내용은 다음 이미지를 참조하세요.  
![\[Data Wrangler 콘솔에서 Data Wrangler 도움말 양식의 위치입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/get-help/get-help.png)  
![\[Data Wrangler 콘솔에서 Data Wrangler 도움말 양식입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/get-help/get-help-forms.png)

최후의 수단으로 Data Wrangler가 실행 중인 커널을 다시 시작해 볼 수 있습니다.

1. 커널을 재시작할 .flow 파일을 저장하고 종료합니다.

1. 다음 이미지와 같이 ****실행 중인 터미널 및 커널**** 아이콘을 선택합니다.  
![\[콘솔에서 실행 중인 터미널 및 커널 아이콘의 위치입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/stop-kernel-option.png)

1. 다음 이미지와 같이 커널을 종료하려는 .flow 파일 오른쪽에 있는 **중지** 아이콘을 선택합니다.  
![\[콘솔에서 중지 아이콘의 위치입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/mohave/stop-kernel.png)

1. 브라우저를 새로 고칩니다.

1. 작업 중인 .flow 파일을 다시 엽니다.

## Amazon EMR 관련 문제 해결
<a name="data-wrangler-trouble-shooting-emr"></a>

다음 정보를 사용하면 Amazon EMR을 사용할 때 발생할 수 있는 오류를 해결하는 데 도움이 됩니다.
+ 연결 실패 - 다음 `The IP address of the EMR cluster isn't private error message` 메시지와 함께 연결이 실패하면 Amazon EMR 클러스터가 프라이빗 서브넷에서 시작되지 않았을 수 있습니다. 보안 모범 사례로서 Data Wrangler는 프라이빗 Amazon EMR 클러스터에 대한 연결만 지원합니다. 프라이빗 EC2 서브넷을 선택하여 EMR 클러스터를 시작합니다.
+ 연결 중단 및 시간 초과 - 이 문제는 네트워크 연결 문제 때문일 가능성이 큽니다. 클러스터에 연결하기 시작한 후 화면이 새로 고쳐지지 않습니다. 약 2분 후에 다음 `JdbcAddConnectionError: An error occurred when trying to connect to presto: xxx: Connect to xxx failed: Connection timed out (Connection timed out) will display on top of the screen.` 오류가 표시될 수 있습니다.

  오류에는 두 가지 근본 원인이 있을 수 있습니다.
  + Amazon EMR과 Amazon SageMaker Studio Classic이 서로 다른 VPC에 있습니다. 동일한 VPC에서 Amazon EMR과 Studio Classic을 모두 시작하는 것이 좋습니다. Amazon VPC 피어링도 사용할 수 있습니다. 추가 내용은 [VPC 피어링이란?](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)을 참조하세요.
  + Amazon EMR 마스터 보안 그룹에는 Presto에 사용되는 포트의 Amazon SageMaker Studio Classic 보안 그룹에 대한 인바운드 트래픽 규칙이 없습니다. 이 문제를 해결하려면 포트 8889에서 인바운드 트래픽을 허용하세요.
+ 연결 유형이 잘못 구성되어 연결이 실패합니다. 다음 ` Data Wrangler couldn't create a connection to {connection_source} successfully. Try connecting to {connection_source} again. For more information, see Troubleshoot. If you’re still experiencing issues, contact support. ` 오류 메시지가 표시될 수 있습니다.

  인증 방법을 확인합니다. Data Wrangler에서 지정한 인증 방법은 클러스터에서 사용 중인 인증 방법과 일치해야 합니다.
+ LDAP 인증을 위한 HDFS 권한이 없음 - 다음 지침을 사용하여 [Linux 보안 인증을 이용한 HDFS 권한 설정](https://docs.aws.amazon.com/whitepapers/latest/teaching-big-data-skills-with-amazon-emr/set-up-hdfs-permissions-using-linux-credentials.html) 문제를 해결하세요. 다음 명령으로 클러스터에 로그인할 수 있습니다.

  ```
  hdfs dfs -mkdir /user/USERNAME
  hdfs dfs -chown USERNAME:USERNAME /user/USERNAME
  ```
+ LDAP 인증 연결 키 누락 오류 - 다음 `Data Wrangler couldn't connect to EMR hive successfully. JDBC connection is missing required connection key(s): PWD` 오류 메시지가 표시될 수 있습니다.

  LDAP 인증의 경우 사용자 이름과 암호를 모두 지정해야 합니다. Secrets Manager에 저장된 JDBC URL은 `PWD` 속성이 누락되었습니다.
+ LDAP 구성 문제를 해결하는 경우: LDAP Authenticator(LDAP 서버)가 Amazon EMR 클러스터에 연결하도록 올바르게 구성되어 있는지 확인하는 것이 좋습니다. `ldapwhoami` 명령을 사용하면 구성 문제를 해결하는 데 도움이 됩니다. 예를 들어, 다음 명령을 실행할 수 있습니다.
  + LDAPS의 경우 - `ldapwhoami -x -H ldaps://ldap-server`
  + LDAP의 경우 - `ldapwhoami -x -H ldap://ldap-server`

  Authenticator를 성공적으로 구성한 경우 두 명령 중 하나가 `Anonymous`를 반환해야 합니다.

## Salesforce 관련 문제 해결
<a name="data-wrangler-troubleshooting-salesforce-data-cloud"></a>

### 수명 주기 구성 오류
<a name="data-wrangler-troubleshooting-salesforce-lcc-debug-data-cloud"></a>

사용자가 Studio Classic을 처음 열면 수명 주기 구성에 문제가 있다는 오류 메시지가 표시될 수 있습니다. Amazon CloudWatch를 사용하여 수명 주기 구성 스크립트로 작성된 로그에 액세스할 수 있습니다. 수명 주기 구성 디버깅에 대한 추가 정보는 [Amazon SageMaker Studio Classic의 수명 주기 구성 디버깅](studio-lcc-debug.md) 섹션을 참조하세요.

오류를 디버깅할 수 없는 경우 구성 파일을 수동으로 생성할 수 있습니다. Jupyter 서버를 삭제하거나 다시 시작할 때마다 파일을 만들어야 합니다. 다음 절차에 따라 수동으로 파일을 생성하세요.

**구성 파일을 생성하려면**

1. Studio Classic으로 이동합니다.

1. **파일**, **새로 만들기**, **터미널** 순으로 선택합니다.

1. `.sfgenie_identity_provider_oauth_config` 생성.

1. 텍스트 편집기에서 파일을 엽니다.

1. Secrets Manager 보안 암호의 Amazon 리소스 이름(ARN)이 포함된 JSON 객체를 파일에 추가합니다. 다음 템플릿을 사용하여 객체를 생성할 수 있습니다.

   ```
   {
     "secret_arn": "example-secret-ARN"
   }
   ```

1. 파일에 대한 변경 사항을 저장합니다.

### Data Wrangler 플로우에서 Salesforce 데이터 클라우드에 액세스할 수 없습니다.
<a name="data-wrangler-troubleshooting-salesforce-datacloud-access"></a>

사용자가 Data Wrangler 플로우에서 **Salesforce 데이터 클라우드**를 선택한 후에는 연결 설정을 위한 사전 조건이 충족되지 않았다는 오류 메시지가 표시될 수 있습니다. 다음 오류가 원인일 수 있습니다.
+ Secrets Manager의 Salesforce 보안 암호는 아직 생성되지 않았습니다.
+ Secrets Manager의 Salesforce 보안 암호가 생성되었지만 Salesforce 태그가 누락되었습니다.
+ Secrets Manager의 Salesforce 보안 암호가에서 잘못 생성되었습니다 AWS 리전. 예를 들어, `us-east-1`에서 보안 암호를 만들었기 때문에 사용자가 `ca-central-1`에서 Salesforce 데이터 클라우드에 액세스할 수 없습니다. `ca-central-1`에 보안 암호를 복제하거나 `ca-central-1`에서와 동일한 자격 증명을 사용하여 새 보안 암호 생성을 할 수 있습니다. 보안 암호 복제에 대한 자세한 내용은 [다른에 AWS Secrets Manager 보안 암호 복제를 참조하세요 AWS 리전](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create-manage-multi-region-secrets.html).
+ 사용자가 Amazon SageMaker Studio Classic에 액세스하는 데 사용하는 정책에에 대한 권한이 없습니다. AWS Secrets Manager
+ 수명 주기 구성을 통해 지정한 JSON 객체의 Secrets Manager ARN에 오타가 있습니다.
+ Salesforce OAuth 구성을 포함하는 Secrets Manager 보안 암호에 오타가 있습니다.

### `redirect_uri_mismatch`를 표시하는 빈 페이지
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-blank-page"></a>

사용자가 **저장 및 연결**을 선택하면 `redirect_uri_mismatch`를 표시되는 페이지로 리디렉션될 수 있습니다. Salesforce Connected App 설정에 등록한 콜백 URI가 누락되었거나 올바르지 않습니다.

다음 URL을 사용하여 Studio Classic URL이 Salesforce 조직의 Connected App 설정 `https://EXAMPLE_SALESFORCE_ORG/lightning/setup/NavigationMenus/home/`에 올바르게 등록되었는지 확인하세요. Connected App 설정 사용에 대한 추가 정보를 보려면 다음 `https://EXAMPLE_SALESFORCE_ORG/lightning/setup/NavigationMenus/home/` URL로 이동하세요.

**참고**  
Salesforce 시스템 내에서 URI를 전파하는 데 약 10분이 걸립니다.

### 공유 공간
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-shared-spaces"></a>

공유 공간은 현재 Salesforce 데이터 클라우드 통합과 함께 사용할 수 없습니다. Amazon SageMaker AI 도메인에서 사용하려는 공유 스페이스를 삭제하거나 공유 스페이스가 설정되지 않은 다른 도메인을 사용할 수 있습니다.

### OAuth 리디렉션 오류
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-error"></a>

사용자는 **연결**을 선택한 후 Salesforce 데이터 클라우드에서 데이터를 가져올 수 있어야 합니다. 오류가 발생하는 경우 다음과 같이 하도록 요청하는 것이 좋습니다.
+ 잠시 대기하도록 지시 - Amazon SageMaker Studio Classic으로 다시 리디렉션되면 인증 프로세스를 완료하는 데 최대 1분이 걸릴 수 있습니다. 리디렉션되는 동안에는 브라우저와의 상호 작용을 피하도록 안내하는 것이 좋습니다. 예를 들어 브라우저 탭을 닫거나 다른 탭으로 전환하거나 Data Wrangler 플로우와 상호 작용해서는 안 됩니다. 브라우저와 상호 작용하면 데이터 클라우드에 연결하는 데 필요한 인증 코드가 제거될 수 있습니다.
+ 사용자가 데이터 클라우드에 다시 연결하도록 요청하세요. - Salesforce 데이터 클라우드에 대한 연결이 실패할 수 있는 일시적인 문제가 있습니다. 사용자에게 새 Data Wrangler 플로우를 만들고 Salesforce 데이터 클라우드에 다시 연결해 보라고 하세요.
+ 사용자가 Amazon SageMaker Studio Classic이 열린 다른 탭을 모두 닫도록 하세요. Studio Classic을 여러 탭에서 열어 두면 Salesforce Data Cloud 연결이 실패할 수 있습니다. 사용자가 Studio Classic 탭을 하나만 열어 놓도록 하세요.
+ 동시에 여러 사용자가 Studio Classic에 액세스 - 한 번에 한 명의 사용자만 Amazon SageMaker AI 도메인에 액세스할 수 있습니다. 여러 사용자가 동일한 도메인에 액세스하는 경우 사용자가 Salesforce Data Cloud에 만들려고 하는 연결이 실패할 수 있습니다.

Data Wrangler와 Studio Classic을 모두 업데이트하면 오류가 수정될 수도 있습니다. Data Wrangler 업데이트에 대한 자세한 내용은 [Data Wrangler 업데이트](data-wrangler-update.md) 섹션을 참조하세요. Studio Classic에 대한 자세한 내용은 [Amazon SageMaker Studio Classic 종료 및 업데이트](studio-tasks-update-studio.md) 섹션을 참조하세요.

위의 문제 해결 단계를 수행해도 문제가 해결되지 않으면 Studio Classic URL에 해당 설명이 포함된 Salesforce의 오류 메시지가 표시될 수 있습니다. 다음 예제 메시지가 나올 수 있습니다: `error=invalid_client_id&error_description=client%20identifier%20invalid`

URL에서 오류 메시지를 살펴보고 이로 인해 발생하는 문제를 해결할 수 있습니다. 오류 메시지나 설명이 명확하지 않은 경우 Salesforce 지식 기반을 검색하는 것이 좋습니다. 지식 기반 검색을 이용할 수 없는 경우 Salesforce 헬프 데스크에 문의하여 추가 지원을 받을 수 있습니다.

### Data Wrangler를 로드하는 데 시간이 오래 걸림
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-long-load-time"></a>

사용자가 Salesforce 데이터 클라우드에서 Data Wrangler로 다시 리디렉션되는 경우 로드 시간이 길어질 수 있습니다.

사용자가 Data Wrangler를 처음 사용하거나 커널을 삭제한 경우, Data Wrangler를 사용하도록 새 Amazon EC2 인스턴스를 프로비저닝하는 데 약 5분이 걸릴 수 있습니다.

사용자가 Data Wrangler를 처음 사용하는 것이 아니고 커널을 삭제하지 않은 경우에는 페이지를 새로 고치거나 브라우저 탭을 최대한 많이 닫도록 요청할 수 있습니다.

위의 방법으로 문제가 해결되지 않으면 Salesforce 데이터 클라우드에 대한 새 연결을 설정하도록 하세요.

### `Invalid batch Id` 오류가 발생하여 사용자가 데이터를 내보내지 못했습니다.
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-batch-id"></a>

사용자가 Salesforce 데이터로 변환한 내용을 내보내는 경우 Data Wrangler가 백엔드에서 사용하는 SageMaker Processing 작업이 실패할 수 있습니다. Salesforce 데이터 클라우드를 일시적으로 사용할 수 없거나 캐싱 문제가 있을 수 있습니다.

이 문제를 해결하려면 사용자가 데이터를 가져오는 단계로 돌아가 쿼리하는 열의 순서를 변경하도록 하는 것이 좋습니다. 예를 들어 다음 쿼리를 변경할 수 있습니다.

```
SELECT col_A, col_B FROM table                
```

다음 쿼리를 실행하려면:

```
SELECT col_B, col_A FROM table                
```

열의 순서를 변경하고 이후에 수행한 변환이 여전히 유효한지 확인한 후에는 데이터 내보내기를 다시 시작할 수 있습니다.

### 사용자는 매우 큰 데이터세트를 내보낼 수 없습니다.
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-query"></a>

사용자가 Salesforce 데이터 클라우드에서 매우 큰 데이터세트를 가져온 경우 변환한 내용을 내보내지 못할 수 있습니다. 대규모 데이터세트는 행이 너무 많거나 복잡한 쿼리로 인해 발생할 수 있습니다.

사용자에게 다음 작업을 수행하도록 하는 것이 좋습니다.
+ SQL 쿼리 단순화하기
+ 데이터 샘플링

쿼리를 단순화하는 데 사용할 수 있는 몇 가지 전략은 다음과 같습니다.
+ `*` 연산자를 사용하는 대신 열 이름을 지정하세요.
+ 더 큰 서브셋을 사용하는 대신 가져오려는 데이터의 서브셋 찾기
+ 초대형 데이터세트 간 조인 최소화

샘플링을 사용하여 데이터세트의 행 수를 줄일 수 있습니다. 샘플링 방법에 대한 자세한 내용은 사용자가 [샘플링](data-wrangler-transform.md#data-wrangler-transform-sampling) 섹션을 참조할 수 있습니다.

### 잘못된 새로 고침 토큰으로 인해 사용자가 데이터를 내보낼 수 없습니다.
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-invalid-token"></a>

Data Wrangler는 JDBC 드라이버를 사용하여 Salesforce 데이터 클라우드와 통합합니다. 인증 방법은 OAuth입니다. OAuth의 경우 새로 고침 토큰과 액세스 토큰은 Salesforce 데이터 클라우드 내의 리소스에 대한 액세스를 승인하는 데 사용되는 서로 다른 두 개의 데이터입니다.

액세스 토큰 또는 코어 토큰을 사용하면 Data Wrangler를 통해 Salesforce 데이터에 액세스하고 쿼리를 직접 실행할 수 있습니다. 수명이 짧고 빨리 만료되도록 설계되었습니다. Salesforce 데이터에 대한 액세스를 유지하기 위해 Data Wrangler는 새로 고침 토큰을 사용하여 Salesforce로부터 새 액세스 토큰을 받습니다.

새로 고침이 너무 빨리 만료되도록 설정하여 사용자에게 새 액세스 토큰을 제공할 수 없을 수도 있습니다. 새로 고침 토큰 정책을 다시 검토하여 사용자에 대해 실행하는 데 시간이 오래 걸리는 쿼리를 수용할 수 있는지 확인해야 할 수도 있습니다. 새로 고침 토큰 정책을 구성하는 방법에 대한 자세한 내용은 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ConnectedApplication/home/` 섹션을 참조하세요.

### 쿼리가 실패하거나 테이블이 로드되지 않음
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-table-not-loading"></a>

Salesforce에서 서비스 중단이 발생했습니다. 모든 것을 올바르게 구성했더라도 사용자가 일정 기간 동안 데이터를 가져오지 못할 수 있습니다.

유지 관리 상의 이유로 서비스 중단이 발생할 수 있습니다. 다음 날 문제가 해결되었는지 확인하는 것이 좋습니다.

하루 이상 문제가 발생하는 경우 Salesforce 헬프 데스크에 문의하여 추가 지원을 받는 것이 좋습니다. Salesforce에 문의하는 방법에 대한 자세한 내용은 [Salesforce에 어떻게 문의하시겠습니까?](https://www.salesforce.com/company/contact-us/)를 참조하세요.

### Studio Classic 리디렉션 중 `OAUTH_APP_BLOCKED`
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-app-blocked"></a>

사용자가 Amazon SageMaker Studio Classic으로 다시 리디렉션되면 URL 내에서 `error=OAUTH_APP_BLOCKED` 쿼리 파라미터를 확인할 수 있습니다. 하루 안에 저절로 해결되어야 하는 일시적인 문제가 발생하고 있을 수 있습니다.

Connected App에 대한 사용자의 접근도 차단했을 수 있습니다. 이 문제 해결에 대한 자세한 내용은 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ConnectedApplication/home/` 섹션을 참조하세요.

### Studio Classic 리디렉션 중 `OAUTH_APP_DENIED`
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-app-access-denied"></a>

사용자가 Amazon SageMaker Studio Classic으로 다시 리디렉션되면 URL 내에서 `error=OAUTH_APP_ACCESS_DENIED` 쿼리 파라미터를 확인할 수 있습니다. Data Wrangler와 관련된 `Connected App`에 액세스할 권한을 프로필 유형에 부여하지 않았습니다.

액세스 문제를 해결하려면 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ManageUsers/home/`으로 이동해 해당 사용자가 올바른 프로필에 할당되었는지 확인하세요.

# Amazon EC2 인스턴스 제한 상향
<a name="data-wrangler-increase-instance-limit"></a>

Data Wrangler를 사용할 경우 `The following instance type is not available: ml.m5.4xlarge. Try selecting a different instance below.`(이)라는 오류 메시지가 나타날 수 있습니다.

이 메시지는 다른 인스턴스 유형을 선택해야 한다는 뜻일 수도 있지만, Amazon EC2 인스턴스가 부족하여 워크플로에서 Data Wrangler를 실행할 수 없다는 뜻일 수도 있습니다. 사용자는 다음 절차에 따라 인스턴스 수를 늘릴 수 있습니다.

인스턴스 수를 늘리려면 다음 방법대로 하세요.

1. 를 엽니다 AWS Management Console.

1. 검색 창에 **Services Quotas**을(를) 입력하세요.

1. **Service Quotas**를 선택하세요.

1. **AWS 서비스**를 선택하세요.

1. 검색 창에 **Amazon SageMaker AI**을(를) 입력하세요.

1. **Amazon SageMaker AI**를 선택합니다.

1. **Service Quotas** 란에 **Studio KernelGateway Apps running on *ml.m5.4xlarge* instance**을(를) 입력하세요.
**참고**  
ml.m5.4xlarge는 Data Wrangler의 기본 인스턴스 유형입니다. 사용자는 다른 인스턴스 유형을 사용하고 해당 인스턴스 유형에 대한 할당량 증가를 요청할 수 있습니다. 자세한 내용은 [인스턴스](data-wrangler-data-flow.md#data-wrangler-data-flow-instances) 단원을 참조하십시오.

1. ***ml.m5.4xlarge* 인스턴스에서 실행되는 Studio 커널 게이트웨이 앱**을 선택하세요.

1. **할당량 증가 요청**을 선택합니다.

1. **할당량 값 변경**에서 **적용된 할당량 값**보다 큰 값을 지정하세요.

1. **요청**을 선택합니다.

요청이 승인되면는 계정과 연결된 이메일 주소로 알림을 AWS 보냅니다. 사용자는 **Service Quotas** 페이지에서 **할당량 요청 내역**을 선택하여 요청의 상태를 확인할 수도 있습니다. 처리된 요청은 **마감** **상태**입니다.

# Data Wrangler 업데이트
<a name="data-wrangler-update"></a>

Data Wrangler를 최신 버전으로 업데이트하려면 먼저 Amazon SageMaker Studio Classic 제어판에서 해당 KernelGateway 앱을 종료해야 합니다. KernelGateway 앱을 종료한 후, Studio Classic에서 새로운 또는 기존의 Data Wrangler 흐름을 열어 앱을 다시 시작합니다. 새로운 또는 기존의 Data Wrangler 플로우를 열면 시작되는 커널에 최신 버전의 Data Wrangler가 포함됩니다.

**Studio Classic 및 Data Wrangler 인스턴스를 업데이트합니다.**

1. [SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker)로 이동합니다.

1. SageMaker AI를 선택한 다음, Studio Classic을 선택합니다.

1. 사용자 이름을 선택합니다.

1. **앱**에서 **앱 이름**을 표시하는 행에서 `sagemaker-data-wrang`로 시작하는 앱 및 JupyterServer 앱에 대해 **앱 삭제**를 선택합니다.

1. **예, 앱을 삭제합니다**를 선택합니다.

1. 확인란에 `delete`를 입력합니다.

1. **삭제**를 선택합니다.

1. Studio Classic 인스턴스를 다시 엽니다. Data Wrangler 플로우을 생성하기 시작하면 이제 인스턴스가 최신 버전의 Data Wrangler를 사용합니다.

또는, 최신 버전이 아닌 Data Wrangler 애플리케이션 버전을 사용 중이고 기존 Data Wrangler 흐름이 열려 있는 경우 Studio Classic UI에 Data Wrangler 애플리케이션 버전을 업데이트하라는 메시지가 표시됩니다. 아래 스크린샷에서 이러한 메시지를 볼 수 있습니다.

**중요**  
이렇게 하면 Data Wrangler 커널 게이트웨이 앱만 업데이트됩니다. 그래도 여전히 사용자 계정에서 JupyterServer 앱을 종료해야 합니다. 이를 수행하려면 바로 이전의 단계를 따르세요.

![\[Data Wrangler 콘솔의 Data Wrangler 업데이트 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/data-wrangler-1click-restart.png)


**나중에 알림**을 선택할 수도 있습니다. 이 경우 화면 오른쪽 상단에 **업데이트** 버튼이 나타납니다.

![\[Data Wrangler 콘솔에서 업데이트의 위치입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/data-wrangler-1click-restart-update.png)


# Data Wrangler 종료
<a name="data-wrangler-shut-down"></a>

Data Wrangler를 사용하지 않을 때는 추가 요금이 발생하지 않도록 Data Wrangler가 실행되는 인스턴스를 종료해야 합니다.

작업 손실을 방지하려면 Data Wrangler를 종료하기 전에 데이터 흐름을 저장하세요. Studio Classic에서 데이터 흐름을 저장하려면 **파일**을 선택한 다음 **Data Wrangler 흐름 저장**을 선택하세요. Data Wrangler는 60초마다 데이터 흐름을 자동으로 저장합니다.

**Studio Classic에서 Data Wrangler 인스턴스를 종료하는 방법은 다음과 같습니다.**

1. Studio Classic에서 **실행 중인 인스턴스 및 커널** 아이콘(![\[Icon of a gear or cog symbol representing settings or configuration options.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/studio_classic_dw_instances.png))을 선택합니다.

1. **실행 중인 앱** 아래에 **sagemaker-data-wrangler-1.0** 앱이 나타납니다. 이 앱 옆에 있는 종료 아이콘(![\[Power button icon with a circular shape and vertical line symbol.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Shutdown_light.png))을 선택합니다.

   Data Wrangler는 ml.m5.4xlarge 인스턴스에서 실행됩니다. Data Wrangler 앱을 종료하면 **실행 중인 인스턴스**에서 이 인스턴스가 사라집니다.

**중요**  
Data Wrangler를 다시 열면 Amazon EC2 인스턴스가 애플리케이션 실행을 시작하고 컴퓨팅 요금이 부과됩니다. 컴퓨팅 외에도 사용하는 스토리지에 대해서도 요금이 부과됩니다. 예를 들어 Data Wrangler와 함께 사용 중인 모든 Amazon S3 버킷에 대해 요금이 부과됩니다.  
애플리케이션을 종료한 후에도 여전히 Data Wrangler 요금이 청구되는 경우 유휴 세션을 자동으로 종료하는 데 사용할 수 있는 Jupyter 확장이 있습니다. 확장에 대한 자세한 내용은 [SageMaker-Studio-Autoshutdown-Extension](https://github.com/aws-samples/sagemaker-studio-auto-shutdown-extension)을 참조하세요.

Data Wrangler 앱을 종료한 후, 다음번에 Data Wrangler 흐름 파일을 열려면 앱을 다시 시작해야 합니다. 몇 분 정도 소요될 수 있습니다.